多个RocksDB实例能否共享读取同一键范围及相关问题咨询
RocksDB多实例共享缓存相关问题解答
此前流传的「RocksDB多实例无法共享读取同一键范围」的结论,仅适用于多实例同时作为主节点写入同一键范围的场景,和官方提到的多实例共享二级缓存的场景并不冲突。
1. 共享缓存的RocksDB实例是否使用同一键范围
这类场景完全支持多个实例使用相同键范围,常见部署模式分为两种:
- 单主多从模式:仅1个实例作为主节点承担该键范围的写入操作,其余实例均为只读从节点,通过回放主节点WAL、加载主节点生成的SSTable文件同步数据
- 全只读模式:所有实例仅读取不再更新的静态数据集,不存在写入操作
此处多实例共享的是二级缓存中存储的冷热数据块,并非直接共享活跃写入的内存表,和RocksDB单实例的写入锁逻辑不冲突。
2. 相同键范围下不同实例的更新操作如何同步
原生RocksDB确实没有内置跨实例通信能力,因此官方本身也不支持多实例同时写入同一键范围,所有同步逻辑均在上层业务框架层实现:
- 单主多从模式下:上层框架会在主实例写入完成后,将对应的WAL日志、新生成的SSTable文件同步给所有从实例,从实例回放日志、加载新SSTable即可完成数据同步,全程不需要RocksDB实例之间直接通信
- 全只读模式下:数据集本身无更新操作,不需要做同步
- 如果业务必须使用多实例写入同一逻辑键范围,通常会在上层做键分片,每个实例仅负责自己专属子分片的写入,不存在跨实例的同键写入冲突,也不需要跨实例同步
内容的提问来源于stack exchange,提问作者knowads
相关产品推荐
相关产品推荐

