LSM Tree算法原理
LSM Tree(Log-Structured Merge Tree)是一种针对写密集型场景优化的数据结构,广泛应用于LevelDB、RocksDB等数据库引擎中。其核心原理如下:
1. 写入优化:顺序写代替随机写
内存缓冲(MemTable):写入操作首先被写入内存中的数据结构(如跳表或平衡树),称为MemTable。内存写入速度快,避免了直接操作磁盘的随机I/O。
不可变的SSTable(Sorted String Table):当MemTable达到一定大小后,会被冻结并转换为不可变的SSTable,按主键排序后顺序写入磁盘(通常为Level 0层)。这种顺序写入大幅提升了吞吐量。
2. 分层合并(Compaction)
层级结构:磁盘数据被组织为多层(Level 0到Level N),每层容量呈指数级增长(如10倍)。低级层的SSTable可能存在键范围重叠,而高层SSTable全局有序且无重叠。
合并过程:当某层数据量超过阈值时,触发合并操作(如Level 0到Level 1)。
合并时读取多个SSTable,按键排序、去重(保留最新版本),并生成新的有序文件写入更高层。此过程逐步将数据推向底层,确保高层数据全局有序。
写放大(Write Amplification):合并可能导致数据多次重写,高