犀牛鸟 2026 研究笔记 estelledc.github.io

分布式数据库 开源项目全景对比

调研时间:2026-06-22 目的:横向对比分布式数据库 / HTAP 赛道的主流开源项目,为犀牛鸟参与做知识储备

6 个项目一览

# 项目 Stars 主语言 核心设计思路 仓库
1 TiDB ~41K Go 原生分布式 HTAP,MySQL 兼容,TiKV 行存 + TiFlash 列存 pingcap/tidb
2 CockroachDB ~32K Go 云原生分布式 SQL,PostgreSQL 兼容,Spanner 设计 cockroachdb/cockroach
3 Vitess ~21K Go CNCF 毕业,MySQL 水平分片中间件,YouTube 出品 vitessio/vitess
4 Citus ~12.5K C PostgreSQL 扩展,分布式查询,Microsoft 收购 citusdata/citus
5 YugabyteDB ~10.5K C/C++ PostgreSQL + Cassandra 双兼容,Spanner 架构 yugabyte/yugabyte-db
6 OpenTenBase ~2K C 腾讯开源,基于 Postgres-XL 的分布式 HTAP OpenTenBase/OpenTenBase

设计思路对比

架构模式(核心差异)

每个项目对”如何把单机数据库变成分布式”这个问题给出了不同答案:

原生分布式模式(TiDB):从零开始设计分布式架构——SQL 层(tidb-server)负责解析和优化,存储层分成 TiKV(行存,处理 TP 事务)和 TiFlash(列存,处理 AP 分析),通过 Raft 协议保证一致性。类比:一家大公司把”接待前台”和”仓库管理”完全分开——前台只管理解客户需求,仓库只管存取货物,中间靠物流系统(PD 调度器)协调。

Spanner 继承者模式(CockroachDB):直接复刻 Google Spanner 的设计——全局有序 KV 存储 + 分布式事务 + 自动分片。每个节点既能处理 SQL 又能存储数据,没有单独的存储层。类比:一个连锁超市的每家分店都能独立运营(收银+库存),总部只需要协调价格和库存调拨,任何一家店关门其他店照常运转。

中间件代理模式(Vitess):不改 MySQL 本身,在外面加一层代理——VTGate 接收 SQL 请求,VTTablet 管理每个 MySQL 实例,拓扑服务(etcd/ZooKeeper)记录分片映射。类比:在已有的多个小仓库前面设一个”调度中心”,客户只跟调度中心打交道,不需要知道货物在哪个仓库。

扩展插件模式(Citus):作为 PostgreSQL 的 extension 运行,不 fork 不魔改,共享 PostgreSQL 的升级和生态。协调节点把查询拆分下推到各 worker 节点。类比:不拆房子重建,而是给现有房子加一个”智能管家”,管家负责把大任务拆成小任务分配给各个房间处理。

双协议兼容模式(YugabyteDB):底层是 DocDB(基于 RocksDB + Raft),上层同时暴露 YSQL(兼容 PostgreSQL)和 YCQL(兼容 Cassandra)两套 API。类比:一个翻译官同时会两种语言,不管你说中文还是英文,他都能准确理解并处理你的请求。

PG 内核原生 + HTAP 双引擎模式(OpenTenBase):基于 Postgres-XL 架构做 HTAP 增强——保留 PostgreSQL 完整内核,GTM(全局事务管理器)保证分布式事务一致性,Coordinator 做查询路由,Datanode 做数据存储,同时支持行存和列存引擎。类比:把一所学校的教室重新组织——校长办公室(GTM)统一管理课表和考试安排,年级主任(Coordinator)把学生分到不同教室(Datanode),每个教室既能上理论课(行存 TP)也能上实验课(列存 AP)。OpenTenBase 的差异化在于:既保持了 PostgreSQL 原生内核的完整生态兼容,又通过双存储引擎实现了 HTAP 能力,定位在 PG 生态与 HTAP 能力的交叉点上。

兼容协议对比

项目 MySQL 兼容 PostgreSQL 兼容 Cassandra 兼容 协议层实现方式
TiDB ✓(核心) - - 自研 SQL 解析器
CockroachDB - ✓(核心) - 自研 SQL 解析器
Vitess ✓(核心) - - 代理转发到真实 MySQL
Citus - ✓(原生) - PostgreSQL 扩展,天然兼容
YugabyteDB - 双 API 层(YSQL + YCQL)
OpenTenBase - ✓(原生内核) - 基于 PostgreSQL 内核,天然兼容

MySQL 阵营:TiDB 和 Vitess。PostgreSQL 阵营:CockroachDB、Citus、YugabyteDB、OpenTenBase。PG 阵营项目更多,反映了 PG 在分布式场景的生态优势。

架构模式对比

项目 架构类型 计算存储分离 自动分片 需要外部依赖
TiDB 原生分布式 ✓(tidb-server / TiKV / TiFlash) PD 调度器(内建)
CockroachDB 原生分布式 -(每节点存算一体)
Vitess 中间件代理 ✓(VTGate / MySQL 实例) 手动定义分片规则 MySQL + etcd/ZooKeeper
Citus PG 扩展 -(扩展运行在 PG 进程内) 半自动(需声明分布列) PostgreSQL
YugabyteDB 原生分布式 -(每节点存算一体)
OpenTenBase 协调-数据节点 ✓(Coordinator / Datanode / GTM) 需声明分布策略 PostgreSQL 内核

HTAP 能力对比

项目 TP(事务处理) AP(分析处理) HTAP 实现方式 实时性
TiDB TiKV(行存) TiFlash(列存) Raft Learner 异步复制行存→列存 秒级延迟
CockroachDB 有限(无独立列存) 单一行存引擎 -
Vitess ✓(底层 MySQL) 有限(依赖 MySQL 能力) 无独立 AP 引擎 -
Citus ✓(分布式聚合下推) 列存扩展(cstore_fdw) 批量
YugabyteDB 有限(无独立列存) 单一 DocDB 引擎 -
OpenTenBase ✓(行存引擎) ✓(列存引擎) 内建双存储引擎,同节点行列共存 实时

真正具备完整 HTAP 能力(独立 TP + AP 引擎)的是 TiDB 和 OpenTenBase。CockroachDB、Vitess、YugabyteDB 偏 TP 方向,AP 能力有限。

代码量级对比

TiDB (tidb+tikv+pd):      ~5,000+ files(Go + Rust,多仓库)
CockroachDB:               ~15,000+ files(Go,单体大仓库)
Vitess:                    ~3,500+ files(Go)
YugabyteDB:                ~10,000+ files(C/C++/Java)
Citus:                     ~1,000+ files(C,PG 扩展相对精简)
OpenTenBase:               ~3,000+ files(C,基于 PostgreSQL 内核)

Citus 代码量最小,作为 PG 扩展专注于分布式查询层逻辑,通读成本最低。CockroachDB 单仓库代码量最大,但文档和测试覆盖极好。

学习价值排序

从”理解分布式数据库设计”的角度:

  1. TiDB — 赛道标杆(41K star),HTAP 架构最完整,中文社区活跃,文档丰富,存储层 TiKV 是 Raft 共识算法的经典实现
  2. CockroachDB — Spanner 设计的最佳开源实现,理解”全局一致性分布式事务”的必读项目,代码质量极高
  3. Citus — 代码最精简,理解”如何用扩展方式实现分布式”,PG 生态的典型做法
  4. Vitess — 理解”中间件模式”的代表,YouTube 大规模验证,CNCF 毕业项目
  5. OpenTenBase — 理解”Coordinator-Datanode 架构”和”PG 内核 HTAP 改造”,国内大厂生产验证,PG 生态 + HTAP 双优势
  6. YugabyteDB — 双协议兼容的设计取舍值得了解,但 C++ 代码量大,通读成本高

推荐阅读路线

  1. 先通读 Citus 的分布式查询层(~1,000 文件,PG 扩展模式,2-3 天入门)
  2. 对比 TiDB 的原生分布式架构(理解”为什么需要独立存储层 + HTAP 双引擎”)
  3. 对比 CockroachDB 的 Spanner 设计(理解”另一种原生分布式思路——存算一体”)
  4. Vitess 的中间件代理层(理解”不改内核、外挂代理”的取舍)
  5. 如果时间允许,读 OpenTenBase 的 GTM + 双引擎设计(理解”PG 内核改造做 HTAP”的路径)

这个阅读顺序会让你从”最小切口理解分布式扩展” → “理解原生分布式设计” → “理解不同架构取舍” → “理解内核改造路径”递进。