TIDB 是什么
官网这么说的,TiDB 是 PingCAP 公司自主设计、研发的开源分布式关系型数据库,是一款同时支持在线事务处理与在线分析处理 (Hybrid Transactional and Analytical Processing, HTAP) 的融合型分布式数据库产品,具备水平扩容或者缩容、金融级高可用、实时 HTAP、云原生的分布式数据库、兼容 MySQL 协议和 MySQL 生态等重要特性,支持在本地和云上部署。
TiDB是国产的pingCAP公司 2016 年 12 月发布的。
我的理解,TiDB是这样一个数据库
- 第一,它是一个分布式数据库,所以可以水平拓展。可以动态的拓展TIDB和 TiStorrage
- 第二,它支持支持传统的ACID的事务事务,据说是100% 支持
- 第三,能支持大部分OLAP的场景,并且复杂的OLAP场景可以使用 TiSpark(貌似用了新版本已经建议试用Tiflash了,TiFlash 的速度 比TiSpark 快 )
- 第四,它兼容mysql协议,也可以直接用mysql 客户端接连TiDB,TIDB的用法及mysql用法几乎一致,甚至可用当做一个从库加入mysql主从集群。
差异详情见差异文档: 与 MySQL 兼容性对比 | PingCAP 文档中心
有人实际测试过,在普通PC机上,TIDB单机性能大概是mysql的50%(这句话只供参考,例子中情景很单一,并且硬件限制,还是单机)
TiDB架构图
PD类似一个协调中心,存储这元数据,它需要时高可用的,使用的Raft协议保证数据的一致性。
TiD是一个分布式数据库实例,接受客户端sql,更具PD元数据信息,决定向哪些 Storrage请求数据。
TiKV 是存键值对的工具,提成用的RockedDB,是TiDB存储数据的一种方式,RocksDB是一个可持久化的键值数据库。
TiFlash 是列存存储工具,底层用clickhouse,是TiDB存储数据的一种方式。TiDb会智能选着使用哪种储存引擎。
架构图的最左边表明它支持mysql协议。
文档地址: TiDB 整体架构 | PingCAP 文档中心
TiKV架构图
以region为单位来做的数据的管理,数据分片和副本
region里面默认大小是64MB,一定key范围的数据划分到同一个region,PD也记录着这些范围信息
TiFlash架构图
TiDB的水平拓展能力
当storage 动态变化的时候,PD会自动维持 storage里面的数据
当TiDB leader宕机的时候,会自动选举出新的的leader.
TiKV的范围查询原理
虽然它使用KV存储,但是按照key是排序,然后分region存储的。
储存数大概是这样: tableId+rowID 作为key,整行数据作为值,并且是按照rowId排序以后分region存储的。
储存索引大概是这样:tableId+ indexID作为key+索引列Id,索引列的值排序后的数组作为值
TiDB安装
测试环境使用TiUp工具安装: TiDB 数据库快速上手指南 | PingCAP 文档中心
TIDB独有的用法
- 可以通过 set @@tidb-snapshot="过去的时间点",然后查询到过去的时间
使用 set @@tidb-snapshot="" 以后查看的是最新版本
TiDB的事务支持
TiDB是支持ACID强事务的,也是使用MVCC并发模型
TiDB使用了percolator事务模型,并做了大量优化,事务使用的乐观锁,适合并发高冲突不高的情况,并发冲突高的情况会大量重试,降低性能。
数据迁移
详情见TIDB文档: 数据迁移概述 | PingCAP 文档中心
- 全量数据迁移。
- 数据导入:使用 TiDB Lightning 将 Aurora Snapshot,CSV 文件或 SQL dump 文件的数据全量导入到 TiDB 集群。
- 数据导出:使用 Dumpling 将 TiDB 集群的数据全量导出为 CSV 文件或 SQL dump 文件,从而更好地配合从 MySQL 数据库或 MariaDB 数据库进行数据迁移。
- TiDB DM (Data migration) 也提供了适合小规模数据量数据库(例如小于 1 TiB)的全量数据迁移功能。
- 快速初始化 TiDB 集群:TiDB Lightning 提供的快速导入功能可以实现快速初始化 TiDB 集群的指定表的效果。请注意,使用快速初始化 TiDB 集群的功能对 TiDB 集群的影响极大,在进行初始化的过程中,TiDB 集群不支持对外访问。
- 增量数据迁移:使用 TiDB DM 从 MySQL,MariaDB 或 Aurora 同步 Binlog 到 TiDB,该功能可以极大降低业务迁移过程中停机窗口时间。