TiDB——分布式 HTAP 数据库
TiDB 是一个开源的分布式 HTAP 数据库,兼容 MYSQL 协议。要理解它首先要了解 HTAP 是什么,从官方的描述上说:HTAP(Hybrid Transaction and Analytical Processing)是混合式事务和分析处理的数据库,具有纵向伸缩性,强一致性和高可用型。
那么什么是事务处理和分析处理的数据库呢?
OLTP/OLAP
应用程序通常使用索引中的某些键查找少量记录。根据用户的输入插入或更新记录。因为这些应用程序是交互式的,所以访问模式被称为在线事务处理(onine transaction processing,OLTP)。像博客的评论,游戏中的动作,通讯录中的联系人等基本访问模式与处理业务交易模式类似。
现在越来越多的数据库也开始用于做数据分析的,像一般地都不会是直接输出原数据,而是以某种维度“统计式”的输出数据源作为分析数据依据。通常这个数据式数据分析师(运营)所需要的。如公司季度总营收是多少,在总营收中散布不同的年龄段分别占多少营收等。为了区别 OLTP ,这个就被称之为在线分析处理(online analytic processing, OLAP)。
OLTP 与 OLAP 的区别如下面表格:
| 属性 | 事务处理系统(OLTP) | 分析处理系统(OLAP) |
|---|---|---|
| 主要读特性 | 基于键,每次查询返回少量记录 | 对大量记录进行汇总 |
| 主要写特性 | 随机访问,低延迟写入用户输入 | 批量导入(ETL)或事件流 |
| 典型使用场景 | 终端用户,通过网络应用程序 | 内部分析师,为决策提供支持 |
| 数据表征 | 最新的数据状态(当前时间点) | 随着时间而变化的所有事件历史 |
| 数据规模 | GB 到 TB | TB 到 PB |
(上述表格来源于《DDIA》)
TiDB 特性
-
纵向伸缩
TiDB 能很好的通过增加节点来拓展 SQL 处理和存储。这比传统的关系型数据库能加具有伸缩性,以及更加高效。
-
兼容 MySQL 语法
TiDB 可以像如 MySQL 5.7 那样工作的很好。你可以继续使用 MySQL 客户端现有的ku,你不需要更改你的应用程序代码。通过兼容性列表查看具体的兼容情况。
-
强一致性的分布式事务
TiDB 在内部将表切分为小的基于范围的块,我们称之为“区域”。每个区域的缺省大小大约为 100 MiB, TiDB 在内部使用两阶段提交,以确保以事务一致的方式维护区域。
-
云原生
TiDB 可以在云上部署——共有,私有,混合都行——简化部署、发放、操作和维护。
TiDB 的存储层,称为 TiKV。TiDB 平台的体系结构还允许 SQL 处理和存储以一种对云非常友好的方式相互独立地扩展。
-
最小化 ETL
TiDB 被设计为同时支持事务处理(OLTP)和分析处理(OLAP)工作负载。这意味着,虽然您可能已经在 MySQL上 进行了传统的事务处理,然后提取、转换和加载(ETL)数据到列存储中进行分析处理,但不再需要这个步骤了。
-
高可用
TiDB使用 Raft 共识算法来确保数据的高可用性,并在 Raft 组的整个存储中安全地复制。在发生故障时,Raft 组将自动为故障成员选举一个新的 leader,并在无需任何人工干预的情况下自修复 TiDB 集群。失败和自修复操作对应用程序也是透明的。
不支持 MySQL 的特性
在 MySQL 中常用的特性 TiDB 不支持的功能如下:
- 存储过程与函数
- 触发器
- 事件
- 自定义函数
- 外键约束
- 临时表
- 全文索引