TiDB 简介
TiDB 是 PingCAP 公司自主设计、研发的开源分布式关系型数据库,是一款同时支持在线事务处理与在线分析处理 (Hybrid Transactional and Analytical Processing, HTAP) 的融合型分布式数据库产品,具备水平扩容或者缩容、金融级高可用、实时 HTAP、云原生的分布式数据库、兼容 MySQL 5.7 协议和 MySQL 生态等重要特性。目标是为用户提供一站式 OLTP (Online Transactional Processing)、OLAP (Online Analytical Processing)、HTAP 解决方案。TiDB 适合高可用、强一致要求较高、数据规模较大等各种应用场景。
五大核心特性
- 一键水平扩容或者缩容
- 得益于 TiDB 存储计算分离的架构的设计,可按需对计算、存储分别进行在线扩容或者缩容,扩容或者缩容过程中对应用运维人员透明。
- 金融级高可用
- 数据采用多副本存储,数据副本通过 Multi-Raft 协议同步事务日志,多数派写入成功事务才能提交,确保数据强一致性且少数副本发生故障时不影响数据的可用性。可按需配置副本地理位置、副本数量等策略满足不同容灾级别的要求。
- 实时 HTAP
- 提供行存储引擎 TiKV、列存储引擎 TiFlash 两款存储引擎,TiFlash 通过 Multi-Raft Learner 协议实时从 TiKV 复制数据,确保行存储引擎 TiKV 和列存储引擎 TiFlash 之间的数据强一致。TiKV、TiFlash 可按需部署在不同的机器,解决 HTAP 资源隔离的问题。
- 云原生的分布式数据库
- 专为云而设计的分布式数据库,通过 TiDB Operator 可在公有云、私有云、混合云中实现部署工具化、自动化。
- 兼容 MySQL 5.7 协议和 MySQL 生态
- 兼容 MySQL 5.7 协议、MySQL 常用的功能、MySQL 生态,应用无需或者修改少量代码即可从 MySQL 迁移到 TiDB。提供丰富的数据迁移工具帮助应用便捷完成数据迁移。
四大核心应用场景
-
对数据一致性及高可靠、系统高可用、可扩展性、容灾要求较高的金融行业属性的场景
众所周知,金融行业对数据一致性及高可靠、系统高可用、可扩展性、容灾要求较高。传统的解决方案是同城两个机房提供服务、异地一个机房提供数据容灾能力但不提供服务,此解决方案存在以下缺点:资源利用率低、维护成本高、RTO (Recovery Time Objective) 及 RPO (Recovery Point Objective) 无法真实达到企业所期望的值。TiDB 采用多副本 + Multi-Raft 协议的方式将数据调度到不同的机房、机架、机器,当部分机器出现故障时系统可自动进行切换,确保系统的 RTO <= 30s 及 RPO = 0。
-
对存储容量、可扩展性、并发要求较高的海量数据及高并发的 OLTP 场景
随着业务的高速发展,数据呈现爆炸性的增长,传统的单机数据库无法满足因数据爆炸性的增长对数据库的容量要求,可行方案是采用分库分表的中间件产品或者 NewSQL 数据库替代、采用高端的存储设备等,其中性价比最大的是 NewSQL 数据库,例如:TiDB。TiDB 采用计算、存储分离的架构,可对计算、存储分别进行扩容和缩容,计算最大支持 512 节点,每个节点最大支持 1000 并发,集群容量最大支持 PB 级别。
-
Real-time HTAP 场景
随着 5G、物联网、人工智能的高速发展,企业所生产的数据会越来越多,其规模可能达到数百 TB 甚至 PB 级别,传统的解决方案是通过 OLTP 型数据库处理在线联机交易业务,通过 ETL 工具将数据同步到 OLAP 型数据库进行数据分析,这种处理方案存在存储成本高、实时性差等多方面的问题。TiDB 在 4.0 版本中引入列存储引擎 TiFlash 结合行存储引擎 TiKV 构建真正的 HTAP 数据库,在增加少量存储成本的情况下,可以同一个系统中做联机交易处理、实时数据分析,极大地节省企业的成本。
-
数据汇聚、二次加工处理的场景
当前绝大部分企业的业务数据都分散在不同的系统中,没有一个统一的汇总,随着业务的发展,企业的决策层需要了解整个公司的业务状况以便及时做出决策,故需要将分散在各个系统的数据汇聚在同一个系统并进行二次加工处理生成 T+0 或 T+1 的报表。传统常见的解决方案是采用 ETL + Hadoop 来完成,但 Hadoop 体系太复杂,运维、存储成本太高无法满足用户的需求。与 Hadoop 相比,TiDB 就简单得多,业务通过 ETL 工具或者 TiDB 的同步工具将数据同步到 TiDB,在 TiDB 中可通过 SQL 直接生成报表。
TiDB 基本功能
数据类型,函数和操作符
数据类型,函数,操作符 | 5.4 | 5.3 | 5.2 | 5.1 | 5.0 | 4.0 |
---|---|---|---|---|---|---|
数值类型 | Y | Y | Y | Y | Y | Y |
日期和时间类型 | Y | Y | Y | Y | Y | Y |
字符串类型 | Y | Y | Y | Y | Y | Y |
JSON 类型 | 实验特性 | 实验特性 | 实验特性 | 实验特性 | 实验特性 | 实验特性 |
控制流程函数 | Y | Y | Y | Y | Y | Y |
字符串函数 | Y | Y | Y | Y | Y | Y |
数值函数与操作符 | Y | Y | Y | Y | Y | Y |
日期和时间函数 | Y | Y | Y | Y | Y | Y |
位函数和操作符 | Y | Y | Y | Y | Y | Y |
Cast 函数和操作符 | Y | Y | Y | Y | Y | Y |
加密和压缩函数 | Y | Y | Y | Y | Y | Y |
信息函数 | Y | Y | Y | Y | Y | Y |
JSON 函数 | 实验特性 | 实验特性 | 实验特性 | 实验特性 | 实验特性 | 实验特性 |
聚合函数 | Y | Y | Y | Y | Y | Y |
窗口函数 | Y | Y | Y | Y | Y | Y |
其他函数 | Y | Y | Y | Y | Y | Y |
操作符 | Y | Y | Y | Y | Y | Y |
字符集和排序规则 1 | Y | Y | Y | Y | Y | Y |
索引和约束
索引和约束 | 5.4 | 5.3 | 5.2 | 5.1 | 5.0 | 4.0 |
---|---|---|---|---|---|---|
表达式索引 | 实验特性 | 实验特性 | 实验特性 | 实验特性 | 实验特性 | 实验特性 |
列式存储 (TiFlash) | Y | Y | Y | Y | Y | Y |
RocksDB 引擎 | Y | Y | Y | Y | Y | Y |
Titan 插件 | Y | Y | Y | Y | Y | Y |
不可见索引 | Y | Y | Y | Y | Y | N |
复合主键 | Y | Y | Y | Y | Y | Y |
唯一约束 | Y | Y | Y | Y | Y | Y |
整型主键上的聚簇索引 | Y | Y | Y | Y | Y | Y |
复合或非整型主键上的聚簇索引 | Y | Y | Y | Y | Y | N |
SQL 语句
SQL 语句 2 | 5.4 | 5.3 | 5.2 | 5.1 | 5.0 | 4.0 |
---|---|---|---|---|---|---|
SELECT ,INSERT ,UPDATE ,DELETE ,REPLACE |
Y | Y | Y | Y | Y | Y |
INSERT ON DUPLICATE KEY UPDATE |
Y | Y | Y | Y | Y | Y |
LOAD DATA INFILE |
Y | Y | Y | Y | Y | Y |
SELECT INTO OUTFILE |
Y | Y | Y | Y | Y | Y |
INNER JOIN , LEFT|RIGHT [OUTER] JOIN |
Y | Y | Y | Y | Y | Y |
UNION ,UNION ALL |
Y | Y | Y | Y | Y | Y |
EXCEPT 和 INTERSECT 运算符 |
Y | Y | Y | Y | Y | N |
GROUP BY ,ORDER BY |
Y | Y | Y | Y | Y | Y |
窗口函数 | Y | Y | Y | Y | Y | Y |
公共表表达式 (CTE) | Y | Y | Y | Y | N | N |
START TRANSACTION ,COMMIT ,ROLLBACK |
Y | Y | Y | Y | Y | Y |
EXPLAIN |
Y | Y | Y | Y | Y | Y |
EXPLAIN ANALYZE |
Y | Y | Y | Y | Y | Y |
用户自定义变量 | 实验特性 | 实验特性 | 实验特性 | 实验特性 | 实验特性 | 实验特性 |
高级 SQL 功能
高级 SQL 功能 | 5.4 | 5.3 | 5.2 | 5.1 | 5.0 | 4.0 |
---|---|---|---|---|---|---|
执行计划缓存 | Y | Y | 实验特性 | 实验特性 | 实验特性 | 实验特性 |
执行计划管理 (SPM) | Y | Y | Y | Y | Y | Y |
下推计算结果缓存 (Coprocessor Cache) | Y | Y | Y | Y | Y | 实验特性 |
Stale Read | Y | Y | Y | Y | N | N |
Follower Read | Y | Y | Y | Y | Y | Y |
通过系统变量 tidb_snapshot 读取历史数据 | Y | Y | Y | Y | Y | Y |
Optimizer hints | Y | Y | Y | Y | Y | Y |
MPP 执行引擎 | Y | Y | Y | Y | Y | N |
索引合并 | Y | 实验特性 | 实验特性 | 实验特性 | 实验特性 | 实验特性 |
Placement Rules in SQL | 实验特性 | 实验特性 | N | N | N | N |
数据定义语言 (DDL)
数据定义语言 (DDL) | 5.4 | 5.3 | 5.2 | 5.1 | 5.0 | 4.0 |
---|---|---|---|---|---|---|
CREATE ,DROP ,ALTER ,RENAME ,TRUNCATE |
Y | Y | Y | Y | Y | Y |
生成列 | 实验特性 | 实验特性 | 实验特性 | 实验特性 | 实验特性 | 实验特性 |
视图 | Y | Y | Y | Y | Y | Y |
序列 | Y | Y | Y | Y | Y | Y |
AUTO_INCREMENT 列 |
Y | Y | Y | Y | Y | Y |
AUTO_RANDOM 列 |
Y | Y | Y | Y | Y | Y |
DDL 算法断言 | Y | Y | Y | Y | Y | Y |
在单条语句中添加多列 | 实验特性 | 实验特性 | 实验特性 | 实验特性 | 实验特性 | 实验特性 |
更改列类型 | Y | Y | Y | Y | N | N |
临时表 | Y | Y | N | N | N | N |
事务
事务 | 5.4 | 5.3 | 5.2 | 5.1 | 5.0 | 4.0 |
---|---|---|---|---|---|---|
Async commit | Y | Y | Y | Y | Y | N |
1PC | Y | Y | Y | Y | Y | N |
大事务 (10 GB) | Y | Y | Y | Y | Y | Y |
悲观事务 | Y | Y | Y | Y | Y | Y |
乐观事务 | Y | Y | Y | Y | Y | Y |
可重复读隔离(快照隔离) | Y | Y | Y | Y | Y | Y |
读已提交隔离 | Y | Y | Y | Y | Y | Y |
分区
分区 | 5.4 | 5.3 | 5.2 | 5.1 | 5.0 | 4.0 |
---|---|---|---|---|---|---|
Range 分区 | Y | Y | Y | Y | Y | Y |
Hash 分区 | Y | Y | Y | Y | Y | Y |
List 分区 | 实验特性 | 实验特性 | 实验特性 | 实验特性 | 实验特性 | N |
List COLUMNS 分区 | 实验特性 | 实验特性 | 实验特性 | 实验特性 | 实验特性 | N |
EXCHANGE PARTITION |
实验特性 | 实验特性 | 实验特性 | 实验特性 | 实验特性 | N |
动态裁剪 | 实验特性 | 实验特性 | 实验特性 | 实验特性 | N | N |
统计信息
统计信息 | 5.4 | 5.3 | 5.2 | 5.1 | 5.0 | 4.0 |
---|---|---|---|---|---|---|
CM-Sketch | 已废弃 | 已废弃 | 已废弃 | 已废弃 | 已废弃 | Y |
直方图 | Y | Y | Y | Y | Y | Y |
扩展统计信息(多列) | 实验特性 | 实验特性 | 实验特性 | 实验特性 | 实验特性 | N |
统计反馈 | 已废弃 | 实验特性 | 实验特性 | 实验特性 | 实验特性 | 实验特性 |
快速分析 | 实验特性 | 实验特性 | 实验特性 | 实验特性 | 实验特性 | 实验特性 |
安全
安全 | 5.4 | 5.3 | 5.2 | 5.1 | 5.0 | 4.0 |
---|---|---|---|---|---|---|
传输层加密 (TLS) | Y | Y | Y | Y | Y | Y |
静态加密 (TDE) | Y | Y | Y | Y | Y | Y |
基于角色的访问控制 (RBAC) | Y | Y | Y | Y | Y | Y |
证书鉴权 | Y | Y | Y | Y | Y | Y |
caching_sha2_password 认证 |
Y | Y | Y | N | N | N |
与 MySQL 兼容的 GRANT 权限管理 |
Y | Y | Y | Y | Y | Y |
动态权限 | Y | Y | Y | Y | N | N |
安全增强模式 | Y | Y | Y | Y | N | N |
日志脱敏 | Y | Y | Y | Y | Y | N |
数据导入和导出
数据导入和导出 | 5.4 | 5.3 | 5.2 | 5.1 | 5.0 | 4.0 |
---|---|---|---|---|---|---|
快速导入 (TiDB Lightning) | Y | Y | Y | Y | Y | Y |
mydumper 逻辑导入 | 已废弃 | 已废弃 | 已废弃 | 已废弃 | 已废弃 | 已废弃 |
Dumpling 逻辑导入 | Y | Y | Y | Y | Y | Y |
事务 LOAD DATA |
Y | Y | Y | Y | Y | N 3 |
数据迁移工具 | Y | Y | Y | Y | Y | Y |
TiDB Binlog | Y | Y | Y | Y | Y | Y |
Change data capture (CDC) | Y | Y | Y | Y | Y | Y |
管理,可视化和工具
管理,可视化诊断和工具 | 5.4 | 5.3 | 5.2 | 5.1 | 5.0 | 4.0 |
---|---|---|---|---|---|---|
TiDB Dashboard | Y | Y | Y | Y | Y | Y |
SQL 诊断 | 实验特性 | 实验特性 | 实验特性 | 实验特性 | 实验特性 | 实验特性 |
Information schema | Y | Y | Y | Y | Y | Y |
Metrics schema | Y | Y | Y | Y | Y | Y |
Statements summary tables | Y | Y | Y | Y | Y | Y |
慢查询日志 | Y | Y | Y | Y | Y | Y |
TiUP 部署 | Y | Y | Y | Y | Y | Y |
Ansible 部署 | N | N | N | N | N | 已废弃 |
Kubernetes operator | Y | Y | Y | Y | Y | Y |
内置物理备份 | Y | Y | Y | Y | Y | Y |
Global Kill | 实验特性 | 实验特性 | 实验特性 | 实验特性 | 实验特性 | 实验特性 |
Lock View | Y | Y | Y | 实验特性 | 实验特性 | 实验特性 |
SHOW CONFIG |
实验特性 | 实验特性 | 实验特性 | 实验特性 | 实验特性 | 实验特性 |
SET CONFIG |
实验特性 | 实验特性 | 实验特性 | 实验特性 | 实验特性 | 实验特性 |
持续性能分析 | 实验特性 | 实验特性 | N | N | N | N |
Top SQL | 实验特性 | N | N | N | N | N |