Skip to content

RocksDB 嵌入式引擎

RocksDB 是 Facebook(Meta)开源的高性能嵌入式 KV 存储引擎,基于 LevelDB 演进而来。Zeze 将 RocksDB 作为核心存储后端之一,同时也是内部组件(如 Dbh2、Checkpoint 等)的基础依赖。

  • 嵌入式设计: 作为库直接嵌入应用进程,无需独立部署数据库服务,消除网络开销。
  • 高性能本地存储: 基于 LSM-Tree(Log-Structured Merge-Tree)架构,写入性能优异,适合写密集场景。
  • ACID 事务: 通过 WriteBatch 实现原子写入,保证数据一致性。
  • 多表支持: 单个 RocksDB 实例通过 Column Family 机制支持多张逻辑表。
  • 全功能遍历: 支持正序、逆序以及分页遍历,是所有数据库适配器中遍历功能最完整的实现。
<DatabaseConf Name=""
DatabaseType="RocksDb"
DatabaseUrl="db"/>
  • DatabaseUrl: 数据存储目录路径。如果为空,默认使用 "db"。路径相对于应用工作目录。
  • Zeze 还会为每个命名的 DatabaseConf 创建独立的 RocksDB 实例。

单数据库配置:

<zeze>
<DatabaseConf Name="" DatabaseType="RocksDb" DatabaseUrl="db"/>
</zeze>

多数据库配置(不同数据库使用不同目录):

<zeze>
<DatabaseConf Name="hot" DatabaseType="RocksDb" DatabaseUrl="db_hot"/>
<DatabaseConf Name="cold" DatabaseType="RocksDb" DatabaseUrl="db_cold"/>
</zeze>
  • 每张 Zeze 表通过 RocksDatabase.Table(基于 Column Family)实现,使用 getOrAddTable 方法按需创建。
  • 事务通过 RocksDbTrans 实现,内部使用 WriteBatch 进行批量原子写入。提交时可选加锁以保证测试场景下的严格串行化。
  • 支持批量打开多张表(openTables),减少锁竞争。
  • 使用独立表 Zeze_OperatesRocksDb_Schemas 存储版本数据。
  • 由于 RocksDB 是独占式访问,setInUse/clearInUse 操作由进程打开时自动保证,无需额外逻辑。

RocksDB 通过 JNI 调用原生 C++ 库。Zeze 的 Maven 依赖中包含了以下平台的原生库:

平台架构说明
Windowsx86_64win64
Linuxx86_64linux64
macOSx86_64osx

在 Maven 中通过 rocksdbjni 依赖自动引入,无需手动安装。

  1. 存储路径: 将 DatabaseUrl 指向 SSD 或 NVMe 磁盘,充分发挥 RocksDB 的写入性能。
  2. WriteBatch 批量提交: 尽量在事务中合并多次写操作,减少提交次数。
  3. 定期 Compact: 对于大量删除操作后,建议触发 compact 回收空间,避免读取性能下降。
  4. WAL 同步: 默认使用异步写入(WriteOptions 不带 sync)。如需更高持久性保证,可启用同步写入(getSyncWriteOptions),但会降低写入吞吐。
  5. 连接池大小: Zeze 使用 Batch 对象池(borrowBatch)复用 WriteBatch,减少 GC 压力。
场景说明
单机开发/测试无需外部数据库依赖,零配置启动
本地缓存数据库作为 Zeze 全局缓存管理的本地存储后端
嵌入式部署不允许部署独立数据库服务的环境
Dbh2 底层存储Dbh2 分布式数据库的每个 Bucket 内部使用 RocksDB
Checkpoint 存储Zeze 事务检查点数据的持久化

注意: RocksDB 实例为独占式打开,同一目录同一时间只能被一个进程访问。多个 Zeze 实例需使用不同的 DatabaseUrl 目录。