跳到主要内容

RocksDB 概述

RocksDB 是一款高性能嵌入式键值存储系统,专为高速存储、大规模数据集及高效范围查询设计,广泛应用于分布式系统的联机事务处理(OLTP)和分析型工作负载。

1. 列族支持

  • RocksDB 支持多个列族(Column Families, CFs),用于数据的逻辑隔离。
  • 每个列族拥有独立的预写日志(WAL)、内存表(memtable)和排序字符串表(SST files)。
  • 推荐建议:尽可能减少列族数量;每个列族会增加内存占用和压缩开销。

2. 大规模数据处理能力

  • RocksDB 针对TB 级数据进行了优化。
  • 数据采用日志结构合并树(LSM-tree) 组织:
  • 内存表(Memtables)在内存中缓存写入操作。
  • 排序字符串表(SSTables)将不可变数据存储在磁盘上。
  • 压缩操作(Compactions)合并 SST 文件,维持读取效率。
  • 适用于高写入量、顺序扫描或前缀扫描密集型工作负载。

3. 快照与备份策略

(1)基于快照的备份

  • 轻量级,提供数据库的时间点一致性视图。
  • 适用于副本同步及从节点追平场景。
  • I/O 开销极小。

(2)基于文件的备份(检查点 / BackupEngine)

  • 生成 SST 文件和 WAL 文件的持久化副本。

  • 适用于灾难恢复或数据库迁移。

  • 推荐建议:副本同步使用快照备份,全量持久化使用基于文件的备份。减少列族数量可降低备份复杂度。

4. 键与前缀设计

  • 固定长度前缀键可提升范围扫描性能。
  • 设计键时应使高频扫描的范围共享相同前缀。
  • 示例
  • 前缀:区域ID(RegionID)+ 实体类型(EntityType)
  • 后缀:时间戳(Timestamp)或唯一标识(unique ID)
  • 热点路径中避免使用变长前缀,否则会降低前缀索引效率。

5. 典型性能指标(基于SSD存储)

以下数据为中大型部署环境的实测参考值,RocksDB 已针对批量写入和前缀扫描进行调优:

指标典型值(SSD/NVMe)说明
写入吞吐量(随机写入)每个数据库实例 50k–200k 操作/秒16–32 MB 内存表)取决于写入批次大小
写入放大2–5倍已调优压缩策略,列族数量约1–2个
读取吞吐量(点查询)100k–500k 操作/秒使用8–16 GB块缓存
读取吞吐量(前缀扫描)200–800 MB/秒基于固定前缀键
压缩I/O100–400 MB/秒通过 level0_file_num_compaction_triggermax_bytes_for_level_base 调优
写入延迟~0.5–2 毫秒取决于WAL同步策略
读取延迟(缓存命中)<0.1 毫秒数据缓存于块缓存中
SST文件大小64 MB(默认)通过 target_file_size_base 可配置
最大数据库容量~10–100 TB+取决于硬件配置和LSM树调优

调优说明:

  • SSD/NVMe 存储是保障写入性能可预期的关键。
  • 基于前缀的固定长度键支持内存表前缀布隆过滤器,减少磁盘寻道次数。
  • 备份和快照策略会影响I/O性能;高频备份优先选择增量快照。