TiDB
→ 返回 分布式数据库
TiDB 是 PingCAP 开源的分布式 NewSQL 数据库:对外 MySQL 协议兼容,存储由 TiKV(行存、Raft 多副本)承担,计算由 TiDB Server(无状态 SQL 层)承担,集群元数据由 PD(Placement Driver) 调度。适合单表/总数据量超大且希望减少自研分片运维的团队。
架构
应用(JDBC / MyBatis,与 MySQL 类似)
│
▼
TiDB Server(SQL 解析、优化、执行)
│
┌────┴────┐
▼ ▼
PD TiKV 集群(Region 分片,Raft 复制)
(调度、 每个 Region 默认 ~96MB,自动分裂/迁移
元数据)
| 组件 | 职责 |
|---|
| TiDB Server | 无状态,可水平加节点扛连接与 SQL |
| TiKV | 分布式 KV,数据按 Region 分片并多副本 |
| PD | Region 分布、负载均衡、时间戳分配(TSO) |
| TiFlash(可选) | 列存副本,HTAP 实时分析 |
核心特性
| 特性 | 说明 |
|---|
| 水平扩展 | 加 TiDB / TiKV 节点扩容,无需应用改分片键 |
| 高可用 | Region 多副本 + Raft,节点故障自动选主 |
| 分布式事务 | Percolator 模型 + 乐观/悲观锁 |
| MySQL 兼容 | 多数 OLTP SQL、常用函数;部分方言需对照文档 |
| HTAP | TiFlash 同步 TiKV 数据,分析查询不打断主库 |
与「MySQL + ShardingSphere」对比
| 维度 | TiDB | MySQL + ShardingSphere |
|---|
| 分片 | 集群内置 Region | 业务配置分片规则 |
| 扩容 | 加节点,PD 调度 | 数据重分布 + 路由变更 |
| 跨分片 SQL | 优化器处理(仍忌大范围扫) | 广播查询成本高 |
| 运维 | TiDB 生态工具(Backup、DM) | 自管多套 MySQL |
| 迁移 | 从 MySQL 可用 TiDB Data Migration(DM) | 双写 + DataX 等 |
何时仍选 ShardingSphere:强依赖现有 MySQL 运维体系、分片规则已稳定、暂不上分布式库。
使用注意
| 项 | 建议 |
|---|
| 主键 | 仍建议离散或趋势递增(避免热点 Region),可用 AUTO_RANDOM |
| 大事务 | 控制事务行数与时长,避免锁放大 |
| 索引 | 与 MySQL 类似需合理建索引,见 索引 |
| 分析 | 重查询走 TiFlash 或导出到 ClickHouse |
| 事务跨服务 | 库内由 TiDB 保证;跨服务仍用 Seata 或 MQ |
Spring / Java
spring:
datasource:
url: jdbc:mysql://tidb-lb:4000/order_db?useSSL=false
username: app
password: ***
相关链接