认识 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 Server | SQL 层 | 解析 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 工具,一行命令就能在本地拉起一个测试集群。
- 安装 tiup
curl --proto '=https' --tlsv1.2 -sSf https://tiup-mirrors.pingcap.com/install.sh | sh- 启动本地 playground
tiup playground v8.5.7启动后会打印出各组件的连接信息,默认提供一个 MySQL 协议的连接地址。
- 用 MySQL 客户端连上
mysql --host 127.0.0.1 --port 4000 -u root注意 TiDB 默认端口是 4000。连上之后,熟悉的 SHOW DATABASES;、CREATE TABLE; 都能用——这就是 MySQL 兼容的丝滑之处。
如果不想本地装东西,TiDB Cloud 提供免费集群,注册即可在云端体验,不用绑卡。
进阶
TiDB 的迷人之处在于:它让"分布式数据库"这件事变得不那么吓人了。你不用一上来就啃 Raft 论文、不用懂 Region 怎么分裂,先用 MySQL 的习惯连上去用,等数据涨上来了,加几台机器就是了。
更多开源技术干货和学习资料,关注公众号「遇码」,领取专属福利。
