开源项目
ydb-platform/ydb avatar
ydb-platform/ydb

YDB:一款为跨行事务与多数据中心容灾而生的分布式 SQL 数据库

YDB 是一个开源分布式 SQL 数据库,它将高可用性和可扩展性与强一致性和 ACID 事务结合在一起。

4,774 个 Star818 个 ForkC++Apache-2.0

秒懂

它是什么?
YDB 是开源的分布式 SQL 数据库,主打强一致、ACID 跨行事务与水平扩展。本文基于其官方仓库与文档,分析其架构、部署方式、适用场景及真实边界。
适合谁用?
YDB 适合需要强一致 ACID 跨行事务、且愿意接受多副本与多数据中心部署成本的团队,尤其是已有 Kubernetes 或 Ansible 运维经验的 OLTP 场景。不适合只想快速跑一个单机 SQL 库、或者期望完全兼容 PostgreSQL 全部特性的项目。
能商用吗?
可以。Apache-2.0 是宽松许可证:你可以使用、修改并销售基于它的软件,只需保留版权和许可证声明。
还在维护吗?
在维护。仓库在最近一天内有新的提交。
用什么语言写的?
主要是 C++(依据 GitHub 的语言统计)。

以上回答依据项目的 GitHub 数据(最近同步于 2026年9月15日)和我们的分析,不构成法律意见。

开源项目深度解析

它解决什么问题:OLTP 场景下的强一致与容灾

YDB 的定位很直接:为交互式 Web 服务提供可水平扩展、同时保持强一致和 ACID 事务的数据库。传统关系型数据库在单机性能上很成熟,但跨节点事务和自动容灾往往需要额外中间件。YDB 从零设计,把存储和计算分离,让两者可以独立扩展。它面向的典型负载是 OLTP,比如用户会话、订单、支付这类需要跨行操作的场景。如果你只需要单行读写,很多数据库都能胜任,但一旦业务逻辑要求多条记录在同一事务里更新,YDB 的跨节点事务能力就是它的核心卖点。

核心机制:存储与计算分离,三可用区容灾

YDB 的架构核心是存储层与计算层解耦。存储层负责数据持久化和副本管理,计算层处理 SQL 执行和事务协调。这种分离意味着你可以单独加存储节点或计算节点,而不是像单体数据库那样整体扩容。容灾方面,YDB 支持三可用区部署,文档明确说明:一个可用区完全故障时,集群仍然能读写。自动恢复机制会在磁盘、节点、机架甚至数据中心故障后重建数据冗余。这个设计不是简单的主备切换,而是持续保证数据副本数,所以故障期间应用几乎感觉不到延迟中断。但代价是至少需要三个数据中心的硬件投入,这不是小团队能轻易承担的。

数据模型与查询:行表、列表、主题,以及 YQL 方言

YDB 支持三种数据形态:面向事务的行式表、面向分析任务的列式表,以及用于数据流动的持久队列(官方叫 topics)。行表和列表可以共存于同一集群,这覆盖了从在线事务到离线分析的常见需求。查询语言是 YQL,它是一套 SQL 方言,用于数据操作和 schema 定义。YQL 不是标准 SQL 的完全实现,它有自己的一套语法和函数。对于熟悉 PostgreSQL 的团队,YDB 提供了 PostgreSQL 兼容模式,但文档限定为“表操作”,意味着不是所有 PostgreSQL 特性都支持。同样,topics 提供 Kafka 兼容模式,方便已有 Kafka 生态的工具接入。

部署与运行:从单机 Quick Start 到生产集群

官方入门路径是 Quick Start 指南,它引导你搭建一个单节点集群,适合功能测试和应用开发。但 README 明确提醒:如果要测试容灾、跑性能基准或做生产负载,需要完整的多节点集群。多节点部署有三种方式:Ansible 用于裸机或虚拟机,Kubernetes 用于容器环境,或者手动部署。最小系统要求是 x86 64 位平台,至少 8 GB 内存,生产环境主要跑在 Ubuntu Linux 上。开发环境下,MacOS 和 Windows 也能编译运行,但文档没有承诺这些系统适合生产。从源码构建需要用到 Ya Make 构建系统,具体步骤在 BUILD.md 里。如果你只是想快速体验,直接下载预编译二进制比从源码编译省事得多。

多租户与 Serverless:共享资源池的两种模式

YDB 支持多租户和 serverless 两种部署模式。多租户模式下,你可以运行一个 YDB 集群,在其中创建多个数据库,这些数据库共享同一个存储池,但各自使用不同的计算节点。另一种模式是运行多个 serverless 数据库,它们共享同一个计算资源池,以便更高效地利用资源。这个设计适合需要隔离不同业务线或客户的场景,比如一个平台为多个部门提供数据库服务。但要注意,共享存储池意味着租户之间的 I/O 可能会相互影响,文档没有详细说明隔离策略。如果你需要严格的资源隔离,可能需要为每个租户单独划分节点,这会增加运维复杂度。

真实局限:强一致不是免费的,兼容模式有边界

YDB 的强一致和自动容灾是有代价的。首先,三可用区部署要求至少三个数据中心,这对很多中小团队来说成本过高。其次,YQL 是专用方言,虽然语法接近 SQL,但迁移现有应用时可能需要改写查询。PostgreSQL 兼容模式只覆盖表操作,不保证所有 PG 特性,比如存储过程、触发器或复杂的窗口函数可能不受支持。另外,README 提到生产安装有超过 10000 个节点,但这是官方自述,没有第三方验证。对于只需要单机或双机部署的场景,YDB 的分布式特性反而是负担,它要求至少 8 GB 内存,并且节点间网络延迟会影响性能。如果你的业务可以拆分成单行事务,用传统数据库可能更简单。

替代方案:对比 CockroachDB 与 TiDB 的架构差异

与 YDB 最接近的替代品是 CockroachDB 和 TiDB,两者也是分布式 SQL 数据库,强调强一致和水平扩展。CockroachDB 采用类似 Spanner 的全局时间戳机制,事务通过 Raft 共识协议实现,部署上同样支持多区域。TiDB 则采用 PD(Placement Driver)集群管理,存储层用 TiKV,计算层与存储层分离,这一点与 YDB 类似。区别在于:TiDB 对 MySQL 协议兼容性更好,迁移 MySQL 应用更平滑;CockroachDB 则更接近 PostgreSQL 语法。YDB 的独特之处在于它同时提供列式表和 topics,这是其他两个项目不直接提供的。如果你需要流式数据处理和 OLTP 在同一系统内完成,YDB 可能更合适;如果你的团队已经深度绑定 MySQL 或 PostgreSQL 生态,TiDB 或 CockroachDB 的兼容性会降低迁移成本。

维护与升级成本:Apache-2.0 许可,活跃发布节奏

YDB 采用 Apache-2.0 许可,这意味着你可以自由使用、修改和分发,没有 copyleft 限制。仓库最近一次推送是 2026 年 8 月,发布版本号从 25.4 到 26.1,间隔约一个月,说明项目维护活跃。升级成本取决于部署方式:Kubernetes 部署可以通过 Helm chart 滚动升级,Ansible 则需手动管理 playbook。由于 YDB 是 C++ 实现的,从源码构建需要熟悉 Ya Make 构建系统,这对新贡献者有一定学习曲线。官方文档提供了 contributor 指南,但社区规模相比 MySQL 或 PostgreSQL 小得多,遇到问题时可能需要依赖 Discord 或 Telegram 社区。长期维护时,你需要关注每个版本的升级说明,因为分布式系统升级通常要求遵循特定顺序,不能随意跳版本。

编辑结论

YDB 适合需要强一致 ACID 跨行事务、且愿意接受多副本与多数据中心部署成本的团队,尤其是已有 Kubernetes 或 Ansible 运维经验的 OLTP 场景。不适合只想快速跑一个单机 SQL 库、或者期望完全兼容 PostgreSQL 全部特性的项目。采用前应先验证三件事:第一,确认你的工作负载是否真的需要跨行事务,而不是可以拆成单行操作;第二,用官方 Quick Start 搭建单节点集群,测试 YQL 方言与 PostgreSQL 兼容模式是否覆盖你的查询模式;第三,评估至少 8 GB 内存的节点要求,以及三可用区部署带来的硬件成本。YDB 的强一致与自动容灾能力是明确的设计取舍,不是免费的附加功能。

官方来源

  1. Official documentation
  2. Official README
  3. Project repository
  4. Release notes
社区笔记

社区笔记