深入 OceanBase——HTAP、LSM-Tree 与容灾架构

一篇搞懂 OceanBase 的技术内核

之前的文章我们介绍了 OceanBase 的基本概念。这篇我们深入几个核心技术点,看看它到底"厉害"在哪里。

LSM-Tree:写性能的秘密武器

传统数据库大多使用 B+Tree 作为存储结构,B+Tree 读性能好,但每次写入都可能触发页面分裂,写放大严重。

OceanBase 选择了 LSM-Tree(Log-Structured Merge-Tree)。它的思路是:

  1. 写入时:数据先追加到内存中的 MemTable(类似一个有序缓冲区),写一条日志(Redo Log),就返回成功。写入极快。
  2. 后台合并(Compaction):当 MemTable 写满后,OceanBase 会将它冻结并刷到磁盘,形成一个 SSTable(不可变的有序文件)。后台定期将多个小的 SSTable 合并成大的,同时清理过期数据。
  3. 读取时:先查 MemTable,再按从新到旧的顺序查 SSTable,用 Bloom Filter 加速跳过不相关的文件。

这种架构让 OceanBase 的写入吞吐量远高于传统 B+Tree 数据库,特别适合高并发写入场景。

增量数据与基线数据

OceanBase 把数据分为两层:

  • 增量数据(MemTable + 最近的转储文件):最新修改的数据,体积小,访问频繁。
  • 基线数据(Major SSTable):经过每日合并(Daily Major Compaction)后的完整数据集,体积大但结构规整。

每日合并是 OceanBase 的一个特色机制:每天凌晨,系统会把所有增量数据与基线数据做一次完整合并,生成新的基线。这既控制了增量数据的膨胀,也让全局查询性能保持稳定。

HTAP:一套引擎同时搞定交易和分析

HTAP(Hybrid Transactional/Analytical Processing)是近年数据库领域的热门方向。传统做法是交易用一套数据库(如 MySQL),分析用另一套(如 ClickHouse),中间靠 ETL 同步数据,延迟高、链路复杂。

OceanBase 的 HTAP 能力体现在:

  • 行存 + 列存:同一份数据可以同时以行存(适合点查和交易)和列存(适合聚合分析)两种格式存储。优化器根据查询类型自动选择最优路径。
  • 资源隔离:分析查询可以路由到专门的只读副本,不抢占交易负载的 CPU 和 IO。
  • 一份数据,零 ETL:不需要额外的数据同步链路,实时分析直接查同一套集群。

容灾架构:"三地五中心"

OceanBase 最具话题性的能力之一是支持城市级容灾。

它的多副本机制基于 Paxos 协议,可以灵活部署为多种架构:

|-------|--------------|-------------|
| 架构 | 说明 | 容灾能力 |
| 同城三机房 | 同一城市三个机房,三副本 | 任一机房故障自动切换 |
| 三地五中心 | 三个城市五个机房,五副本 | 任一城市故障自动切换 |
| 两地三中心 | 两个城市三个机房 | 主城市双机房+异地灾备 |

"三地五中心"是金融行业常用的最高等级容灾方案。即使一个城市整体不可用(自然灾害、大面积断电等),OceanBase 也能在剩余节点中自动选出新主,继续提供服务,且数据不丢不错。

分布式事务:两阶段提交 + 一阶段优化

分布式数据库绕不开分布式事务。OceanBase 的做法是:

  • 标准两阶段提交(2PC):跨分区事务先 Prepare,再 Commit,保证原子性。
  • 一阶段提交优化:如果事务只涉及一个分区(绝大多数情况),直接走一阶段提交,省去 Prepare 的网络开销,延迟大幅降低。
  • TSO(Timestamp Oracle):全局时间戳服务为事务分配单调递增的时间戳,保证全局事务的因果序。

这意味着大部分事务享受单机般的低延迟,只有真正跨分区的事务才付出分布式协调的代价。

小结

OceanBase 的技术栈可以用三个词概括:写快(LSM-Tree)能分析(HTAP)不怕挂(Paxos 多副本)。它不是对 MySQL 的简单改造,而是一个从存储引擎到事务模型都重新设计的分布式数据库。对于正在做数据库选型或架构升级的团队,值得认真评估。

相关推荐
OceanBase数据库官方博客5 天前
Agent 项目记忆构建指南
oceanbase
yzs8712 天前
OceanBase的向量化引擎shuffle有多强?
oceanbase
小码过河.13 天前
oceanbase表分区变更流程(从8到10)
oceanbase
小码过河.13 天前
oceanbase中zone和observer、分区表之间关系
前端·数据库·oceanbase
小码过河.13 天前
oceanbase根据时间自动新增表分区
oceanbase
小码过河.13 天前
oceanbase表分区指定
oceanbase
喂自己代言14 天前
从 0.7 秒到 11 毫秒:OceanBase 一条慢 SQL 的三连坑优化实战
数据库·sql·oceanbase
marvelyu16 天前
OceanBase 调优实战:从慢查询到高并发的系统性优化
oceanbase
2601_9620715722 天前
基于DataX迁移MySQL到OceanBase集群
数据库·mysql·oceanbase