【TiDB 4.0 PCTA 学习笔记】- 2.4 Behavior Differences Between MySQL and TiDB(TiDB 与 MySQL 的差异)@4班+小明

课程名称:

2.4 Behavior Differences Between MySQL and TiDB(TiDB 与 MySQL 的差异)
2.5.1 The Lifecycle of a SQL Statement(在 TiDB 中一条 SQL 的生命周期)

学习时长:30min

课程内容:

2.4
一、兼容性概览

protocol(MySQL 5.7client/server protocol,100% compatible)
客户端包括:PHPMyAdmin、Navicat、MySQL workbench
数据迁移工具包括:mysqldump、mydumper/myloder
Connector:MySQL connectors
Syntax(Most syntax in both MySQL 5.7 and 8.0,highly compatible)
DDL
DML
大多数的事务和Locking
Prepared
administration
Semantic(The behaviors of some features are different/unsupported)
有一部分功能未实现:
主要由于分布式环境下不太方便实现,或者是已经设计但未能完全实现,亦或是因为投入产出比较低有别的方法可以绕过关键问题
有一部分与MySQL有区别:
auto_increment和storage engine等
二、与MySQL有区别的主要特性

不支持的特性
存储过程
自定义函数
触发器
事件
Foreign key constraints/Check constraints
AUTO_INCREMENT
无法加到已经存在的列上
单个TiDB节点的集群上可以保证唯一性、自增性和连续性(连续性是建立在单个TiDB实例无宕机情况)
多个TiDB节点的集群里只能保证唯一性
索引
不支持全文索引、空间索引等
主键
利用唯一索引模拟主键
major
不支持同一语句修改两个列的语句
不支持某一列的有损变更
隔离级别
TiDB是Snapshot 隔离级别
只能读到事务开始时已经提交的数据,无法读取未提交或启动后其他事务提交的
Read Committed,只能在悲观事务下设置
Analyze Table
TiDB会重构统计信息
Views
TiDB是只读的,不支持Insert/Update/Delete
Storage Engines
TiDB只支持在配置上设置底层的存储引擎
Charsets
TiDB只支持utf8、utf8mb4、ascii、latin1和binary
Execution Plan

2.5.1
TiDB 整体架构
与传统的单机数据库相比,TiDB 具有以下优势:

纯分布式架构,拥有良好的扩展性,支持弹性的扩缩容
支持 SQL,对外暴露 MySQL 的网络协议,并兼容大多数 MySQL 的语法,在大多数场景下可以直接替换 MySQL
默认支持高可用,在少数副本失效的情况下,数据库本身能够自动进行数据修复和故障转移,对业务透明
支持 ACID 事务,对于一些有强一致需求的场景友好,例如:银行转账
具有丰富的工具链生态,覆盖数据迁移、同步、备份等多种场景

TiDB Server:SQL 层,对外暴露 MySQL 协议的连接 endpoint,负责接受客户端的连接,执行 SQL 解析和优化,最终生成分布式执行计划。TiDB 层本身是无状态的,实践中可以启动多个 TiDB 实例,通过负载均衡组件(如 LVS、HAProxy 或 F5)对外提供统一的接入地址,客户端的连接可以均匀地分摊在多个 TiDB 实例上以达到负载均衡的效果。TiDB Server 本身并不存储数据,只是解析 SQL,将实际的数据读取请求转发给底层的存储节点 TiKV(或 TiFlash)。
PD Server:整个 TiDB 集群的元信息管理模块,负责存储每个 TiKV 节点实时的数据分布情况和集群的整体拓扑结构,提供 TiDB Dashboard 管控界面,并为分布式事务分配事务 ID。PD 不仅存储元信息,同时还会根据 TiKV 节点实时上报的数据分布状态,下发数据调度命令给具体的 TiKV 节点,可以说是整个集群的“大脑”。此外,PD 本身也是由至少 3 个节点构成,拥有高可用的能力。建议部署奇数个 PD 节点。
存储节点
TiKV Server:负责存储数据,从外部看 TiKV 是一个分布式的提供事务的 Key-Value 存储引擎。存储数据的基本单位是 Region,每个 Region 负责存储一个 Key Range(从 StartKey 到 EndKey 的左闭右开区间)的数据,每个 TiKV 节点会负责多个 Region。TiKV 的 API 在 KV 键值对层面提供对分布式事务的原生支持,默认提供了 SI (Snapshot Isolation) 的隔离级别,这也是 TiDB 在 SQL 层面支持分布式事务的核心。TiDB 的 SQL 层做完 SQL 解析后,会将 SQL 的执行计划转换为对 TiKV API 的实际调用。所以,数据都存储在 TiKV 中。另外,TiKV 中的数据都会自动维护多副本(默认为三副本),天然支持高可用和自动故障转移。
TiFlash:TiFlash 是一类特殊的存储节点。和普通 TiKV 节点不一样的是,在 TiFlash 内部,数据是以列式的形式进行存储,主要的功能是为分析型的场景加速。
SQL语句—>语法解析–>合法性验证–>制定查询计划–>优化查询计划–>根据计划生成查询器–>执行并返回结果