这是我参与「第四届青训营 」笔记创作活动的第14天。
写在前面
LSMT是Log-Structured Merge Tree的缩写,通过append-only write + 择机 compact来维护结构的索引树。了解存储引擎的细节可以帮助我们深入理解高性能存储和查询的背景,从而更加高效地优化。
笔记正文
1. LSMT与存储引擎介绍
1. 存储引擎
- 计算层
- SQL解析
- 查询优化
- 计划执行
- 存储层
- 数据库的ACID特性在MySQL中全部强依赖于存储引擎
- ACID
- Atomicity原子性
- Write Ahead Log/Redo Log
- Consistency一致性
- 依赖于数据库整体
- Isolation独立性
- Snapshot/2PL(Phase Lock)
- Durability持久性
- Flusher遵循Sync语意
- Atomicity原子性
- 存储引擎的其他功能
- 屏蔽IO细节
- 统计信息与Predicate Push Down能力
2. LSMT存储引擎的优势与实现
1. LSMT与B+Tree的异同
- B+Tree中数据插入是原地更新的
- B+Tree中发生不平衡或者节点容量达到阈值后,必须立即分裂来平衡
- LSMT和B+Tree可以用统一模型
- 二者没有本质不同
2. 为什么采用LSMT模型
- another level of indirection
- 利用indirection处理资源的不对称性
- 存储引擎面对的资源不对称性在不同时期是不同的,B+Tree依赖原地更新,随机写
- 顺序与随机操作性能不对称
- 机械硬盘顺序读是随机读的25倍吞吐速度
- SSD随机写给主控带来GC压力,顺序写是随机写的6倍
3. 以RocksDB为例
- Write
- Snapshot & SuperVision
- Get & BloomFilter
- Compact - Level
- Compact - Tier
3. LSMT模型理论分析
- Cloud Native LSMT Storage Engine - HBase
- 算法复杂度分析
- T:size ratio
- L: level num
- M: 每个bloom filter 多少个bits
- N:每个bloom filter 生成时用了多少key
- S: 区间查询的记录数量
- Write
- Tier
4. LSMT存储引擎调优案例与展望
- TerarkDB
- TerarkDB & Abase & ByteGraph
- TerarkDB & Flink
- 新硬件
- 新模型
- WiscKey
- REMIX
- 新参数/新工况