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

109 阅读3分钟

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

1. LSMT 与存储引擎介绍

1.1. LSMT的历史

image.png

1.2. LSTM是什么

image.png

1.3. 存储引擎是什么

以单机数据库MySQL为例,

大致可以分为

  • 计算层
  • 存储层(存储引擎层)

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

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

image.png

image.png

image.png

2. LSMT存储引擎的优势与实现

2.1. LSMT与B+ Tree的区别

  • 在B+ Tree中,数据插入是原地更新的
  • B+ Tree在发生不平衡或者节点容量达到阈值后,必须立即进行分裂来平衡

image.png

  • LSMT与B+ Tree可以统一模型描述
  • 从高层次的数据结构角度来看,二者没有本质的不同,可以互相转化
  • 工程实践上还是用LSMT来表示一个Append-only 和 Lazy Compact的索引树,B+ Tree来表示一个Inplace-Update 和Instant Compact的索引树
  • Append-only和Lazy Compact这两个特性更符合现在计算机设备的特性

image.png

2.2. 为什么要采用LSMT模型

  • 在计算机存储乃至整个工程界都在利用Indirection处理资源的不对称性
  • 存储引擎面对的资源不对称性在不同时期是不同的

HDD时代 -顺序与随即操作性能不对称

由于机械硬盘需要磁盘旋转和机械臂移动来进行读写,顺序写吞吐是随机的25倍

SSD时代

  • 顺序写与随机写性能不对称

由于SSD随机写会给主控带来GC压力,顺序写是随机写的6倍

2.3. LSMT 存储引擎的实现,以RocskDB为例

image.png

2.3.1. LSMT存储引擎的实现 - Write

  • RocksDB写入流程主要有两个优化,批量WAL写入(继承自Level DB)与并发MemTable更新
  • RocksDB在真正执行修改之前会先将变更写入WAL,WAL写成功则写入成功

image.png

  • 多个写入者会选出一个Leader,由这个Leader来一次性写入WAL,避免小IO
  • 不要求WAL强制落盘(Sync)时,批量提交亦有好处,Leader可以同时唤醒其余Writer,降低了系统线程调度开销

image.png

  • 没有批量提交的话,只能链式唤醒
  • 链式唤醒加大前台延迟

image.png

  • 写完WAL 还要写 MemTable
  • RocksDB在继承LevelDB的基础上又添加了并发MemTable写入的优化

image.png

  • WAL一次性写入完成后,唤醒所有Wirter并行写入MemTable
  • 由最后一个完成MemTable写入的Writer执行收尾工作

image.png

2.3.2. LSMT存储引擎的实现 - Snapshot & SuperVision

image.png

image.png

image.png

image.png

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

image.png

2.3.4. LSMT存储引起的实现 Compact - Level

image.png

2.3.5. LSMT 存储引擎的实现Compact - Tier

image.png

3. LSTM模型理论分析

3.1. Cloud-Native LSMT Storage Engin - Hbase

image.png

3.2. LSMT 模型算法复杂度分析

image.png

image.png

image.png

image.png

image.png

image.png

4. LSTM存储引擎调优案例与展望

4.1. LSMT存储引擎调优案例 - TerarkDB

image.png

4.2. LSMT存储引擎调优案例 TerarkDB & Abase & ByteGraph

image.png

4.3. LSMT存储引擎调优案例 TerarkDB & Flink

image.png

4.4. 存储引擎最新发展趋势 - 新硬件

image.png

4.5. 存储引擎最新发展趋势 - 新模型

image.png

4.6. 存储引擎最新发展趋势 - 新参数 / 新工况

image.png