LSMT | 青训营笔记

104 阅读2分钟

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

LSMT与存储引擎

LSMT Log-Structured Merge-Tree

传统的存储引擎如MySQL,索引树为B+树,原地更新 通过Append-only Write+择机Compact来维护结构的索引树。

  • WAL(write-ahead-log)保障原子性
  • Memtable,达到一定阈值后冻结
  • Immutable Memtable,转交flush线程写盘
  • sstable

image.png

Compact:去除无效、重复的条目,产物存入下一层

存储引擎

  • 保障ACID特性
  • 屏蔽IO细节,提供更好的抽象
  • 统计信息,谓词下推

LSMT引擎优点及实现

LSMT与B+Tree可以用统一的模型描述,可以互相转换

  • HDD时代:顺序读写远快于随机读写
  • SSD时代:顺序写远快于随机写 二者共性:随机写友好,B+Tree原地更新导致随机写,而LSMT追加写

write

image.png

快照

SuperVision:持有Memtable、Immemtable、SST

Memtable、Immemtable、SST的释放依赖引用计数,因此持有SuperVision相当于持有了快照

优化:Thread Local SuperVision Cache,即缓存SuperVision,检查是否过期,没有就继续使用

Bloom Filter:加速检索,但存在假阳性

Compact策略

  • Level:写放大
  • Tier:读放大

大Value场景:KV分离

一致性

  • 严格一致性:数据的变化是原子的,一经改变即时生效,这是一致性的最高形式。
  • 顺序一致性:每个客户端看到的数据依照它们操作执行的顺序而变化。
  • 因果一致性:客户端以因果关系顺序观察到数据的改变。
  • 最终一致性:在没有更新数据的一段时间里,系统将通过广播保证副本之间的数据一致性。
  • 弱一致性:没有做出保证的情况下,所有的更新会通过广播的形式传递,展现给不同客户端的数据顺序可能不一样。