这是我参与「第四届青训营 」笔记创作活动的第14天,在第十四节课中主要了解到了LSMT存储引擎浅析有关的内容。
LSMT与存储引擎介绍
LSMT的历史
- Log-Structured Merge-Tree
LSMT是什么
- 通过Append-only Write+择机Compact来维护结构的索引树
存储引擎是什么
- 以单机数据库MySQL为例
- 大致可以分为:计算层、存储层
- 计算层主要负责SQL解析、查询优化、计划执行
- 数据库著名的ACID特性,在MySQL中全部强依赖与存储引擎
- 还负责屏蔽IO细节提供更好的抽象
- 提供统计信息与Predicate Push Down能力
LSMT存储引擎的优势与实现
LSMT与B+Tree的异同
- 在B+Tree中,数据插入是原地更新的
- B+Tree在发生不平衡或者节点容量达到阈值后,必须立即进行分裂来平衡
- 可以用统一的模型描述
- 从高层次的数据结构角度来看,没有本质的不同,可以互相转化
为什么要采用LSMT模型
- 存储引擎面对的资源不对称性在不同时期是不同的
- HDD时代,顺序操作远快于随机操作
- SSD时代,顺序写操作远快于随机写操作
实现,以RocksDB为例
Write:
- 主要有两个优化,批量WAL写入与并发MemTable更新
- RocksDB在真正执行修改之前,会先将变更写入WAL,WAL写成功则写入成功
- 多次写入者会选出一个Leader
- 没有批量提交的话,只能链式唤醒
- 链式唤醒加大前台延迟
- 写完WAL还要写MemTable
- RocksDB在继承LevelDB的基础上又添加了并发MemTable写入的优化
LSMT模型理论分析
- RocksDB是单机存储引擎,HBase比RocksDB更“云”一些,SST直接存储在HDFS上
- 二者在理论存储模型上都是LSMT
LSMT存储引擎调优案例与展望
- LSMT存储引擎调优案例-TerarkDB