RocksDB 是一种高性能键值存储引擎:

  1. 数据写入流程
  • 先写日志(WAL):像记账本一样先记录操作日志,防止停电丢数据
  • 再写内存(MemTable):用高效的跳表结构暂存最新数据
  • 写日志是顺序写入,比直接写磁盘快10倍以上
  1. 数据存储结构
  • SST文件:内存满了就把数据"冷冻"成不可修改的排序文件
  • 分7层存储:越下层数据越多(L0最小,L6最大)
  • 90%数据最终沉到最底层L6
  1. 数据合并机制
  • 定期"整理收纳":把小文件合并成大文件(Compaction)
  • L0有4个文件就触发整理(默认值)
  • L0文件超过20个会降速写入,36个就完全暂停写入
  1. 读取优化
  • 块缓存(BlockCache):像CPU缓存一样缓存热点数据块(默认64KB/块)
  • 使用LRU算法自动淘汰冷数据- 建议分配机器45%-60%内存给缓存
  1. 特殊功能
  • 列族(ColumnFamily):多个独立数据集共享同一个WAL日志
  • 支持多种压缩算法:每层可用不同压缩方式(如LZ4/Zstd)

关键技术特点:

  • 写放大:后台整理会重复写入数据
  • 读放大:查数据可能要查多层文件
  • 空间放大:未整理的文件会占用额外空间

RocksDB就像一个智能仓库:

  • 新货先登记账本(WAL),放临时货架(MemTable)
  • 临时货架满了就打包成标准箱子(SST)
  • 小箱子定期合并成大箱子(Compaction)
  • 常用货品放显眼位置(BlockCache)
  • 不同类型商品分区分装(ColumnFamily)