TiDB 评估:一个把事务、分析和向量搜索塞进同一套 SQL 的分布式数据库
TiDB 专为不可预测增长的代理工作负载而构建,具有 ACID 保证以及对事务、分析和向量搜索的本机支持。没有数据孤岛。没有吵闹的邻居。没有基础设施上限。
秒懂
- 它是什么?
- TiDB 是一个 Apache-2.0 许可的云原生分布式 SQL 数据库,用 Raft 保证强一致,用 TiFlash 做实时列存分析,还内置了向量搜索。本文基于仓库与文档,拆解它的架构、上手路径和真正的适用边界。
- 适合谁用?
- 适合需要 MySQL 协议兼容、又希望横向扩展并同时跑事务和分析负载的团队,尤其是数据量增长超出单机 MySQL 或 PostgreSQL 承受范围的场景。不适合只需要简单单机数据库、或者对运维人力极其敏感的小团队,因为 TiDB 的组件多,部署和调优门槛明显高于单体数据库。
- 能商用吗?
- 可以。Apache-2.0 是宽松许可证:你可以使用、修改并销售基于它的软件,只需保留版权和许可证声明。
- 还在维护吗?
- 在维护。仓库最近一次提交在 1 天前。
- 用什么语言写的?
- 主要是 Go(依据 GitHub 的语言统计)。
以上回答依据项目的 GitHub 数据(最近同步于 2026年9月14日)和我们的分析,不构成法律意见。
开源项目深度解析
它到底解决什么:一套 SQL 吃掉三种负载
大多数团队面对的数据架构是拼出来的。OLTP 用 MySQL,分析用数据仓库,向量检索再挂一个专用引擎。数据要同步,口径要对齐,故障域还多了一个。TiDB 的卖点是把这三件事收进同一个分布式 SQL 数据库。它用两阶段提交保证 ACID,用 TiFlash 列存引擎跑分析,用内置的向量搜索处理 embedding 查询。仓库描述里直接写了这是为 agentic 工作负载设计的,也就是那种增长不可预测、查询模式混合、可能随时需要从事务切到分析再切到向量检索的场景。对这类负载,传统单体数据库要么撑不住并发,要么你被迫提前拆库。TiDB 的定位是让你不用拆。
架构拆解:计算与存储分离,Raft 管一致性
TiDB 不是一个大二进制。它由多个组件组成:TiDB Server 负责解析 SQL 和协调查询,TiKV 是行式存储引擎,TiFlash 是列式存储引擎。TiKV 用 Raft 共识协议复制数据,事务要写到多数派副本才算提交,这保证了强一致性,也意味着节点故障时能自动切换。TiFlash 通过 Multi-Raft Learner 协议从 TiKV 实时复制数据,所以列存和行存之间不需要额外的 ETL 管道。TiDB Server 在执行查询时,会把一部分下推给 TiKV,一部分下推给 TiFlash,具体怎么分由优化器决定。这种架构的直接后果是:你可以独立扩展计算节点和存储节点,不用停机。这是它和单体数据库最本质的区别。
HTAP 不是噱头,但你要理解它的代价
TiDB 的 HTAP 能力来自双存储引擎。TiKV 处理事务,TiFlash 处理分析,两者数据实时一致。文档里说 TiFlash 用 Multi-Raft Learner 协议复制数据,这意味着分析查询不会影响事务写入的延迟,因为你查的是列存副本。但代价是存储成本翻倍,同一份数据要存两份,而且 TiFlash 的节点需要额外资源。如果你的分析查询只是偶尔跑一次报表,这个成本可能不值。另一个隐含的代价是,TiDB Server 要协调两个引擎的查询,优化器得判断哪些算子该下推到哪里,这增加了查询计划的复杂度。对于简单的点查和聚合,效果很好,但遇到复杂的 join,执行计划可能不如专门的数仓那么高效。
上手路径:从 playground 到 TiUP 再到 Kubernetes
仓库的 Quick Start 给了三条路。最轻的是本地 playground,按文档里的 quick start 指南跑一个测试集群,适合体验 SQL 功能。第二条路是 Kubernetes,用 TiDB Operator 部署,适合已经有 K8s 基础设施的团队。第三条是 TiDB Cloud,完全托管,有免费计划,不用信用卡,几秒钟就能起一个集群,这是官方推荐的方式。本地 playground 的命令不在 README 里,文档里才有,但本质上是用 tiup playground 这类工具。部署生产集群通常用 TiUP,它负责管理 TiDB、TiKV、TiFlash 等组件的生命周期。配置上要注意 TiKV 的副本数和 Raft 的选举超时,这些参数直接影响容错和延迟。
MySQL 兼容性:迁移容易,但别踩高级特性的坑
TiDB 兼容 MySQL 8.0 的协议,所以你可以用现成的 MySQL 驱动、ORM 和工具,迁移应用时通常不用改代码。这对存量 MySQL 用户是巨大的吸引力。但兼容不等于完全相同。文档里明确提到 MySQL 兼容性页面,说明有边界。比如存储过程、触发器、自定义函数这类高级特性,TiDB 的支持可能不完整。外键约束在 TiDB 里默认不启用,因为分布式环境下外键会拖慢写入。如果你的应用重度依赖这些特性,迁移前必须逐项核对。另一个注意点是 TiDB 的 SQL 方言在窗口函数、JSON 函数上可能和 MySQL 有细微差别,测试要覆盖这些查询。
扩展性与高可用:Raft 的取舍
TiDB 的水平扩展是它的核心卖点。加 TiKV 节点就能扩存储,加 TiDB Server 就能扩计算,而且不用停机。垂直扩展也支持,给现有节点加资源就行。高可用靠 Raft 实现,数据多副本,事务提交要多数派确认。这意味着至少要有三个副本才能容忍单节点故障,两个副本在 Raft 里是危险的。部署时你要规划好副本数,这直接影响成本。Raft 的另一个代价是写入延迟,因为每次提交都要网络往返到多数派节点。在跨可用区部署时,这个延迟会更明显。如果你的业务对写入延迟极其敏感,比如每秒几万次的点写,TiDB 可能不是最优解,但如果你更需要的是扩展性和可用性,这个取舍是值得的。
向量搜索:新功能,但文档还比较薄
仓库的 Quick Start 里提到了 vector search,指向 TiDB Cloud 的文档。这说明向量搜索是 TiDB 的一个卖点,但 README 里没有详细说明实现机制。从文档链接看,它应该是作为 SQL 的一部分提供的,而不是独立的向量数据库。这意味着你可以用 SQL 语法做向量检索,和传统数据放在同一张表里。这对 agentic 工作负载很实用,因为你可以把 embedding 和业务数据存在一起,不用额外同步。但需要明确的是,向量搜索在 TiDB 里属于较新的功能,文档和社区经验可能不如专门的向量数据库丰富。如果你的核心需求就是高并发向量检索,TiDB 可能不是首选,但如果你需要的是向量和事务数据的混合查询,它就有优势了。
维护成本与许可证:Apache-2.0 下的双刃剑
TiDB 采用 Apache-2.0 许可证,所有源码包括企业级功能都在 GitHub 上,这一点对开源用户很友好。但开源不等于免运维。TiDB 的组件多,部署、监控、升级都比单体数据库复杂。好消息是有 TiDB Operator 和 TiUP 这类工具,可以自动化一部分运维。版本节奏上,最近几个版本是 v8.5.6、v8.5.7、v8.5.8,发布时间间隔大约一个多月,说明维护活跃,但频繁升级也意味着你要跟上补丁。升级 TiDB 集群需要滚动操作,涉及多个组件,不能像 MySQL 那样简单替换二进制。如果你的团队没有专门的 DBA 或 SRE,建议直接用 TiDB Cloud,把运维外包出去。
编辑结论
适合需要 MySQL 协议兼容、又希望横向扩展并同时跑事务和分析负载的团队,尤其是数据量增长超出单机 MySQL 或 PostgreSQL 承受范围的场景。不适合只需要简单单机数据库、或者对运维人力极其敏感的小团队,因为 TiDB 的组件多,部署和调优门槛明显高于单体数据库。采用前先验证三件事:你的 SQL 是否落在 MySQL 8.0 兼容范围内,特别是存储过程、触发器这类高级特性;你的写入延迟是否容忍两阶段提交带来的额外开销;以及你是否真的需要 HTAP 或向量搜索,如果只需要 OLTP,TiKV 单引擎方案可能更省资源。TiDB 的价值在于把多套系统合并成一套,但合并的代价是你要接受它的分布式复杂性。
社区笔记