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

135 阅读2分钟

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

重点:在文件之上的单节点存储层面,数据是如何存储的

LSMT(1996提出)

早期数据库一般采用B-Tree,2000年之后的多采用LSMT(Hbase,BigTable等)

大致原理流程

image.png

存储引擎需要保证

  • ACID

  • 屏蔽IO细节,提供更好抽象

    如果将细节交给操作系统接管,如使用mmap,会有如下问题。

image.png

  • predicate push down(一种过滤能力)+提供精准统计信息

LSMT与B+树的异同

高层次数据结构看,两者没有本质不同。

  • B+树原地插入;不平衡或结点容量达到阈值时,立即分裂

image.png

为什么是LSMT?

image.png

存储引擎的实现-write

原子性依赖于WAL 优化: image.png 完整流程示意图:(注:同一时刻发生的事件颜色相同)

解析:选出leader,由leader唤醒其他的work,多个同步进行,最后由一个进行收尾 image.png

存储引擎的实现-Snapshot&SuperVision

  • 概念: image.png
  • 优化:加入Thread Local SuperVersion Cache 原本:读取操作要频繁acquire和release,多核污染问题,对cpu不友好

优化后:读取时只需检查superversion并标记thread local缓存正在使用

存储引擎的实现-Get&BloomFilter

RocksDB的读取也是层层向下。

  • 相较于B+Tree,LMST点查需要访问的数据块更多。为了加速点查,LMST引擎会在SST中嵌入BloomFilter。 (BloomFilter:会有假阳性问题,它判定为不在那肯定不在,它判定为在仍有可能不在)

存储引擎的实现-Compact

compact基本思路:将key区间有重叠或无效数据较多的SST进行合并,以加速读取或回收空间。

Level(RocksDB的默认策略)

每一层不允许有SST的key区间重合 image.png

Tier

特点:允许每层有多个区间重合的SST 缺点:重合的越多,查询开销就越大

模型算法的复杂度分析

(名词解释)

  • T:size ratio,每层LSMT比上一层大多少
  • L;level num
  • B:bit(每个最小IO单位能装载多少条记录)
  • M:每个BloomFilter有多少bits
  • N:每个BloomFilter生成时用了多少Key
  • S:区间查询的记录数量

level的write

image.png

point lookup

image.png

关于level和tier的总结

image.png

存储引擎的最新发展趋势

新硬件

论文推荐: image.png

新模型

image.png

新参数/新工况

image.png

课程总结

image.png