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/O | 100–400 MB/秒 | 通过 level0_file_num_compaction_trigger 和 max_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性能;高频备份优先选择增量快照。