LSMT 存储引擎浅析|青训营笔记
这是我参与「第四届青训营 」笔记创作活动的的第4天 今天我学习了关于LSMT 存储引擎的 相关知识。
1.1存储引擎是什么?
以单机数据库MySQL为例
大致可以分为:
·计算层
·存储层(存储引擎层)
计算层主要负责SQL解析/查询优化/计划执行。
数据库著名的ACID特性,在MySQL中全部强依赖于存储引擎。
1.1.2 ACID是什么?
●Atomicity
Write- Ahead Log(WAL) / Redo Log
●Consistency(Correctness)
依赖于数据库整体
●Isolation
Snapshot / 2PL(Phase Lock)
●Durability
Flusher遵循Sync语意\
2.1 LSMT 与 B+Tree 的异同
它们本质没什么不同,可以相互转化。
B+Tree 支持随机修改
LSMT不需要支持随机修改
逻辑上相同
2.2 为什么要采用LSMT模型?
· 在计算机存储乃至整个工程界都在利用Indirection处理资源的不对称性
· 存储引擎面对的资源不对称性在不同时期是不同的
1.HDD时代,顺序操作远快于随机操作
2.SSD时代,顺序写操作远快于随机写操作
而B+Tree依赖原地更新,导致随机写
2.3 RocksDB
2.3.1 LSMT存储引擎的实现 - Write
·多个写入者会选出一个leader,由这个leader来一次性写入WAL,避免小IO,降低了线程的开销
2.3.2 LSMT存储引擎的实现- Snapshot & SuperVision
●如果所有读者都给SuperVersion的计数加1,读完后再减1 ,那么这个原子引用计数器就会成为热点。CPU在多核之间同步缓存是有开销的,核越多开销越大。
●为了让读操作更好的scale,RocksDB做了一个优化是Thread Local SuperVersionCache
·有ThreadLocal缓存,读取只需要检查T SuperVersion 并标记 Thread Local 缓存正在使用即可
·CPU 缓存友好\