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

326 阅读3分钟

这是我参与「第四届青训营 」笔记创作活动的的第5天,学习的内容为《LSMT存储引擎浅析》

了解LSMT

LSMT的历史介绍

  • LSMT是 Log-Structured Merge-Tree的缩写,由Patrick O 'Neil etc.在1996年的论文,The Log-Structured Merge-Tree (LSM-Tree),提出。
  • 相较而言,B-Tree出现就早得多了,在1970年由 Bayer, R.; McCreight,E.提出。
  • 早期的数据库系统一般都采用 B-Tree家族作为索引,例如MySQL。2000年后诞生的数据库大多采用LSMT索引,例如Google BigTable,HBase,Canssandra等。

LSMT 介绍

  • Log-Structured Merge-Tree(LSMT),最早由Patrick在1996年提出,2000年后的数据库大多采用LSMT索引
  • 相较而言,B-Tree在1970年由Bayer提出,早期的数据库常用其作为索引

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

image.png

LMST存储引擎的优势与实现

LSMT与B+Tree的异同

  • B+Tree
    • 数据插入是原地更新的
    • 在发生不平衡或者节点容量到达阈值后,必须立刻进行分裂来平衡

image.png

  1. 在 B+Tree 中,数据插入是原地更新的,装有 (10, 20, 30, 40) 的节点在插入和分裂后,原节点覆写成 (10, 15)。此外,B+Tree 在发生不平衡或者节点容量到达阈值后,必须立即进行分裂来平衡。
  2. 反观 LSMT,数据的插入是追加的(Append-only),当树不平衡或者垃圾过多时,有专门 Compact 线程进行 Compact,可以称之为延迟(Lazy)的。
  3. 尽管 LSMT 和 B+Tree 可以用一个模型描述,工程实践上我们还是用 LSMT 来表示一个 Append-only 和 Lazy Compact 的索引树,B+Tree 来表示一个 Inplace-Update 和 Instant Compact 的索引树。Append-only 和 Lazy Compact 这两个特性更符合现代计算机设备的特性。

为什么要采用LSMT模型

  • 在计算机存储乃至整个工程界都在利用Indirection处理资源的不对称性
  • 存储引擎面对的资源不对称性在不同时期是不同的
  • HDD时代:顺序与随机操作性能不对称
  • SSD时代:顺序写与随机写性能不对称
  • 这二者的共性是顺序写是一个对设备很友好的操作,LSMT符合这一点,而B+ Tree依赖原地更新,导致随机写。

LSMT存储引擎的实现

  • RocksDB为例
  • Write
    • 写入流程主要有两个优化,批量WAL写入与并发Memtable更新
    • 在真正执行修改之前会先将变更写入WALWAL写成功则写入成功
  • Snapshot & SuperVision
    • 数据由三部分组成,Memtable/Immemtable/SST,持有这三部分数据并提供快照功能的组件叫做SuperVision
    • MemtableSST的释放依赖于引用计数,对于读取来说,只要拿着SuperVision,从Memtable一级一级向下,就能查到记录。拿着SuperVision不释放,等于是拿到了快照。
    • Thread Local Supervision Cache
  • Get&BloomFilter
    • 读取在大框架上和B+Tree类似,就是层层向下。
    • 相对于B+TreeLSMT点查需要访问的数据块更多。为了加速点查,一般LSMT引擎都会在SST中嵌入BloomFilter
  • Compact
    • CompactLSMT中是将Key区间有重叠或无效数据较多的SST进行合并,以此来加速读取或者回收空间。Compact策略可以分为两大类,LevelTier

image.png

image.png

image.png

LSMT模型理论分析

-   *Tier*策略降低了写放大,增加了读放大和空间放大
-   *Level*策略增加了写放大,降低了读和空间放大
  • 调优案例与展望
    • KV分离
      • WiscKey:Separating Keys from values in SSD-conscious Storage
        • 数据库存两类数据,索引以及用户输入的数据,数据只要可以读就行,不需要跟着compact
      • value场景,收益很高

image.png