一.什么是LSM树?
LSM全称为"Log-Structured Merged-Tree".后来被Google发表的BigTable
论文发扬广大.LSM相对于B+树而言,LSM树在损失部分读性能的前提下尽可能的提高写性能,将随机写
转换为顺序写
.
LSM树主要应用于写多读少
的情况.
二.LSM树的基本思想
LSM树将所有的数据的插入,删除,修改等操作保存在内存之中,当操作达到一定的阀值,批量的写入磁盘之中.而在写入磁盘的时候,达到一定的阀值会进行合并,对于磁盘文件不进行修改.
三.LSM树如何组织起来?
LSM树的结构是横跨内存和磁盘的,其中包含了memtable
,sstable
,log
,bloom_fifter
组件,下述将会讨论这些组件应该如何实现?
在内存中如何存储?
-
首先介绍一下
memtable
这一组件,它是在内存中的数据结构,用来保存最近的一些更新操作.当写数据到memtable
中,必须先写入磁盘中的Log
(这里我们可以采用写穿的方式,例如O_SYNC
或者fsync
直接去磁盘进行交互),防止数据因为掉电而丢失. -
memtable
一般是需要有序的,这样在落入磁盘的时候是可