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

102 阅读4分钟

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

01. LSMT与存储引擎介绍

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

存储引擎:以单机数据库MySQL为例,

大致可以分为:

·计算层

·存储层(存储引擎层)

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

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

ACID是什么/存储引擎哪些组件保障了这些特性?

.Atomicity

Write-Ahead Log(WAL)/ Redo Log

. Consistency(Correctness)

依赖于数据库整体

. lsolation

Snapshot / 2PL(Phase Lock)

.Durability

Flusher 遵循Sync语意

除了保障ACID 以外,存储引擎还要负责:

·屏蔽IO细节提供更好的抽象

·提供统计信息与Predicate Push Down能力

存储引擎不掌控IO细节,让操作系统接管,例如使用mmap,会有如下问题:

·落盘时机不确定造成的事务不安全
·lO Stall
·错误处理繁琐
·无法完全发挥硬件性能

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

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这两个特性更符合现代计算机设备的特性。

小结:

· HDD时代,顺序操作远快于随机操作

· SSD时代,顺序写操作远快于随机写操作

这二者的共性是顺序写是一个对设备很友好的操作,LSMT符合这一点,而B+Tree依赖原地更新,导致随机写。

03.LSMT模型理论分析

T: size ratio,每层LSMT比上一层大多少,L0大小为1,则L1大小为T,L2为T^2,以此类推

L: level num,LSMT层数B:每个最小的IO单位能装载多少条记录

M:每个BloomFilter有多少bits

N:每个BloomFilter生成时用了多少条Key

S:区间查询的记录数量

总结,Tier策略降低了写放大,增加了读放大和空间放大,Level策略增加了写放大,降低了读和空间放大。

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

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

.TerarkDB aka LavaKV是字节跳动内部基于RocksDB深度定制优化的自研LSMT存储引擎,其中完全自研的KV分离功能,上线后取得了巨大的收益。

·KV分离受启发于论文 WiscKey: Separating Keys from Values in SSD-consciousStorage,概括起来就是Value 较长的记录的Value单独存储。

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存储引擎最新发展趋势–新硬件

·随着硬件的发展,软件设计也会随着发生改变。近年来,出现了许多新的存储技术,例如SMRHDD,Zoned SSD / OpenChannel SSD,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存储引擎最新发展趋势–新参数/新工况

·已有的模型,在新的或者现有工况下,参数设置的不合理,可以通过更精确的参数设置来提升整体性能。

总结
· 单机数据库的ACID特性依赖于存储引擎
. LSMT存储引擎的顺序写特性更适合现代计算机体系结构
· LSMT和B+Tree可以用同—模型描述并互相转化
. Level Compaction策略,降低了读放大和空间放大,增加了写放大
· Tier Compaction策略,降低了写放大,增大了读放大和空间放大
· 分布式KV存储,如HBase,背后的理论模型与单机存储引擎RocksDB一样都是LSMT