学习这件事要一点一滴积累,不可心急。
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数据库中的落地实践是不一样的。
参考: