OceanBase 改良 LSM‑Tree 和 RocksDB 的 LSM‑Tree 核心区别是什么?

想请教下社区大佬,OceanBase 底层是自研改良的 LSM‑Tree,RocksDB 是经典 LSM‑Tree 实现,二者最核心的差异点在哪?OB 独有的 Major 每日合并带来哪些优势,同时又存在什么弊端?欢迎大家分享理解,感谢。

OB vs RocksDB 核心差异

  1. 结构简化:RocksDB 5-6层,OB 只有3层(MemTable → 增量层 → 基线层)
  2. 宏块+微块:OB 独创2MB宏块(写IO)+ 16KB微块(读IO),增量合并可重用未修改的宏块
  3. 两级压缩:RocksDB 只做通用压缩,OB 先做语义编码(字典/游程/差值)再做通用压缩,压缩比 70%-90%
  4. 事务语义内嵌:OB 的 LSM-Tree 理解事务,大事务提交/回滚耗时恒定(SIGMOD 2025 MaLT);RocksDB 是黑盒 KV
  5. 基线全局一致:OB 所有副本同一快照版本合并,天然数据校验;RocksDB 各副本独立 compaction

Major 合并优势

  • 读路径最短,只有一个基线 SSTable
  • 全局快照校验数据一致性
  • 一次性回收墓碑和旧版本
  • Online DDL 延后执行,渐进合并平滑开销
  • 轮转合并切流量,业务无感

Major 合并弊端

  • 资源消耗集中(CPU +15-25%,IO 100-200MB/s)
  • 依赖低峰窗口,全球化业务难找时间
  • 增量累积期读放大
  • 轮转合并有 Leader 切换抖动
  • 列存合并开销更大
  • 调优参数多