LSMT 存储引擎浅析(下篇)|青训营笔记

112 阅读2分钟

这是我参与「第四届青训营 」笔记创作活动的的第5天 今天我学习了关于LSMT 存储引擎的 相关知识。

2.3.3 LSMT 存储引擎的实现- Get & BloomFilter

·RocksDB的读取在大框架上和B+ Tree类似,就是层层向下。
·相对于B+ Tree , LSMT点查需要访问的数据块更多。为了加速点查,一般LSMT引擎都会在SST中嵌入BloomFilter.

BloomFilter(可以百分百确定查找不在索引内,大概率确定查找在索引内)

2.3.4 LSMT存储引擎的实现Compact - Level

●Compact在LSMT中是将Key区间有重叠或无效数据较多的SST进行合并,以此来加速读取 或者回收空间。Compact 策略可以分为两大类,Level和Tier。(Compact本质上是归并排序)下图是Level策略,

1691DE928991293F1EB763B5840E3D23.jpg Level策略直接来自于LevelDB ,也是RocksDB的默认策略。每一个层不允许有SST的Key区间重合。\

2.3.5 Compact—Tier

Tier策略允许LSMT每层有多个区间重合的SST

3.1 Cloud-Native LSMT Storage Engine - HBase

RocksDB是单机存储引擎,那么现在都说云原生,HBase比RocksDB就更「云」一些,SST直接存储于HDFS上。
二者在理论存储模型上都是LSMT。

3.2 LSMT模型算法复杂度分析

T:sizeratio,每层LSMT比,上一层大多少,LO大小为1,则L1大小为T,L2为T^2,以此类推
L: level num LSMT 层数B:每个最小的 10单位能装载多少条记录
M:每个BloomFilter 有多少bits
N:每个BloomFilter 生成时用了多少条Key
S :区间查询的记录数量\

D24D7AE8401DB638C9C3EC96FCE98B9C.jpg ·LSMT模型算法复杂度分析- Level

Write

每条记录抵达最底层需要经过L次Compact,每次Compact Ln的一个小SST和Ln+1的一个大SST.

设小SST的大小为1,那么大SST的大小则为T,合并开销是1+T,换言之将1单位的Ln的SST推到Ln+1要耗费1+T的IO,单次Compact写放大为I。

每条记录的写入成本为1/B次最小单位IO。

O(Write_ Level) = L * T* 1/B = T* L/B
·Point Lookup

对于每条Key,最多有L个重叠的区间。

每个区间都有BloomFilter ,失效率为e^(-M/N),只有当BloomFilter失效时才会访问下一-层。

O(PointLookup_ Level) = L * e^(- M/N)

注意,这里不乘1/B系数的原因是写入可以批量提交拉低成本,但是读取的时候必须对齐到最小读取单元尺寸。\