LSMT 存储引擎浅析

LSMT(Log-Structured Merge-Tree)存储引擎通过Append-only Write和Compact策略提供高效索引。从历史发展来看,LSMT在2000年后成为Google BigTable、HBase和Cassandra等数据库的首选,取代了早期的B-Tree。其优势在于顺序写操作的优化,适应机械硬盘和SSD时代的需求。LSMT的复杂度分析涉及T、L、B、M、N和S等参数,影响读写放大和空间利用。Level与Tier Compaction策略分别解决不同的性能权衡。总结来说,LSMT存储引擎在现代计算机体系中扮演关键角色,尤其适合支持ACID特性的单机和分布式数据库。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

LSMT概述

简单来说,就是通过Append-only Write+择机Compact来维护结构的索引树。

LSMT的历史

  • LSMT是Log-Structured Merge-Tree的缩写,由Patrick O 'Neil etc.在1996年的论文,The Log-Structured Merge-Tree(LSM-Tree),提出。
  • 相较而言,B-Tree出现就早得多了,在197O年由Bayer,R.;McCreight,E.提出。
  • 早期的数据库系统一般都采用B-Tree家族作为索引,例如MySQL。2000年后诞生的数据库 大多采用LSMT索引,例如Google BigTable,HBase,Canssandra等。

存储引擎是什么?

  • ACD是什么/存储引擎哪些组件保障了这些特性?
    • Atomicity Write-Ahead Log(WAL)Redo Log
    • Consistency(Correctness) 依赖于数据库整体
    • Isolation Snapshot 2PL(Phase Lock)
    • Durability Flusher遵循Sync语意
    除了保障ACD以外,存储引擎还要负责:
    • 屏蔽细节提供更好的抽象
    • 提供统计信息与Predicate Push Down能力
    存储引擎不掌控IO细节,让操作系统接管,例如使用map, 会有如下问题:
    • 落盘时机不确定造成的事务不安全
    • IO Stall
    • 错误处理繁琐
    • 无法完全发挥硬件性能

为什么要采用LSMT模型

  • 机械硬盘时代,顺序操作远快于随机操作
  • SSD时代,顺序写操作远快于随机写操作

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

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:区间查询的记录数量

总结

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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值