LSMT存储引擎浅析| 青训营笔记

92 阅读2分钟

这是我参与「第四届青训营 」笔记创作活动的的第4天

LSMT是什么

通过Append-only Write + 择机Compact来维护索引树的结构

image.png

为什么要采用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

image.png

image.png

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区间重叠来降低写放大 image.png
  • Tier
    • 允许LSMT每层有多个区间重合的SST
    • 缺点
      • 每层的区间内重合的SST越多,读取时查询的SST越多
      • 用读放大的增加换取了写放大的减小 image.png

Cloud-Native LSMT Storage Engine --- HBase

HBase比RockDB更云一些, 对于SST,HBase直接存储在HDFS上, Meta信息 HBase放置于ZK, 理论存储模型本质都是LSMT. image.png

LSMT模型理论分析

  • Level 策略增加了写放大,降低了读和空间放大

  • Tier 策略降低了写放大,增加了读放大和空间放大

image.png

LSMT存储引擎调优案例与展望

  • KV分离:Value较长的记录的Value单独存储,避免频繁挪动这些数据

  • LSMT存储引擎调优案例

    • TerarkDB&Abase&ByteGraph
    • TerarkDB&Flink
  • 展望

    • 新硬件 如:MatrixKV

    • 新模型 如:WiscKey 和 REMIX

    • 新参数/新工况 如:The Log-Structured Merge-Bush & the Wacky Continuum