LSM 树(Log-Structured Merge-Tree)
- 核心原理:通过将随机写转换为顺序写优化写入性能,适用于写密集型场景。数据首先写入内存中的 MemTable(有序结构,如跳表),当达到阈值后转为 Immutable MemTable,再刷入磁盘形成 SSTable。通过分层合并(Compaction)清理冗余数据。
- 关键特点:
- 写放大:合并操作可能导致重复写入,但顺序写优势显著(如机械盘顺序写性能是随机写的千倍)。
- 读放大:需从内存到多层级磁盘文件逐层查找,但通过布隆过滤器和索引优化。
- 分层结构:数据从高层(热数据)到低层(冷数据)逐步下沉,低层容量按指数级增长(如每层容量是上一层的10倍)。
SSTable(Sorted String Table)
- 定义:磁盘上的有序键值文件,不可变且全局有序(除Level 0外),每个文件包含数据块、索引块和布隆过滤器。
- 优化手段:
- 索引加速:通过稀疏索引快速定位数据块。
- 布隆过滤器:减少无效磁盘I/O,判断键是否存在于文件中。
- 压缩:使用Snappy/ZSTD等算法减少存储空间和传输带宽。
LevelDB
- 定位:Google开源的轻量级单机KV存储引擎,基于LSM树。
- 核心设计:
- 内存结构:Active MemTable(写入口)和Immutable MemTable(待刷盘)。
- Compaction策略:分层合并,Level 0允许文件间Key重叠,其他层级全局有序。
- 限制:单线程Compaction、无多版本控制,适合嵌入式或小规模场景。
- 典型应用:Chrome浏览器本地存储、轻量级NoSQL场景。
RocksDB
- 定位:Facebook优化的LevelDB升级版,支持企业级高并发和大数据量。
- 关键优化:
- 并行Compaction:多线程加速合并,降低写停顿。
- 冷热分离:热数据优先保留在低层,冷数据下沉至高层。
- 灵活配置:支持多种压缩算法、速率限制、TTL等。
- 增量备份:支持Checkpoint和增量快照。
- 应用场景:MySQL底层存储(如TiDB)、分布式系统(如CockroachDB)、消息队列(如Kafka的RocksDB状态存储)。
TiDB
- 定位:国产分布式HTAP数据库,兼容MySQL协议,底层存储基于RocksDB。
- 架构组件:
- TiKV:分布式KV存储引擎,数据按Region分片,基于Raft协议保证一致性。
- PD(Placement Driver):全局调度器,管理元数据、负载均衡和故障恢复。
- TiSpark:集成Spark处理复杂OLAP查询。
- 核心优势:
- 水平扩展:通过添加节点实现计算和存储分离扩容。
- HTAP能力:行存(TiKV)支持OLTP,列存(TiFlash)支持OLAP。
- 金融级可靠性:支持分布式事务(Percolator协议)和多副本强一致。
对比与关联
维度 | LevelDB | RocksDB | TiDB |
---|---|---|---|
架构 | 单机嵌入式 | 单机/分布式扩展 | 分布式HTAP |
Compaction | 单线程,分层合并 | 多线程,冷热分离 | 基于RocksDB,Region分片 |
适用场景 | 小规模、低并发 | 高吞吐、企业级存储 | 大规模OLTP+OLAP混合负载 |
核心优化 | 基础LSM实现 | 多级缓存、速率控制 | 全局调度、行列混存 |
典型应用场景
- LSM树:写密集型场景(日志存储、时序数据)。
- LevelDB:浏览器本地存储、小型嵌入式系统。
- RocksDB:分布式数据库底层引擎(如TiKV)、消息队列状态存储。
- TiDB:金融级分布式事务(如支付系统)、实时分析(如电商大促监控)。