Skip to content

认识 TiDB

当一个 MySQL 单表的数据量从百万冲到千万、再到上亿,DBA 们开始频繁提起一个词:分库分表。然后噩梦就开始了——跨库 join 写不动、分布式事务难维护、扩容时数据迁移到半夜、某个分片突然变热点谁也说不清。

有没有一种可能,数据库自己就能横向扩展,而我们不用再去写一层又一层的中间件?

今天要聊的,就是来终结这个噩梦的开源分布式数据库——TiDB。

"Ti" 代表 Titanium(钛),寓意像钛一样坚固又轻巧。

什么是 TiDB

TiDB(发音 "tie-dee-bee")是由 PingCAP 开发的一款开源分布式 SQL 数据库,采用 Apache 2.0 协议开源。它最大的特点是兼容 MySQL 协议,同时在底层用分布式架构实现了水平扩展、强一致事务和实时分析(HTAP)能力。

说人话就是:它用起来像 MySQL,但能像大数据组件一样无限扩容,还能在同一套库里既做交易又做分析。

TiDB 的存储引擎 TiKV,是云原生计算基金会(CNCF)的毕业项目,和 Kubernetes、etcd 同级。

TiDB 的特点

  • 开源免费,Apache 2.0 协议,企业级功能也全部开源
  • 兼容 MySQL 协议与语法,大多数应用零代码改动即可迁移(兼容 MySQL 8.0)
  • 纯分布式架构,计算与存储分离,可独立弹性扩缩容
  • 支持 ACID 分布式事务,默认 Snapshot Isolation 隔离级别
  • HTAP 能力,一套库同时跑交易(OLTP)和分析(OLAP),无需 ETL
  • 多副本 + Raft 共识协议,自动故障转移,天然高可用
  • 云原生,支持 Kubernetes 部署,也提供托管的 TiDB Cloud
  • 原生支持向量检索,可直接服务 AI/RAG 场景

TiDB 的技术架构

TiDB 把整个数据库拆成了四个各司其职的组件,彼此通过通信协作:

组件职责一句话理解
TiDB ServerSQL 层解析 SQL、优化执行计划,本身不存数据,无状态可水平扩展
PD (Placement Driver)管控大脑管理集群元信息、分配事务 ID、调度数据分布,至少 3 节点高可用
TiKV行式存储分布式事务型 KV 引擎,负责 OLTP,数据按 Region 分片,默认三副本
TiFlash列式存储实时从 TiKV 同步数据,列式存储加速 OLAP 分析查询

其中 TiKV 存交易数据(行存),TiFlash 存分析数据(列存),两者通过 Raft Learner 协议实时同步。这就是 TiDB 能做到"一套库既做交易又做分析"的关键——业务写入 TiKV,分析查询走 TiFlash,互不干扰,还不用搬数据。

PD 被称为整个集群的"大脑",少了它集群就不知道数据该往哪儿放。

哪些场景适合使用 TiDB

MySQL 扩容瓶颈

当单机 MySQL 扛不住数据量和并发,又不想引入复杂的分库分表中间件时,TiDB 几乎是最顺滑的升级路径——因为协议兼容,应用层基本不用改。Atlassian 把 750 多个分片化的 PostgreSQL 集群整合成了 16 个 TiDB 集群,单个集群撑住 300 万张表和 50 万并发连接。

金融级强一致场景

银行转账、支付清算这类对数据一致性零容忍的场景,TiDB 的 ACID 事务和多副本 Raft 共识能直接满足。Plaid 用近两年时间把约 100 个服务从 Amazon Aurora 迁到了 TiDB,单服务切换停机从 5 分钟压到 60 秒以内。

实时分析与 HTAP

不想再搭一套 Hive/Spark 做离线分析?TiFlash 让你直接在交易库上跑分析报表。Catalyst 借助 TiDB 的 HTAP 能力把查询响应提升了 60 倍,把对象数据和时间序列数据统一到了一个技术栈里。

海量租户与 AI Agent 平台

这是 TiDB 近年发力的新方向。它支持原生向量检索,可以直接服务 RAG 和 AI Agent 场景。Manus 的 Agent 平台在 TiDB 上跑着 100 万+ 的数据库租户;Dify 把近 50 万个数据库容器整合成了一个 TiDB 实例;Kimi 的 K2.6 Agent 给每个用户站点秒级建库,撑住了 1000 万+ 租户。

从"分布式数据库"到"AI Agent 的数据库",TiDB 这两年的定位明显往 AI 靠了。

TiDB 初体验

想亲手摸一摸 TiDB?官方提供了 tiup 工具,一行命令就能在本地拉起一个测试集群。

  1. 安装 tiup
bash
curl --proto '=https' --tlsv1.2 -sSf https://tiup-mirrors.pingcap.com/install.sh | sh
  1. 启动本地 playground
bash
tiup playground v8.5.7

启动后会打印出各组件的连接信息,默认提供一个 MySQL 协议的连接地址。

  1. 用 MySQL 客户端连上
bash
mysql --host 127.0.0.1 --port 4000 -u root

注意 TiDB 默认端口是 4000。连上之后,熟悉的 SHOW DATABASES;CREATE TABLE; 都能用——这就是 MySQL 兼容的丝滑之处。

如果不想本地装东西,TiDB Cloud 提供免费集群,注册即可在云端体验,不用绑卡。

进阶

TiDB 的迷人之处在于:它让"分布式数据库"这件事变得不那么吓人了。你不用一上来就啃 Raft 论文、不用懂 Region 怎么分裂,先用 MySQL 的习惯连上去用,等数据涨上来了,加几台机器就是了。

更多开源技术干货和学习资料,关注公众号「遇码」,领取专属福利。

遇码MeetCoding 开源技术社区