LSM-Tree 原理与消息存储选型
1. 概述 LSM-Tree(Log-Structured Merge-Tree)是一种典型的写优化存储结构。它的核心思路是:不追求每次写入都直接落到最终有序位置,而是将写入拆成**“前台快速落地 + 后台异步整理”**两个阶段。 设计目标可以归纳为: 顺序化写入:前台写入以追加为主,避免随机写。 后台整理:异步 Compaction 控制查询路径复杂度。 可调节的权衡:在写吞吐、读延迟和空间占用之间提供调优空间。 2. 整体架构与核心组件 LSM-Tree 的运行依赖以下组件协同工作: 组件 位置 职责 WAL(Write-Ahead Log) 磁盘 写前日志,保证崩溃恢复 MemTable 内存 有序表,接收实时写入 Immutable MemTable 内存 写满后冻结,等待刷盘 SSTable 磁盘 有序、不可变的持久化文件 Compaction 后台任务 合并 SSTable,版本收敛与空间回收 数据在组件间的流转路径如下: flowchart LR W[Write Request] --> L[Append WAL] L --> M[Insert MemTable] M -->|Threshold reached| IM[Immutable MemTable] IM --> F[Flush to SSTable] F --> C[Compaction] C --> S[(Merged SSTables)] 3. 写路径 写入的关键原则是 “先确认可恢复,再确认可查询”。具体步骤: 追加 WAL——保证持久化,崩溃后可重放。 更新 MemTable——对外可查。 冻结 MemTable——达到阈值后转为 Immutable。 Flush 为 SSTable——后台将 Immutable MemTable 写入磁盘。 这条路径带来的关键特性: ...