这是我参与「第四届青训营」笔记创作活动的的第13天
LSMT 存储引擎浅析
LSMT 与存储引擎介绍
LSMT是通过Append-only Write + 择机Compact来围护结构的索引树
LSMT 与存储引擎优势与实现
- 在 B+Tree 中,数据插入是原地更新的
- B+Tree 在发生不平衡或者节点容量到达阈值后,必须立即进行分裂来平衡。
为什么要采用LSMT模型
- 在计算机存储乃至整个工程界都在利用Indirection处理资源的不对称性
- 存储引擎面对的资源不对称性在不同时期是不同的
LSMT 模型理论分析
Cloud-Native LSMT Storage Engine-HBase
- RocksDB是单机存储引擎,HBase比RocksDB更云原生,SST直接存储于HDFS上。
- 二者在理论存储模型上都是LSMT
LSMT模型算法复杂度分析:
- T: size ratio,每层LSMT 比上一层大多少,L0大小为1,则L1大小为T,L2为TA2,以此类推
- L: level num, LSMT层数B:每个最小的10单位能装载多少条记录
- M:每个BloomFilter有多少 bits
- N:每个BloomFilter 生成时用了多少条 Key
- S:区间查询的记录数量
LSMT 与存储引擎调优案例
LSMT存储引擎调优案例-TerarkDB:
- TerarkDB aka LavakV 是字节跳动内部基于R ocksDB深度定制优化的自研LSMT存储引擎,其中完全自研的 KV 分离功能 上线后取得了巨大的收益。
- KV分商受启发于论文 WiscKey: Separating Keys from Values in SsD-conscious Storage,概括起来就是Value 较长的记录的Value 单独存储
LSMT存储引擎调优案例-TerarkDB & Flink:
-
收益结论:
- 平均CPU开销在 3个作业上降低了 26%~39%
- 峰值CPU开销在广告作业上有明显的收益,降低了 67%
- 平均容量开销在3个作业上降低了17%~31.2%
- 直播业务某集群容量不收缩,TerarkDB的 schedule TTL GC彻底解决了该问题
总结:
单机数据库的 ACID 特性依赖于存储引擎
LSMT 存储引擎的顺序写特性更适合现代计算机体系结构
LSMT 和 B+Tree 可以用同一模型描述并互相转化
Level Compaction 策略,降低了读放大和空间放大,增加了写放大
Tier Compaction 策略,降低了写放大,增大了读放大和空间放大
分布式 KV 存储,如 HBase,背后的理论模型与单机存储引擎 RocksDB 一样都是 LSMT