TiDB简介 #
一、什么是TiDB #
1.1 数据库演进历程 #
text
传统数据库时代
├── 单机数据库 (MySQL, PostgreSQL)
│ └── 问题: 扩展困难, 单点故障
│
├── 中间件分库分表
│ └── 问题: 运维复杂, 跨库事务难
│
└── NoSQL时代
└── 问题: 不支持SQL, 弱事务
↓
NewSQL时代
└── TiDB: 分布式 + SQL + 事务
1.2 TiDB定义 #
TiDB 是 PingCAP 公司自主设计、研发的开源分布式关系型数据库,是一款融合了传统关系型数据库和 NoSQL 数据库特性的新型分布式数据库。
| 特性 | 说明 |
|---|---|
| 分布式 | 水平扩展,无限扩容 |
| 关系型 | 完整的SQL支持 |
| 事务 | ACID事务保证 |
| MySQL兼容 | 高度兼容MySQL协议 |
| 开源 | Apache 2.0 协议 |
1.3 TiDB定位 #
text
┌─────────────────────────────────────────────────────┐
│ TiDB 定位 │
├─────────────────────────────────────────────────────┤
│ ✓ 关系型数据库 - 完整SQL支持 │
│ ✓ 分布式数据库 - 水平扩展能力 │
│ ✓ NewSQL数据库 - 分布式+SQL+事务 │
│ ✓ HTAP数据库 - 混合事务分析处理 │
└─────────────────────────────────────────────────────┘
二、TiDB发展历史 #
2.1 诞生背景 #
text
2012年 Google Spanner论文发布
↓
2015年 PingCAP成立,开始研发TiDB
↓
2016年 TiDB 1.0 GA发布
↓
2017年 TiDB 2.0 发布,性能大幅提升
↓
2019年 TiDB 3.0 发布,支持HTAP
↓
2020年 TiDB 4.0 发布,企业级特性
↓
2021年 TiDB 5.0 发布,MPP架构
↓
2022年 TiDB 6.0 发布,多租户
↓
2023年 TiDB 7.0 发布,增强HTAP
↓
至今 持续迭代演进
2.2 版本特性 #
| 版本 | 年份 | 主要特性 |
|---|---|---|
| 1.0 | 2016 | 基础分布式事务 |
| 2.0 | 2017 | 优化器增强,性能提升 |
| 3.0 | 2019 | TiFlash,HTAP支持 |
| 4.0 | 2020 | Raft Learner,备份恢复 |
| 5.0 | 2021 | MPP引擎,列存优化 |
| 6.0 | 2022 | 资源管控,放置规则 |
| 7.0 | 2023 | 增强HTAP,多租户 |
2.3 开源生态 #
| 项目 | 说明 |
|---|---|
| TiDB | SQL层,协议兼容 |
| TiKV | 存储层,分布式KV |
| PD | 调度器,元数据管理 |
| TiFlash | 列存引擎,分析加速 |
| TiCDC | 数据同步工具 |
| TiDB Operator | Kubernetes部署 |
三、TiDB核心特点 #
3.1 水平扩展 #
sql
-- 传统数据库扩展困难
-- 单机MySQL: 数据量受限于单机存储
-- TiDB 水平扩展
-- 添加节点即可线性扩展容量和性能
text
扩展前:
┌─────────────────┐
│ TiDB Cluster │
│ 3 TiKV Nodes │
│ Capacity: 3TB │
└─────────────────┘
扩展后:
┌─────────────────────────────┐
│ TiDB Cluster │
│ 6 TiKV Nodes │
│ Capacity: 6TB │
│ Performance: 2x │
└─────────────────────────────┘
3.2 高可用架构 #
text
┌─────────────────────────────────────────────────┐
│ 高可用设计 │
├─────────────────────────────────────────────────┤
│ │
│ ┌──────┐ ┌──────┐ ┌──────┐ │
│ │TiDB 1│ │TiDB 2│ │TiDB 3│ 无状态 │
│ └──────┘ └──────┘ └──────┘ │
│ │ │ │ │
│ └─────────┼─────────┘ │
│ │ │
│ ┌──────┐ ┌──────┐ ┌──────┐ │
│ │ PD 1 │ │ PD 2 │ │ PD 3 │ Raft选举 │
│ └──────┘ └──────┘ └──────┘ │
│ │ │
│ ┌──────┐ ┌──────┐ ┌──────┐ │
│ │TiKV 1│ │TiKV 2│ │TiKV 3│ Raft复制 │
│ └──────┘ └──────┘ └──────┘ │
│ │
└─────────────────────────────────────────────────┘
3.3 ACID事务 #
sql
-- TiDB 完整支持 ACID 事务
BEGIN;
-- 原子性: 全部成功或全部失败
UPDATE accounts SET balance = balance - 100 WHERE id = 1;
UPDATE accounts SET balance = balance + 100 WHERE id = 2;
-- 一致性: 数据约束保证
-- 隔离性: 支持多种隔离级别
-- 持久性: Raft 日志持久化
COMMIT;
3.4 MySQL兼容 #
sql
-- TiDB 高度兼容 MySQL 协议
-- 连接方式与 MySQL 相同
mysql -h 127.0.0.1 -P 4000 -u root -p
-- 标准 SQL 语法
SELECT * FROM users WHERE id = 1;
-- JOIN 查询
SELECT u.name, o.order_no
FROM users u
JOIN orders o ON u.id = o.user_id;
-- 聚合函数
SELECT COUNT(*), AVG(amount) FROM orders;
3.5 HTAP能力 #
text
┌─────────────────────────────────────────────────────┐
│ HTAP 架构 │
├─────────────────────────────────────────────────────┤
│ │
│ 应用层 │
│ │ │
│ ▼ │
│ ┌───────┐ │
│ │ TiDB │ SQL 解析、优化、执行 │
│ └───────┘ │
│ │ │
│ ├──────────────────┐ │
│ ▼ ▼ │
│ ┌───────┐ ┌──────────┐ │
│ │ TiKV │ │ TiFlash │ │
│ │ 行存 │ │ 列存 │ │
│ │ OLTP │ │ OLAP │ │
│ └───────┘ └──────────┘ │
│ │
│ 实时同步,一套系统同时支持事务和分析 │
└─────────────────────────────────────────────────────┘
四、TiDB应用场景 #
4.1 适用场景 #
1. 海量数据存储
sql
-- 单表数据量超过 MySQL 单机限制
-- TiDB 支持单表 PB 级数据
CREATE TABLE logs (
id BIGINT AUTO_INCREMENT PRIMARY KEY,
user_id BIGINT,
action VARCHAR(100),
created_at TIMESTAMP,
details JSON
) PARTITION BY RANGE (YEAR(created_at)) (
PARTITION p2023 VALUES LESS THAN (2024),
PARTITION p2024 VALUES LESS THAN (2025),
PARTITION p2025 VALUES LESS THAN (2026)
);
2. 高并发写入
text
写入场景:
├── 订单系统
├── 日志采集
├── IoT数据
└── 消息存储
3. 实时分析
sql
-- 边写入边分析
-- TiFlash 提供列存加速
SELECT
DATE_FORMAT(created_at, '%Y-%m-%d') AS day,
COUNT(*) AS order_count,
SUM(amount) AS total_amount
FROM orders
WHERE created_at >= DATE_SUB(NOW(), INTERVAL 30 DAY)
GROUP BY day
ORDER BY day;
4. 金融级事务
sql
-- 强一致性事务保证
-- 适合金融、支付场景
BEGIN;
-- 转账操作
UPDATE accounts SET balance = balance - 1000 WHERE id = 1;
UPDATE accounts SET balance = balance + 1000 WHERE id = 2;
COMMIT;
4.2 行业案例 #
| 行业 | 客户 | 应用场景 |
|---|---|---|
| 金融 | 京东金融 | 支付清算系统 |
| 电商 | 小红书 | 商品、用户数据 |
| 游戏 | 原神 | 游戏数据存储 |
| 物联网 | 旷视 | 设备数据采集 |
| 内容 | 知乎 | 内容存储检索 |
4.3 不适用场景 #
| 场景 | 原因 | 建议 |
|---|---|---|
| 小数据量 | 杀鸡用牛刀 | 使用 MySQL |
| 极低延迟 | 分布式有网络开销 | 使用内存数据库 |
| 复杂存储过程 | 存储过程支持有限 | 应用层实现 |
五、TiDB vs 其他数据库 #
5.1 与MySQL对比 #
| 特性 | MySQL | TiDB |
|---|---|---|
| 扩展方式 | 垂直扩展 | 水平扩展 |
| 数据量 | 单机限制 | PB级 |
| 高可用 | 主从复制 | Raft多副本 |
| 事务 | 支持 | 分布式事务 |
| 学习成本 | 低 | 中等 |
| 运维成本 | 低 | 中等 |
5.2 与MongoDB对比 #
| 特性 | MongoDB | TiDB |
|---|---|---|
| 数据模型 | 文档型 | 关系型 |
| SQL支持 | 有限 | 完整 |
| 事务 | 4.0+支持 | 原生支持 |
| Join | 有限支持 | 完整支持 |
| Schema | 灵活 | 固定 |
5.3 与CockroachDB对比 #
| 特性 | CockroachDB | TiDB |
|---|---|---|
| 协议兼容 | PostgreSQL | MySQL |
| 存储引擎 | RocksDB | TiKV |
| 分析能力 | 较弱 | TiFlash HTAP |
| 社区活跃度 | 活跃 | 活跃 |
| 开源协议 | BSL | Apache 2.0 |
六、TiDB架构概览 #
6.1 整体架构 #
text
┌─────────────────────────────────────────────────────────────┐
│ 应用层 │
│ MySQL Client / ORM / Application │
└─────────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────┐
│ TiDB Server │
│ SQL解析 → 优化器 → 执行器 → 分布式执行 │
│ (无状态,可水平扩展) │
└─────────────────────────────────────────────────────────────┘
│
┌───────────────┼───────────────┐
▼ ▼ ▼
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
│ TiDB Server │ │ TiDB Server │ │ TiDB Server │
└─────────────────┘ └─────────────────┘ └─────────────────┘
│ │ │
└───────────────┼───────────────┘
│
▼
┌─────────────────────────────────────────────────────────────┐
│ Placement Driver │
│ 调度器 / 元数据管理 / 时间戳分配 │
└─────────────────────────────────────────────────────────────┘
│
┌───────────────┼───────────────┐
▼ ▼ ▼
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
│ TiKV │ │ TiKV │ │ TiKV │
│ 行存引擎 │ │ 行存引擎 │ │ 行存引擎 │
│ OLTP │ │ OLTP │ │ OLTP │
└─────────────────┘ └─────────────────┘ └─────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────┐
│ TiFlash │
│ 列存引擎 / OLAP加速 / 实时同步 │
└─────────────────────────────────────────────────────────────┘
6.2 组件职责 #
| 组件 | 职责 |
|---|---|
| TiDB Server | SQL解析、优化、执行 |
| TiKV | 数据存储、分布式事务 |
| PD | 调度、元数据、时间戳 |
| TiFlash | 列存、分析加速 |
七、为什么学习TiDB #
7.1 市场需求 #
text
分布式数据库技能需求增长趋势
┌─────────────────────────────────┐
│ 2024年 │
│ TiDB ████████████ 增长40% │
│ OceanBase ████████ 增长35% │
│ PolarDB ██████ 增长25% │
└─────────────────────────────────┘
7.2 学习价值 #
1. 技能成长
text
TiDB学习路径
├── 分布式系统原理
│ ├── Raft共识算法
│ ├── 分布式事务
│ └── 分布式存储
├── 数据库内核
│ ├── SQL优化器
│ ├── 执行引擎
│ └── 存储引擎
└── 运维实践
├── 集群部署
├── 性能调优
└── 故障排查
2. 职业发展
| 职位 | TiDB技能要求 |
|---|---|
| 后端开发 | 熟练使用 |
| DBA | 精通运维 |
| 架构师 | 精通设计 |
| 数据工程师 | 熟练ETL |
7.3 学习路线 #
text
入门阶段 (1-2周)
├── TiDB简介
├── 安装部署
├── 基础SQL
└── 架构理解
进阶阶段 (2-4周)
├── 分布式事务
├── 索引优化
├── 数据迁移
└── 监控运维
高级阶段 (1-3月)
├── 性能调优
├── 高可用设计
├── 源码理解
└── 故障排查
八、学习资源 #
8.1 官方资源 #
| 资源 | 地址 |
|---|---|
| 官方文档 | https://docs.pingcap.com/zh/tidb/stable |
| 官方网站 | https://pingcap.com/ |
| GitHub | https://github.com/pingcap/tidb |
| AskTUG社区 | https://asktug.com/ |
8.2 学习建议 #
- 动手实践:搭建测试集群,多写SQL
- 理解原理:学习分布式系统基础
- 阅读源码:深入理解实现细节
- 参与社区:提问、回答、贡献代码
九、总结 #
TiDB核心优势:
| 优势 | 说明 |
|---|---|
| 水平扩展 | 线性扩展,无限容量 |
| 高可用 | Raft协议,自动故障恢复 |
| MySQL兼容 | 无缝迁移,学习成本低 |
| HTAP | 一套系统,事务分析兼得 |
| 开源 | Apache 2.0,社区活跃 |
下一步,让我们开始安装部署TiDB!
最后更新:2026-03-27