这是我参与「第四届青训营」笔记创作活动的的第14天,以下是我的课堂笔记。 本次课程主要分为四个大板块:
1.ISMT与存储引擎介绍
2.LSMT存储引擎的优势与实现
3.LSMT模型理论分析
4.LSMT存储引擎调优案例与展望
1.ISMT与存储引擎介绍
1.1 LSMT是什么?
一言以蔽之,通过Append-only Write +择机Compact来维护结构的索引树。
1.2存储引擎是什么?
以单机数据库MySQL为例,
大致可以分为:
·计算层
·存储层(存储引擎层)
计算层主要负责SQL解析/查询优化/计划执行。
数据库著名的 ACID特性,在MySQL中全部强依赖于存储引擎。
2.LSMT存储引擎的优势与实现
2.1 LSMT B+Tree的异同
。在B+Tree 中,数据插入是原地更新的
。B+Tree在发生不平衡或者节点容量到达阈值后,必须立即进行分裂来平衡
-LSMT 与B+Tree可以用统—模型描述
·从高层次的数据结构角度来看,二者没有本质的不同,可以互相转化
。工程实践上还是用LSMT来表示一个 Append-only和 Lazy Compact 的索引树,B+Tree来表示一个lnplace-Update和Instant Compact的索引树。
· Append-only 和Lazy Compact这两个特性更符合现代计算机设备的特性。
2.2为什么要采用LSMT模型?
·在计算机存储乃至整个工程界都在利用Indirection处理资源的不对称性
·存储引擎面对的资源不对称性在不同时期是不同的
HDD时代
·顺序与随机操作性能不对称
由于机械硬盘需要磁盘旋转和机械臂移动来进行读写,顺序写吞吐是随机读的25倍。
SSD时代
·顺序写与随机写性能不对称
由于SSD随机写会给主控带来GC压力,顺序写吞吐是随机写的6倍。
2.3 LSMT存储引擎的实现,以 RocksDB为例
· RocksDB是一款十分流行的开源LSMT存储引擎,最早来自Facebook (Meta),应用于MyRocks,TiDB等数据库。
· 在字节内部也有Abase,ByteKV,ByteNDB,Bytable等用户。
。因此接下来将会以RocksDB为例子介绍LSMT存储引擎的经典实现。
3.LSMT模型理论分析
3.1 Cloud-Native LSMT Storage Engine - HBase
· RocksDB是单机存储引擎,那么现在都说云原生,HBase 比 RocksDB就更「云」一些,SST直接存储于HDFS上.
· 二者在理论存储模型上都是LSMT。
3.2 LSMT 模型算法复杂度分析
T: size ratio,每层 LSMT比上一层大多少,LO大小为1,则 L1大小为T,L2为T^2,以此类推
L: level num,LSMT层数B:每个最小的IO单位能装载多少条记录M:每个BloomFilter有多少bits
N:每个BloomFilter生成时用了多少条Key
S:区间查询的记录数量
3.3 LSMT 模型算法复杂度分析
总结,Tier策略降低了写放大,增加了读放大和空间放大,Level策略增加了写放大,降低了读和空间放大。
4.LSMT存储引擎调优案例与展望
4.1 LSMT存储引擎调优案例- TerarkDB
·TerarkDB aka LavaKV是字节跳动内部基于RocksDB深度定制优化的自研LSMT存储引擎,其中完全自研的KV分离功能,上线后取得了巨大的收益。
·KV分离受启发于论文 WiscKey: Separating Keys from Values in SSD-consciousStorage,概括起来就是Value 较长的记录的Value单独存储。
4.2 LSMT存储引擎调优案例
TerarkDB & Abase & ByteGraph
图存储场景描述:
Key size : 20B ~ 30B
Value size:数十KB级别写多读少
收益结论:
延识大幅度降低,长尾消失,扛住了比 RocksDB高50%的负载。
4.3 LSMT存储引擎调优案例- TerarkDB & Flink
在字节内部Flink流处理状态存储场景实测
收益结论:
1.平均CPU开销在3个作业上降低了26%~39%
2. 峰值CPU 开销在广告作业上有明显的收益,降低了67%
3. 平均容量开销在3个作业上降低了17%~31.2%
4.直播业务某集群容量不收缩,TerarkDB的schedule TTL GC彻底解决了该问题
4.4存储引擎最新发展趋势–新硬件
学节跳动青l ·随着硬件的发展,软件设计也会随着发生改变。近年来,出现了许多新的存储技术,例如SMR HDD,Zoned SSD / OpenChannel SSD,PMem等。如何在这些新硬件上设计/改进存储引擎是一大研究热点。 e.g.MatrixKV: Reducing Write Stalls and Write Amplification in LSM-tree Based KV Stores withMatrix Container in NVM 这篇论文中的设计将L0整个搬进了PMem,降低了写放大。
4.5存储引擎最新发展趋势–新模型
·经典LSMT模型是比较简单的,有时候不能应对所有工况,可以提出新的模型来解决问题。
e.g. WiscKey: Separating Keys from Values in sSD-conscious Storage
通过额外增加一个 Value Store来存储大Value的记录来降低总体写放大。
e.g.REMIX: Efficient Range Query for LSM-trees
通过额外增加一种SST的类型来加速范围查询的速度
4.6 存储引擎最新发展趋势–新参数/新工况
·已有的模型,在新的或者现有工况下,参数设置的不合理,可以通过更精确的参数设置来提升整
体性能。
e.g. The Log-Structured Merge-Bush & the Wacky Continuum
在最后一层使用Level Compaction,之上使用Tier Compaction,通过在除了最后一层以外的SST加大 BloomFilter的 bits数来规避Tier Compaction带来的点查劣化。
·已有的模型,在新的或者现有工况下,参数设置的不合理,可以通过更精确的参数设置来提升整体性能。
e.g. The Log-Structured Merge-Bush & the Wacky Continuum
在最后一层使用Level Compaction,之上使用Tier Compaction,通过在除了最后一层以外的SST加大 BloomFilter的 bits 数来规避Tier Compaction带来的点查劣化。