RocksDB

RocksDB

简介

RocksDB是Facebook基于LevelDB开发的一种嵌入式Key-value存储系统,该数据库能够充分利用闪存的性能,大大提升应用服务器的速度。 这是一个c++库,用于存储键和值,可以是任意大小的字节流。支持原子读和写。 RocksDB具有高度灵活的配置功能,可以通过配置使其运行在各种各样的生产环境,包括纯内存,Flash,硬盘或HDFS。它支持各种压缩算法,并提供了便捷的生产环境维护和调试工具。

  • 内存结构memtable
  • 类似事务日志角色的WAL文件:
  • 持久化的SST文件:

写流程

image-20190905182525925

image-20190905182625720

SST file

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
<beginning_of_file>
[data block 1]     // 具体的 KV 数据
[data block 2]    // 具体的 KV 数据
...
[data block N]    // 具体的 KV 数据
[meta block 1: filter block]            // Filter 信息,比如 bloom filter
[meta block 2: index block]              // data block 对应的 index,查询中通过对 index block 进行二分查找来定位到具体的 data block 
... (compression/range deletion/stats block)
[meta block K: future extended block] 
[metaindex block]
[Footer]                         
<end_of_file>

Compaction

Compaction策略

  • Leveled Compaction(默认策略):Compaction 触发频率相对高,读放大低,写放大高
  • Universal Compaction:Compaction 触发频率相对低,读放大高,写放大低
  • FIFO Compaction:几乎不发生 Compaction,读放大高,写放大几乎没有

参考

  1. RocksDB解析 - Pentium.Labs - 博客园

  2. https://zhuanlan.zhihu.com/p/458148962

updatedupdated2024-05-152024-05-15