这是我参与「第四届青训营 」笔记创作活动的的第4天
LSMT是什么
通过Append-only Write + 择机Compact来维护索引树的结构
为什么要采用LSMT模型
All problems in computer science can be solved by another level of indirection From Butler Lampson
-
相对于B+树的优势
- 顺序写对SSD设备更友好,Append-only 和 Lazy Compact更符合现代计算机的特性
- SST 不可修改的特性使得其能使用更加紧凑的数据排列和加上压缩
- 后台延迟 Compact 能更好利用 CPU 多核处理能力,降低前台请求延迟
-
相对于HashTable的优势
- LSTM更通用,既能点查询,又能是顺序查询,而Hashtable只能点查询
LSMT存储引擎的实现
以RocksDB为例
Write
多个写入者会选出一个 Leader,由这个 Leader 来一次性写入。这样的好处在于可以批量聚合请求,避免频繁提交小 IO
Snapshop & SuperVision
SuperVision:持有RocksDB三部分数据(MemTable/ImmemTable/SST)并提供快照功能的组件
-
优化:Thread Local SuperVersion Cache
- 1、每个读者都缓存一个 SuperVersion,读之前检查下 SuperVersion 是否过期
- 2、如果没有就直接用这个 SuperVersion,不需要再加减引用计数器;如果 SuperVersion 过期了,读者就必须刷新一遍 SuperVersion。
- 3、为了避免某一个读者的 Thread Local 缓存持有一个 SuperVersion 太久导致资源无法回收,每当有新的 SuperVersion 生成时会标记所有读者缓存的 SuperVersion 失效。
Get & BloomFilter
RocksDB读取是层层向下的,相对于B+Tree, LSMT点查需要访问的数据块更多
-
优化
-
在SST中嵌入BloomFilter加速点查
-
两层索引
-
前缀压缩
-
Compact
LSMT中将Key区间有重叠或无效数据较多的SST进行合并,以此来加速读取或回收空间
Compact策略
- Level
- 每一层不允许有SST的Key重合
- 缺点:
- 存在写放大的问题
- 实际上,将L0作为例外,允许有SST Key区间重叠来降低写放大
- Tier
- 允许LSMT每层有多个区间重合的SST
- 缺点
- 每层的区间内重合的SST越多,读取时查询的SST越多
- 用读放大的增加换取了写放大的减小
Cloud-Native LSMT Storage Engine --- HBase
HBase比RockDB更云一些,
对于SST,HBase直接存储在HDFS上,
Meta信息 HBase放置于ZK,
理论存储模型本质都是LSMT.
LSMT模型理论分析
-
Level 策略增加了写放大,降低了读和空间放大
-
Tier 策略降低了写放大,增加了读放大和空间放大
LSMT存储引擎调优案例与展望
-
KV分离:Value较长的记录的Value单独存储,避免频繁挪动这些数据
-
LSMT存储引擎调优案例
- TerarkDB&Abase&ByteGraph
- TerarkDB&Flink
-
展望
-
新硬件 如:MatrixKV
-
新模型 如:WiscKey 和 REMIX
-
新参数/新工况 如:The Log-Structured Merge-Bush & the Wacky Continuum
-