简介
TiDB 是 开源分布式关系型 数据库,在线事务处理,在线分析处理 融合型分布式数据库产品,具备水平扩容或者缩容、金融级高可用、实时 HTAP、云原生的分布式数据库、兼容 MySQL 5.7 协议和 MySQL 生态等重要特性。目标是为用户提供一站式 OLTP (Online Transactional Processing)、OLAP (Online Analytical Processing)、HTAP 解决方案。TiDB 适合高可用、强一致要求较高、数据规模较大等各种应用场景。
特性
- 分布式关系型数据,解决单机性能瓶颈的问题。
- 同时支持关系型数据库(事务,联表)和非关系型数据库(水平扩展,灵活,高性能)。
- 分布式事务的支持。
- 兼容myql的协议,支持几乎所有mysql sql语法,学习成本低。
- 分区非常方便,支持hash和range分区,使用起来和操作单表一样。
- 官方工具丰富,支持通过binlog的数据同步与mysql互为主从。
- 生态比较丰富,tiflash支持列式存储,tispark可以使用tidb作为存储引擎同时使用spark作为计算引擎。
架构
组件
| 组件名称 | 组件作用 | 作用 |
|---|---|---|
| tidb | 连接层 | 负责与客户端的连接,sql的词法解析,逻辑层物理层优化,与pd进行交互获取数据可能在哪些region以及这些region分布在哪里tikv node上,与tikv交互区获取数据 |
| tikv | 存储层 | 负责数据存储,最小存储单元为region,采用rocksdb作为存储。 |
| PD | 调度器 | 1 负责region信息的存储,数据副本的维护,在同一个region上key是顺序存在的,每一个 Region 都可以用 [StartKey,EndKey) 这样一个左闭右开区间来描述,,通过range的方式维护在PD中。2 分布式事务id的生成等作用。 |
| tiflash | 列式存储 | 非阻塞式负责同步tikv的数据,tidb可以自动选择行存储还是列存储,也可以使用hint注解现实选择 |
与mysql对比
| mysql | tidb | 备注 | |
|---|---|---|---|
| 架构 | 单机 | 分布式 | tidb的sql layer在tidb层完成了sql语法解析,逻辑和物理层的优化,生成执行计划,通过分布式协调器请求tikv获取数据,并最终通过执行器进行数据的合并,排序,分页,聚合运算等操作,将数据返回。 |
| 存储 | 单机 | 分布式 | tikv的mvcc版本控制,在开启事务会从tidb获取一个全局唯一的ts作为版本号。 |
| 索引 | b+tree | Rocksdb 分布式leveldb lsm | tidb中使用kv作为存储:主键索引和数据的存储:PK 具有唯一性,所以我们可以用 t + Table ID + PK =Data 来唯一表示一行数据唯一索引的存储: i + Index ID = PK,通过pk从主键索引中寻找数据。 |
| 事物 | MVCC | 通过undolog,redulog实现 | 分布式事务 |
使用特点
语法
兼容mysql大部分语法,业务上增删拆改基本没有区别
优势
分布式数据库,发挥集群性能,支持异地多活,不用代码支持分表逻辑
管理与监控
- grafana 监控集群性能,磁盘,内存,cpu,tps,qps等等
- 支持TiUniManager用于集群的管理
- 支持dashboard用于监控管理