外观
TiDB 核心特性
分布式事务
事务模型
TiDB 支持完整的 ACID 事务,基于 Google Percolator 模型实现分布式事务处理。与传统的两阶段提交 (2PC) 不同,TiDB 的事务模型提供了更好的性能和可用性。
隔离级别
TiDB 支持四种标准的事务隔离级别:
- READ UNCOMMITTED:允许读取未提交的数据,可能导致脏读
- READ COMMITTED:只允许读取已提交的数据,避免脏读
- REPEATABLE READ(默认):保证同一事务中多次读取同一数据结果一致,避免不可重复读和脏读
- SERIALIZABLE:最高隔离级别,保证事务串行执行,避免所有并发问题
事务实现机制
- 乐观锁:默认使用乐观锁,减少锁竞争,提高并发性能
- 悲观锁:支持悲观锁,适合高冲突场景
- 自动重试:事务冲突时自动重试,提高事务成功率
- 大事务支持:优化大事务处理,减少内存占用
事务性能优化
- 批量提交:减少网络往返,提高写入性能
- 异步提交:降低事务提交延迟
- 并行执行:支持事务内语句并行执行
- 事务优先级:支持设置事务优先级,保证关键业务的执行
水平扩展
计算存储分离
TiDB 采用计算存储分离架构:
- 计算层:TiDB Server 节点,负责 SQL 解析、优化和执行
- 存储层:TiKV Server 节点,负责数据存储和复制
- 管理层:PD Server 节点,负责集群调度和元数据管理
自动分片
- Range 分片:数据按照主键范围自动分片为 Region(默认 96MB)
- 自动拆分:Region 大小超过阈值时自动拆分
- 自动合并:相邻小 Region 自动合并,减少元数据开销
- 负载均衡:PD 自动调度 Region,平衡节点负载
在线扩缩容
- 无缝扩容:添加新节点后,数据自动迁移,无需停机
- 缩容安全:缩容前确保数据已迁移,避免数据丢失
- 弹性伸缩:支持根据业务负载动态调整集群规模
- 跨 AZ/Region 部署:支持跨可用区或跨地域部署,提高容灾能力
高可用性
数据多副本
- Raft 协议:基于 Raft 共识算法实现数据复制
- 默认 3 副本:数据默认存储 3 个副本,分布在不同节点
- 可配置副本数:支持根据需求调整副本数量(3-5 副本)
- 副本分布策略:支持跨 AZ/Region 分布,提高容灾能力
自动故障转移
- 快速检测:节点故障检测时间 < 30 秒
- 自动选主:Raft 组自动选举新 Leader
- 服务恢复:故障恢复时间 < 30 秒
- 无单点故障:所有组件均支持高可用部署
容灾设计
- 同城多活:支持同城多可用区部署
- 异地灾备:支持跨地域灾备部署
- 跨云部署:支持混合云和多云部署
- 业务连续性:保证 99.99% 以上的可用性
HTAP 能力
混合事务分析处理
- TiKV + TiFlash:行存(TiKV)和列存(TiFlash)结合
- 实时数据分析:支持事务处理的同时进行实时分析
- 无需 ETL:分析查询直接访问实时数据,无需数据同步
- 智能路由:优化器自动选择最优执行引擎
TiFlash 列存引擎
- 列式存储:适合分析查询,减少 I/O 开销
- 实时同步:与 TiKV 实时同步数据,延迟低
- MPP 执行:支持分布式并行查询,提高分析性能
- 向量计算:支持向量计算,加速复杂查询
HTAP 应用场景
- 实时报表:业务数据实时生成报表
- 实时监控:实时监控业务指标和异常
- 实时决策:基于实时数据进行业务决策
- 实时推荐:根据用户行为实时调整推荐策略
MySQL 兼容性
协议兼容
- 完全兼容 MySQL 5.7/8.0 协议:应用无需修改即可连接
- 支持 MySQL 客户端:可以使用 MySQL 命令行工具、Navicat、DBeaver 等工具连接
- 支持 MySQL 驱动:所有 MySQL 驱动均可用于 TiDB
语法兼容
- 支持大部分 MySQL 语法:包括 DDL、DML、DCL、TCL 等
- 支持 MySQL 函数:包括字符串函数、数学函数、日期函数等
- 支持 MySQL 存储过程和函数:部分限制
- 支持 MySQL 触发器:部分限制
- 支持 MySQL 视图:完全支持
工具兼容
- 支持 MySQL 生态工具:
- mysqldump/mysqlpump:数据备份和恢复
- mysqlbinlog:日志查看
- MySQL Workbench:数据库设计和管理
- ORM 框架:Hibernate、MyBatis、Sequelize 等
迁移便捷性
- 零修改迁移:大部分应用无需修改代码即可迁移
- 数据迁移工具:提供 TiDB Data Migration (DM) 工具,支持从 MySQL 迁移到 TiDB
- 兼容性测试工具:提供 TiDB Compatibility Test Suite (CTS),检测应用兼容性
云原生设计
Kubernetes 支持
- Operator 部署:提供 TiDB Operator,支持在 Kubernetes 上部署和管理 TiDB 集群
- 声明式配置:通过 YAML 文件定义集群状态
- 自动运维:自动处理扩缩容、升级、备份等操作
- 监控集成:与 Kubernetes 监控生态集成
弹性伸缩
- 自动扩缩容:支持根据资源使用率自动调整集群规模
- 资源隔离:支持命名空间隔离,多租户部署
- 按需付费:适合云环境,根据实际使用付费
云服务优化
- TiDB Cloud:提供全托管的 TiDB 云服务
- Serverless 模式:支持无服务器部署,自动扩缩容
- 多云支持:支持 AWS、GCP、Azure 等主流云平台
- 边缘部署:支持边缘计算场景
分布式架构优势
强一致性
- 线性一致性:保证数据读取的最新版本
- 外部一致性:保证事务的全局顺序
- 因果一致性:保证因果关系的正确性
全局视图
- 全局表:支持全局唯一索引
- 分布式主键:支持 AUTO_INCREMENT 和 UUID 等主键生成方式
- 全局时间戳:基于 PD 的 TSO(Timestamp Oracle)生成全局唯一时间戳
分布式查询优化
- 分布式执行计划:生成高效的分布式执行计划
- 谓词下推:将过滤条件下推到存储层,减少数据传输
- 数据本地化:优先选择本地数据执行,减少网络开销
- 并行执行:支持查询并行执行,提高查询性能
企业级特性
安全特性
- SSL/TLS 加密:支持传输加密
- 数据加密:支持存储加密
- 细粒度权限控制:基于角色的访问控制(RBAC)
- 审计日志:记录所有操作日志,便于审计
- 密码策略:支持强密码策略和密码过期
- IP 白名单:限制允许访问的 IP 地址
管理运维特性
- 集群监控:集成 Prometheus 和 Grafana,提供丰富的监控指标
- 告警系统:支持多种告警通道,及时发现问题
- 日志管理:支持日志收集、分析和存储
- 备份恢复:支持全量备份、增量备份和 PITR(精确到秒的恢复)
- 滚动升级:支持在线滚动升级,无需停机
- 蓝绿部署:支持蓝绿部署,降低升级风险
数据迁移和同步
- 数据迁移工具:TiDB Data Migration (DM),支持从 MySQL 迁移到 TiDB
- 变更数据捕获:TiCDC,支持实时数据同步到其他系统
- 数据导入工具:TiDB Lightning,支持快速导入大量数据
- 数据导出工具:支持导出数据到 CSV、SQL 等格式
多租户支持
- 资源隔离:支持 CPU、内存、IO 资源隔离
- 权限隔离:支持多租户权限隔离
- 监控隔离:支持多租户监控视图
- 备份隔离:支持租户级备份恢复
常见问题(FAQ)
Q1: TiDB 的分布式事务性能如何?
A1: TiDB 的分布式事务性能表现优秀:
- 单节点写入性能可达 10 万 TPS
- 随着节点增加,性能线性扩展
- 支持高并发事务处理
- 优化了大事务处理,减少内存占用
Q2: TiDB 如何处理热点问题?
A2: TiDB 提供多种机制处理热点问题:
- 自动热点调度:PD 自动将热点 Region 分散到不同节点
- 热点数据打散:支持将热点数据打散存储
- 分区表:支持表分区,将数据分散到不同分区
- 主键设计:建议使用分布式主键,如 UUID 或雪花算法,避免热点
- 热点限流:支持热点限流,保护集群稳定
Q3: TiDB 的 HTAP 能力与传统数据仓库相比如何?
A3: TiDB 的 HTAP 能力具有以下优势:
- 实时性:直接查询实时数据,无需 ETL
- 成本低:无需维护两套系统(OLTP + OLAP)
- 易用性:使用标准 SQL,无需学习新的查询语言
- 弹性扩展:支持水平扩展,处理更大规模数据
- 一致性:保证事务数据和分析数据的一致性
Q4: TiDB 支持哪些存储引擎?
A4: TiDB 支持多种存储引擎:
- TiKV:默认行存引擎,适合 OLTP 场景
- TiFlash:列式存储引擎,适合 OLAP 场景
- TiKV Raw:Raw KV 接口,适合需要直接操作键值的场景
Q5: TiDB 如何保证数据一致性?
A5: TiDB 通过多种机制保证数据一致性:
- Raft 协议:保证副本之间的数据一致性
- 分布式事务:保证跨节点事务的 ACID 特性
- TSO:提供全局唯一的时间戳,保证事务的外部一致性
- Checksum:支持数据校验,检测数据损坏
- 一致性快照:支持一致的备份和恢复
Q6: TiDB 支持哪些版本的 MySQL 兼容性?
A6: TiDB 兼容 MySQL 5.7 和 MySQL 8.0 协议和语法:
- 支持大部分 MySQL 5.7 的功能和语法
- 支持部分 MySQL 8.0 的新特性
- 提供兼容性测试工具,检测应用兼容性
Q7: TiDB 如何处理大表查询?
A7: TiDB 针对大表查询进行了多种优化:
- 分布式执行:将查询分解到多个节点并行执行
- 谓词下推:将过滤条件下推到存储层,减少数据传输
- 数据本地化:优先选择本地数据执行,减少网络开销
- 索引优化:支持多种索引类型,如 B+ 树索引、全文索引等
- 统计信息:维护准确的统计信息,生成最优执行计划
Q8: TiDB 支持哪些备份恢复方式?
A8: TiDB 支持多种备份恢复方式:
- 全量备份:使用 BR 工具进行全量备份
- 增量备份:支持基于日志的增量备份
- PITR:支持精确到秒的点恢复
- 逻辑备份:支持使用 mysqldump 等工具进行逻辑备份
- 分区备份:支持分区表的备份恢复
Q9: TiDB 的监控系统包含哪些指标?
A9: TiDB 的监控系统包含丰富的指标:
- 集群指标:节点状态、资源使用率、QPS/TPS 等
- 存储指标:Region 数量、副本状态、IO 使用率等
- 事务指标:事务成功率、延迟、冲突率等
- 查询指标:查询延迟、执行计划、慢查询等
- 网络指标:网络流量、延迟、丢包率等
Q10: TiDB 适合哪些业务场景?
A10: TiDB 适合多种业务场景:
- 大规模 OLTP:高并发写入场景,如电商订单、金融交易
- 实时数据分析:需要实时分析的场景,如实时报表、监控告警
- 数据迁移整合:从 MySQL 迁移到分布式架构,多数据源整合
- 云原生应用:容器化部署,Kubernetes 原生支持
- HTAP 混合负载:同时需要事务处理和分析的场景
