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

YugabyteDB 深度解读

“一个存储引擎,两种查询语言——基于 Spanner 架构的双协议分布式数据库”


一句话定位

YugabyteDB 基于 Google Spanner 架构,底层是 DocDB(RocksDB + Raft),上层同时暴露 YSQL(PostgreSQL 兼容)和 YCQL(Cassandra 兼容)两套 SQL API,用一个存储引擎服务两种数据模型。

设计哲学上最精彩的地方

YugabyteDB 最精彩的决策是“一个存储引擎,两种语言”

想象一个图书馆的书架系统——底层的书架排列方式(DocDB)是统一的,但你可以选择用中文目录(YSQL/PostgreSQL)或英文目录(YCQL/Cassandra)来查找书籍。两种目录看到的是同一批书,但提供了不同的查找体验。这让一个团队里的不同角色——需要复杂 SQL 查询的后端开发者和需要低延迟 KV 访问的实时系统开发者——能用同一个数据库。

DocDB 是这一切的基础。src/yb/docdb/ 实现了基于 RocksDB 的文档存储引擎,KV 映射方式为 <document_key> <hybrid_time> -> <doc_type>,每个文档可以有嵌套子文档结构。YSQL 通过 src/yb/yql/pggate/ 桥接到修改过的 PostgreSQL 前端(src/postgres/),YCQL 通过 src/yb/yql/cql/ 实现 Cassandra 兼容。

Hybrid Logical Clock:不需要 GPS 的全局时钟

Google Spanner 用 TrueTime(GPS + 原子钟)实现全局时间戳,成本极高。YugabyteDB 的替代方案是 Hybrid Logical Clock(HLC),结合物理时钟和逻辑计数器,在不需要专用硬件的情况下实现接近全局一致的时间戳排序。代价是存在一个 uncertainty interval,事务在这个窗口内可能需要等待——但对大多数应用场景,这个延迟可以忽略。

向量索引:积极拥抱 AI 场景

src/yb/vector_index/src/yb/hnsw/ 展示了 YugabyteDB 在 AI 方向的布局——集成 HNSW(Hierarchical Navigable Small World)向量索引和 usearch 库,支持向量相似度搜索。这让 YugabyteDB 不只是一个事务数据库,还能直接服务 RAG、推荐系统等 AI 场景,减少了应用架构中单独部署向量数据库(如 Milvus、Pinecone)的需要。

局限性与场景边界

代码量庞大(C/C++ + Java,约 10,000 文件),学习曲线陡峭,新贡献者上手难度远高于 Citus 或 Vitess。YSQL 层是修改过的 PG fork,PG 版本跟进可能滞后。双协议设计虽灵活但也带来概念复杂度——YSQL 和 YCQL 的事务语义、一致性保证并不完全相同,用户需要理解差异。与 CockroachDB 正面竞争 Spanner 开源替代定位,但社区活跃度和商业化进展落后。

本地代码结构

yugabyte/yugabyte-db (C++/Java/Python)
  src/
    yb/
      docdb/            # DocDB 文档存储引擎(核心)
        docdb.h          # KV 映射定义
        conflict_resolution.cc  # 冲突检测
        deadlock_detector.cc    # 死锁检测
      consensus/
        raft_consensus.cc  # Raft 共识实现
      tablet/            # Tablet(数据分片)管理
      master/            # Master 节点(元数据 + 负载均衡)
      yql/
        pggate/          # YSQL 桥接层(PG -> DocDB)
        cql/             # YCQL 实现(Cassandra 兼容)
      vector_index/      # 向量索引支持
      hnsw/              # HNSW 向量搜索
    postgres/            # 修改过的 PostgreSQL 前端
  java/                  # Java 客户端 + YCQL 服务

本地关键文件

文件 用途
src/yb/docdb/docdb.h DocDB 文档存储 KV 映射定义
src/yb/consensus/raft_consensus.cc Raft 共识核心实现
src/yb/docdb/conflict_resolution.cc 分布式事务冲突检测
src/yb/yql/pggate/ YSQL 桥接层目录
src/yb/vector_index/ 向量索引支持目录
src/yb/docdb/deadlock_detector.cc 分布式死锁检测