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

114 阅读2分钟

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

LSMT 存储引擎浅析

LSMT与存储引擎介绍

LSM存储引擎是针对排序文件的合并和压缩的思想,基于该原则的存储引擎。

存储引擎是什么?

以单机数据库MySQL为例,大致可以分为: 1.计算层。 2.存储层,即存储引擎层。

计算层主要负责sql解析/查询优化/计划执行。

数据库著名的 ACID特性,在 MySQL中全部强依赖于存储引擎。

ACID是什么?存储引擎哪些组件保障了这些特性? 1.Atomicity原子性。 2.Write-Ahead Log(WAL)/ Redo Log,即预写日志(WAL)/重做日志。 3.consistency(Correctness),即一致性(正确性)。 4.依赖于数据库整体。 5.Isolation:Snapshot / 2PL(Phase Lock) 6.Durability:Flusher遵循Sync语意。

除了保障 ACID以外,存储引擎还要负责: 1.屏蔽IO细节提供更好的抽象。 2.提供统计信息与Predicate Push Down能力。 3.存储引擎不掌控IO细节,让操作系统接管。 4. IO Stall 5.错误处理繁琐 6.无法完全发挥硬件性能

LSMT的实现原理

LSMT的原理很简单,本质上就是在SSTable基础上增加了一个MemTable,MemTable是存放在内存中的数据结构,可以快速实现增删改查。其次,我们还需要一个log文件,和数据库的binlog相当,记录数据发生的变化,用于服务器宕机时找回数据。

为什么要采用 LSMT模型?

  1. HDD 时代,顺序操作远快于随机操作。
  2. SSD时代,顺序写操作远快于随机写操作。 这二者的共性是顺序写是一个对设备很友好的操作,然而LSMT符合这一点,并且B+Tree依赖原地更新,导致随机写。 LSMT存储引擎和B树存储引擎一样,同样支持增、删、读、改、顺序扫描操作。而且通过批量存储技术规避磁盘随机写入问题。LSM树和B+树相比,LSM树牺牲了部分读性能,但是写入性能得到了有效的提高。