TIDB学习总结
TIDB介绍
1、什么是TIDB
1.1 TIDB介绍
TiDB 是一个数据库,是一个开源分布式数据库,由PingCAP 公司设计开发,TiDB 兼容 MySQL,支持无限的水平扩展,具备强一致性和高可用性(支持事务)。TiDB 的目标是为 OLTP (Online Transactional Processing) 和 OLAP (Online Analytical Processing) 场景提供一站式的解决方案。
1.2 TIDB特性
1、兼容MYSQL
2、水平弹性扩展
3、支持事务
4、其他(一站式 HTAP(Hybrid Transactional/Analytical Processing,混合事务/分析处理) 解决方案,云原生 SQL 数据库)
2、TIDB架构
tidb架构图
tidb.png
2.1 TIKV
1、TiKV 负责存储数据,存储数据基本单位是 Region,每个 TiKV 节点负责管理多个 Region。
2、TiKV 使用 Raft 协议做复制,保证数据一致性和容灾。
3、使用RocksDB来进行落盘
4、 数据在多个 TiKV 之间的负载均衡由 PD 调度,以 Region 为单位调度。
底层用一个全局有序的分布式 Key-Value 引擎(LSM tree)
架构图:
tikv.png
持久化示意图:
持久化.png
存储规则
1、TiDB 对每个表分配一个 TableID,每一个索引都会分配一个 IndexID,每一行分配一个 RowID(如果表有整数型的 Primary Key,那么会用 Primary Key 的值当做 RowID),
2、其中 TableID 在整个集群内唯一,IndexID/RowID 在表内唯一,这些 ID 都是 int64 类型
3、每行数据按照如下规则进行编码成 Key-Value pair:
Key: tablePrefix{tableID}_recordPrefixSep{rowID} Value: [col1, col2, col3, col4]
4、对于 Index 数据,会按照如下规则编码成 Key-Value pair:
Key: tablePrefix{tableID}_indexPrefixSep{indexID}_indexedColumnsValue Value: rowID
示例
原数据:
1, "TiDB", "SQL Layer", 10
2, "TiKV", "KV Engine", 20
3, "PD", "Manager", 30
主键索引:
t10_r1 --> ["TiDB", "SQL Layer", 10]
t10_r2 --> ["TiKV", "KV Engine", 20]
t10_r3 --> ["PD", "Manager", 30]
唯一索引
t10_i1_10 --> 1
t10_i1_20 --> 2
t10_i1_30 --> 3
2.2 PDServer
Placement Driver (简称 PD) 是整个集群的管理模块,其主要工作有三个:
* 一是存储集群元信息(某个 Key 存储在哪个 TiKV 节点,维护的示region的信息,开始和结束节点,通过心跳来更新);
* 二是对 TiKV 集群进行调度和负载均衡(数据迁移、Raft group leader 迁移等);
* 三是分配全局唯一且递增的事务 ID。
常用的命令
设置pd路径,减少在命令参数
export PD_ADDR=[http://172.16.14.100:2379](http://172.16.14.100:2379/)
查看集群信息和健康状态
./pd-ctl cluster 与 ./pd-ctl health
查看和修改配置信息(包括备份数量等)
./pd-ctl config show all (./pd-ctl config show replication ) 与 ./pd-ctl config set max-replicas 2
查看有哪些tikv节点与有哪些region
./pd-ctl store 与 ./pd-ctl region
下线tikv节点
./pd-ctl store delete 1(下线tikv1)
新增副本
./pd-ctl operator add add-peer 1 2 (在 store 2 上新增 Region 1 的一个副本)
设置权重
./pd-ctl store weight 1 5 10
2.3 TIDB
1、负责接收 SQL 请求,处理 SQL 相关逻辑,通过 PD 找到所需数据的 TiKV 地址。
2、TiDB Server 是无状态的,本身不存储数据,只负责计算,可以无限水平扩展。
3、TiDB 节点可以通过负载均衡组件 (如 LVS、HAProxy 或者 F5)对外提供统一入口
TIDB SQL 层架构:
架构.png
执行流程
3.1查询语句
查询语句执行流程,如上。 注意:
1、通过sql解析,得到查询的startKey和endKey,将一次查询分成多个task。
具体为:SQL->多个dissql ->多个coprocessor(对region) -> 对应一个coprocessor task
2、tidb中会缓存region的信息,每次取回从缓存中取,没有的话才回去PD中寻找,会维持多个与tikv的链接
3、缓存是有默认失效时间的,默认是600秒超过600秒后会从PD中找
4、只会从leader中去查找数据
5、如果查询失败(region分裂或leader变化),则会更新缓存重新生成task查
3.2DDL语句执行流程
流程图:
流程图.png
注:
1、添加列时,不会修改tikv中的数据,在每次取值的时候赋值
2、删除列时,会异步执行job删除
3.3代码查看
基于2.3
1、regionCache,与startKey和endKey的查询,已经region失效时间长(table_reader.go 192 region_cache.go 665)
2、读region数据的时候选择的是leader还是replica(region_cache.go 298)
3、DDLWork的执行(ddl.go 442,domain.go 667)
4、添加字段之后的数据变化,及tikv中数据存储的结构(tablecodec.go 377)
5、获取key对应的TIKV,从TIKV中获取数据(region_cache.go 665,client.go 274)
6、一台tikv宕机后的情况
7、建立链接的过程
4、其他
整体架构.pngTiDB Binlog(导出、恢复)
TiDB Binlog 是一个用于收集 TiDB 的 binlog,需要部署Pump(收集sql信息) 和 Drainer(分析sql到下游渠道(kafka,mysql等))
TiDB Binlog 支持以下功能场景:
- 数据同步:同步 TiDB 集群数据到其他数据库
- 实时备份和恢复:备份 TiDB 集群数据,同时可以用于 TiDB 集群故障时恢复
参考:
[https://pingcap.com/docs-cn/v3.0/how-to/deploy/tidb-binlog/]
[https://pingcap.com/docs-cn/v3.0/reference/tidb-binlog-overview/](简介)
数据导入支持
Syncer 是一个数据导入工具,能方便地将 MySQL 的数据增量导入到 TiDB。
Syncer 可以部署在任一台可以连通对应的 MySQL 和 TiDB 集群的机器上。
syncer.png
参考:https://pingcap.com/docs-cn/v3.0/reference/tools/syncer/(问题)
TiSpark
TiSpark 作为 TiDB 中解决用户复杂 OLAP 需求的主要组件,将 Spark SQL 直接运行在 TiDB 存储层上,同时融合 TiKV 分布式集群的优势,并融入大数据社区生态。至此,TiDB 可以通过一套系统,同时支持 OLTP 与 OLAP,免除用户数据同步的烦恼。
TiDB Operator
TiDB Operator 提供在主流云基础设施(Kubernetes)上部署管理 TiDB 集群的能力。它结合云原生社区的容器编排最佳实践与 TiDB 的专业运维知识,集成一键部署、多集群混部、自动运维、故障自愈等能力,极大地降低了用户使用和管理 TiDB 的门槛与成本。
Mysql兼容
不支持的特性
- 存储过程与函数
- 触发器
- 事件
- 自定义函数
- 外键约束
- 全文函数与索引
- 空间函数与索引
- 非 utf8/utf8mb4 字符集
- BINARY 之外的排序规则
- 增加主键
- 删除主键
- SYS schema
- MySQL 追踪优化器
- XML 函数
- X Protocol
- Savepoints
- 列级权限
- CREATE TABLE tblName AS SELECT stmt 语法
- CREATE TEMPORARY TABLE 语法
- XA 语法(TiDB 内部使用两阶段提交,但并没有通过 SQL 接口公开)
- CHECK TABLE 语法
- CHECKSUM TABLE 语法
tidb生产服务器配置:
在Kubernetes上部署:https://pingcap.com/docs-cn/v3.0/tidb-in-kubernetes/deploy/prerequisites/
官方配置参考:https://pingcap.com/docs-cn/v3.0/how-to/deploy/hardware-recommendations/
配置.png附
学习文档地址:https://pingcap.com/docs-cn/
美团使用案例:https://tech.meituan.com/2018/11/22/mysql-pingcap-practice.html
Mobike使用案例:https://zhuanlan.zhihu.com/p/32350453
Explain介绍:https://pingcap.com/docs-cn/v3.0/reference/performance/understanding-the-query-execution-plan/