随笔记录
LSM-Tree 架构介绍
2025-4-1 diaba


一、LSM-Tree 是什么?



LSM-Tree(Log-Structured Merge Tree)是一种高效的键值存储数据结构,广泛应用于 NoSQL 数据库和大数据处理系统中,如 BigTable、Cassandra、RocksDB 和 LevelDB 等。其核心思想是将所有的更新操作(包括插入、删除和修改)都转换为追加写操作,从而充分利用磁盘顺序写性能远高于随机写性能的特性。



二、LSM-Tree 的核心组件





  1. MemTable




    • 功能:MemTable 是 LSM-Tree 的内存组件,用于缓存写入操作。它通常使用跳表(Skip List)或红黑树等有序数据结构,以便快速访问和保持数据有序。


    • 操作:当 MemTable 达到一定大小后,它会被冻结并写入磁盘,形成一个不可变的 SSTable。新的写入操作会进入一个新的 MemTable。





  2. SSTable(Sorted String Table)




    • 功能:SSTable 是 LSM-Tree 的磁盘组件,存储有序的键值对。每个 SSTable 是不可变的,数据在其中是按键排序的。


    • 层级结构:SSTable 按层级组织,通常分为多个级别(如 L0、L1、L2 等)。L0 层的 SSTable 是直接从 MemTable 写入的,可能存在键的重叠。非 L0 层的 SSTable 是通过合并操作形成的,每个键在每一层中最多只出现一次。





  3. WAL(Write-Ahead Log)




    • 功能:WAL 是预写日志,用于记录所有写操作,确保数据的持久性和一致性。在写入 MemTable 之前,数据首先写入 WAL,以便在系统崩溃时恢复数据。





三、写入操作




四、读取操作




五、Compaction(合并)操作




六、LSM-Tree 的优势与权衡




七、应用场景



LSM-Tree 广泛应用于以下场景:




总结



LSM-Tree 是一种高效的键值存储数据结构,通过分层存储、顺序写入和定期合并操作,优化了写入性能和存储空间利用。虽然在某些情况下可能会牺牲读取性能,但其在处理大规模数据集和写密集型工作负载时表现出色,广泛应用于 NoSQL 数据库、时间序列数据库、搜索引擎和日志系统等领域。

发表评论:
昵称

邮件地址 (选填)

个人主页 (选填)

内容