LSM树日志结构合并树
学习这件事要一点一滴积累,不可心急。
1、LSM树,它是一种数据结构。英文全称,The Log-Structured Merge Tree,翻译为日志结构合并树
2、LSM树并不像B+树、红黑树一样是一颗严格的树状数据结构。
3、HBase、Cassandra、RocksDB和LevelDB这样的Nosql数据库,以及Prometheus,其底层的存储引擎都是基于LSM树。
4、那么多数据结构,LSMTree应该是最年轻的一个,它在1996年被设计出来。
5、LSM树的核心特点是利用顺序写来提高写性能,但因为分层的设计会稍微降低读性能,但是通过牺牲小部分读性能换来高性能写,使得LSM树成为非常流行的存储结构。
6、LSM树是一个横跨内存和磁盘的,包含多颗"子树"的一个森林。
7、LSM树有以下三个重要组成部分:MemTable、Immutable MemTable和SSTable(Sorted String Table)
8、LSM树的Compact策略:size-tiered 策略 和leveled策略
9、LSM树的优点是写入速度快,因为利用了磁盘的顺序写,所以才让Nosql数据库性能比关系型数据库要好。
Nosql存储系统多是 Key-Value结构,最主要功能只有两个:put 和 get
10、LSM树 提供了 排序能力。
11、LSM树是一个多层结构,自上而下存储的数据越来越多。
c0层(内存里)是默认有序的,这个顺序就是key的字典顺序
c1-cN层在磁盘上,每一层都安装key的字典顺序排列。
12、c0层数据写入达到阈值时,会c0层数据会合并到c1层,合并的过程叫compaction。
13、LSM会在compaction中自动删除早期的key 。compaction是个异步的过程,不会影响写入性能
14、从c0到cN数据越来越旧,查询时候是先查c0层,然后c1再c2.,逐层查找。
15、针对读的优化,不同的nosql数据库对其采用不同的方案进行了优化处理,这个和LSM树无关。
16、总结:LSM树的结构就像多层喷泉,上层满了,就会溢出到下一层。
17、LSM的合并compaction在不同的nosql数据库中的落地实践是不一样的。
参考:
LSM树详解 - 知乎
深入浅出分析LSM树(日志结构合并树) - 知乎
LSM树日志结构合并树相关推荐
- LSM tree(日志结构合并树)_笔记
WAL:Write Ahead Log 写前日志,顺序日志文件 1 LSM tree的定义 LSM tree: Log-Structured-Merge-Tree,日志结构合并树. Log-Struc ...
- LSM树(日志结构合并树)总结-java版
目录 为什么要有LSM树 数据库存储引擎索引的底层结构 BTree的随机写特点 LSM树的诞生背景 简介 LSM树与B树的差异 LSM树优化 LSM树基本原理 LevelDB中的LSM HBase中的 ...
- 数据结构(四)、LSM树(日志结构合并树)
传统关系型数据库大都使用B-Tree或其变体作为存储结构,能够进行高效查找.但保存在磁盘中时它也有一个明显的缺陷,那就是逻辑上相离很近但物理却可能相隔很远,这就可能造成大量的磁盘随机读写.因此对于关系 ...
- 【图文详解】一文全面彻底搞懂HBase、LevelDB、RocksDB等NoSQL背后的存储原理:LSM-tree日志结构合并树...
LSM 树广泛用于数据存储,例如 RocksDB.Apache AsterixDB.Bigtable.HBase.LevelDB.Apache Accumulo.SQLite4.Tarantool.W ...
- 【图文详解】一文全面彻底搞懂HBase、LevelDB、RocksDB等NoSQL背后的存储原理:LSM-tree 日志结构合并树...
LSM 树广泛用于数据存储,例如 RocksDB.Apache AsterixDB.Bigtable.HBase.LevelDB.Apache Accumulo.SQLite4.Tarantool.W ...
- three.js实现3d球体树状结构布局——添加入场、出场、点击放大等动画
目录 系列文章 前言 新增功能 添加背景 灯光旋转动画 数据入场.出场动画 点击放大 实现效果 实现源码 相关资源 系列文章 three.js实现3d球体树状结构布局--树状结构的实现 前言 本文建议 ...
- LSM树——LSM 将B+树等结构昂贵的随机IO变的更快,而代价就是读操作要处理大量的索引文件(sstable)而不是一个,另外还是一些IO被合并操作消耗。...
Basic Compaction 为了保持LSM的读操作相对较快,维护并减少sstable文件的个数是很重要的,所以让我们更深入的看一下合并操作.这个过程有一点儿像一般垃圾回收算法. 当一定数量的ss ...
- SDUT 2127 树-堆结构练习——合并果子之哈夫曼树(优先队列)
树-堆结构练习--合并果子之哈夫曼树 Time Limit: 1000 ms Memory Limit: 65536 KiB Submit Statistic Problem Description ...
- 树-堆结构练习——合并果子之哈夫曼树
树-堆结构练习--合并果子之哈夫曼树 Description 在一个果园里,多多已经将所有的果子打了下来,而且按果子的不同种类分成了不同的堆.多多决定把所有的果子合成一堆. 每一次合并,多多可以把两堆 ...
最新文章
- MyBatis的一对和多对对和动态SQL
- javascript运行过程中的“预编译阶段”和“执行阶段”
- python signal模块作用_如何理解python中信号Signal?
- linux安装之后缺少命令,CentOS7安装成功后缺少命令的解决办法
- 我的世界java版_我的世界Java版1.15版本
- Zookeeper开源客户端curator
- 部署war包到tomcat根目录
- 传感器实训心得体会_传感器心得体会范文
- php exeil导入,反编译工具ILSpy.exe
- vue3中json编辑器
- Js实现实时显示系统时间(获取当前时间并显示)
- three.js 08-03 之 加载和保存对象
- invalid suffix on literal; C++11 requires a space between literal and string macro [-Wliteral-suffix
- 友善串口工具 电子秤_Serial Port Utility(友善串口调试助手)
- 我用python代码表白,泡到了大学小师妹
- Windows技术文章汇集
- oracle中execute是什么意思,oracle中EXECUTEIMMEDIATE是什么意思?如何使用,请用自己......
- 送20本豆瓣高分技术图书!
- git代码使用空格缩进
- 前端Vue制作日历插件FullCalendar