RocksDb 是什么?levelDB、LSM 树、SSTable又分别是什么?区别呢?

发布于:2025-08-04 ⋅ 阅读:(15) ⋅ 点赞:(0)

Git高速下载
程序员面试资料大全|各种技术书籍等资料-1000G


1. LSM 树 (Log-Structured Merge-Tree)

  • 核心思想:用顺序写(高效)代替随机写(低效),通过后台合并操作处理数据更新和删除。
  • 工作流程
    1. 写入:先写入内存中的MemTable(有序数据结构,如跳表)。
    2. MemTable写满:转为只读的Immutable MemTable,并刷盘生成SSTable文件。
    3. 合并(Compaction):分层合并SSTable文件,丢弃旧数据/重复数据,生成新文件。
  • 优势:高写入吞吐(尤其HDD/SSD)、适合写多读少场景。
  • 代价:读操作可能需要查多层(需优化),写放大(Compaction带来额外I/O)。

2. SSTable (Sorted String Table)

  • 定义:LSM树在磁盘上的数据存储格式。核心特点:
    • 不可变(Immutable):文件生成后不再修改。
    • 按键有序:数据按Key排序存储,支持高效范围查询。
    • 分块索引:含索引块(快速定位Key)、布隆过滤器(加速Key不存在判断)。
  • 合并机制:多个SSTable通过归并排序合并成更大的新文件,删除旧数据。

3. LevelDB

  • 背景:Google开源的单机KV存储引擎(2011年),LSM树的经典实现
  • 设计特点
    • 分层存储(Leveled Compaction)
      • Level 0:MemTable刷盘后的SSTable(文件间Key可能重叠)。
      • Level 1+:每层内SSTable全局有序,文件间Key不重叠。
    • 简单轻量:C++实现,无分布式功能,适合嵌入式场景。
  • 局限
    • 单线程Compaction可能阻塞写入。
    • 功能较基础(如不支持多线程合并、压缩算法单一)。

4. RocksDB

  • 背景:Facebook基于LevelDB深度优化的开源引擎(2013年),工业级增强版
  • 核心改进
    特性 LevelDB RocksDB
    Compaction 单线程 多线程并行
    写入优化 单一MemTable 支持多MemTable(Pipeline写入)
    压缩算法 仅Snappy Zlib, ZSTD, LZ4, BZip2等
    事务支持 悲观/乐观锁、WriteBatch增强
    增量备份 支持
    布隆过滤器 单层 多层、格式可定制
    SSD优化 基础 精细控制I/O、限速
  • 应用场景
    • 数据库底层存储(MySQL的MyRocks、MongoDB、TiKV)。
    • 消息队列(Apache Pulsar)、图数据库(Dgraph)。

关键关联总结

设计思想
磁盘存储格式
优化实现
工业级特性
分层合并
LSM 树
LevelDB/RocksDB
SSTable
RocksDB
多线程Compaction
事务支持
丰富API
Leveled Compaction

常见问题

Q: LSM树为何写快读慢?
A:写入只需顺序写MemTable;读取可能需要查MemTable + 多层SSTable(需BloomFilter/索引优化)。

Q: Compaction为何必要?
A:清理过期数据、合并碎片文件、减少读放大,但会引发写放大(I/O与CPU消耗)。

Q: LevelDB vs RocksDB如何选?
A:

  • LevelDB:轻量级、代码易读、适合学习或简单场景。
  • RocksDB:生产环境首选,高并发、SSD优化、企业级功能完备。

程序员面试资料大全|各种技术书籍等资料-1000G
Git高速下载

在这里插入图片描述


网站公告

今日签到

点亮在社区的每一天
去签到