这是我参与「第四届青训营 」笔记创作活动的的第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策略,
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 :区间查询的记录数量\
·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系数的原因是写入可以批量提交拉低成本,但是读取的时候必须对齐到最小读取单元尺寸。\