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

111 阅读2分钟

这是我参与「第四届青训营 」笔记创作活动的第14天,在第十四节课中主要了解到了LSMT存储引擎浅析有关的内容。

LSMT与存储引擎介绍

LSMT的历史

  • Log-Structured Merge-Tree

LSMT是什么

  • 通过Append-only Write+择机Compact来维护结构的索引树

image.png

存储引擎是什么

  • 以单机数据库MySQL为例
  • 大致可以分为:计算层、存储层
  • 计算层主要负责SQL解析、查询优化、计划执行
  • 数据库著名的ACID特性,在MySQL中全部强依赖与存储引擎
  • 还负责屏蔽IO细节提供更好的抽象
  • 提供统计信息与Predicate Push Down能力

LSMT存储引擎的优势与实现

LSMT与B+Tree的异同

  • 在B+Tree中,数据插入是原地更新的
  • B+Tree在发生不平衡或者节点容量达到阈值后,必须立即进行分裂来平衡
  • 可以用统一的模型描述
  • 从高层次的数据结构角度来看,没有本质的不同,可以互相转化

为什么要采用LSMT模型

  • 存储引擎面对的资源不对称性在不同时期是不同的
  • HDD时代,顺序操作远快于随机操作
  • SSD时代,顺序写操作远快于随机写操作

实现,以RocksDB为例

Write:

image.png

  • 主要有两个优化,批量WAL写入与并发MemTable更新
  • RocksDB在真正执行修改之前,会先将变更写入WAL,WAL写成功则写入成功
  • 多次写入者会选出一个Leader
  • 没有批量提交的话,只能链式唤醒
  • 链式唤醒加大前台延迟
  • 写完WAL还要写MemTable
  • RocksDB在继承LevelDB的基础上又添加了并发MemTable写入的优化

LSMT模型理论分析

  • RocksDB是单机存储引擎,HBase比RocksDB更“云”一些,SST直接存储在HDFS上
  • 二者在理论存储模型上都是LSMT

image.png

LSMT存储引擎调优案例与展望

  • LSMT存储引擎调优案例-TerarkDB

image.png