想请教下社区大佬,OceanBase 底层是自研改良的 LSM‑Tree,RocksDB 是经典 LSM‑Tree 实现,二者最核心的差异点在哪?OB 独有的 Major 每日合并带来哪些优势,同时又存在什么弊端?欢迎大家分享理解,感谢。
OB vs RocksDB 核心差异
- 结构简化:RocksDB 5-6层,OB 只有3层(MemTable → 增量层 → 基线层)
- 宏块+微块:OB 独创2MB宏块(写IO)+ 16KB微块(读IO),增量合并可重用未修改的宏块
- 两级压缩:RocksDB 只做通用压缩,OB 先做语义编码(字典/游程/差值)再做通用压缩,压缩比 70%-90%
- 事务语义内嵌:OB 的 LSM-Tree 理解事务,大事务提交/回滚耗时恒定(SIGMOD 2025 MaLT);RocksDB 是黑盒 KV
- 基线全局一致:OB 所有副本同一快照版本合并,天然数据校验;RocksDB 各副本独立 compaction
Major 合并优势
- 读路径最短,只有一个基线 SSTable
- 全局快照校验数据一致性
- 一次性回收墓碑和旧版本
- Online DDL 延后执行,渐进合并平滑开销
- 轮转合并切流量,业务无感
Major 合并弊端
- 资源消耗集中(CPU +15-25%,IO 100-200MB/s)
- 依赖低峰窗口,全球化业务难找时间
- 增量累积期读放大
- 轮转合并有 Leader 切换抖动
- 列存合并开销更大
- 调优参数多