LSMT概述
简单来说,就是通过Append-only Write+择机Compact来维护结构的索引树。
LSMT的历史
- LSMT是Log-Structured Merge-Tree的缩写,由Patrick O 'Neil etc.在1996年的论文,The Log-Structured Merge-Tree(LSM-Tree),提出。
- 相较而言,B-Tree出现就早得多了,在197O年由Bayer,R.;McCreight,E.提出。
- 早期的数据库系统一般都采用B-Tree家族作为索引,例如MySQL。2000年后诞生的数据库 大多采用LSMT索引,例如Google BigTable,HBase,Canssandra等。
存储引擎是什么?
- ACD是什么/存储引擎哪些组件保障了这些特性?
- Atomicity Write-Ahead Log(WAL)Redo Log
- Consistency(Correctness) 依赖于数据库整体
- Isolation Snapshot 2PL(Phase Lock)
- Durability Flusher遵循Sync语意
- 屏蔽细节提供更好的抽象
- 提供统计信息与Predicate Push Down能力
- 落盘时机不确定造成的事务不安全
- IO Stall
- 错误处理繁琐
- 无法完全发挥硬件性能
为什么要采用LSMT模型
- 机械硬盘时代,顺序操作远快于随机操作
- SSD时代,顺序写操作远快于随机写操作
这二者的共性是顺序写是一个对设备很友好的操作,LSMT符合这一点,而B+Tre依赖原地更新,导致随机写。
LSMT模型算法复杂度分析
- T:size ratio,每层LSMT比上一层大多少,L0大小为1,则L1大小为T,L2为T^2,以此类推
- L:level num,LSMT层数B:每个最小的IO单位能装载多少条记录
- M:每个BloomFilter有多少bits
- N:每个BloomFilter生成时用了多少条Key
- S:区间查询的记录数量
总结
- 单机数据库的ACID特性依赖于存储引擎
- LSMT存储引擎的顺序写特性更适合现代计算机体系结构
- LSMT和B+Tree可以用同一模型描述并互相转化
- Level Compaction策略,降低了读放大和空间放大,增加了写放大
- Tier Compaction策略,降低了写放大,增大了读放大和空间放大
- 分布式KV存储,如HBase,背后的理论模型与单机存储引擎RocksDB一样都是LSMT