TiDB基础知识
TiDB基础知识
cmyang简介
TiDB 是一款开源分布式关系型数据库,同时支持在线事务处理(OLTP)与在线分析处理(OLAP),具备水平扩容或者缩容、金融级高可用、实时 HTAP、云原生的分布式数据库、兼容 MySQL 协议和 MySQL 生态等重要特性。
Github: https://github.com/pingcap/tidb
官网: https://cn.pingcap.com/
文档: https://docs.pingcap.com/zh/tidb/stable/overview
使用用户
核心特性
- 一键水平扩缩容
可按需对计算、存储分别进行在线扩容或者缩容,扩容或者缩容过程中对应用运维人员透明。 - 金融级高可用
数据采用多副本存储,确保数据强一致性且少数副本发生故障时不影响数据的可用性。 - 实时 HTAP
提供行存储引擎 TiKV、列存储引擎 TiFlash 两款存储引擎,确保TiKV 和 TiFlash 之间的数据强一致 - 云原生的分布式数据库
专为云而设计的分布式数据库,通过 TiDB Operator 可在公有云、私有云、混合云中实现部署工具化、自动化。 - 兼容 MySQL 协议和 MySQL 生态
兼容 MySQL 协议、MySQL 常用的功能、MySQL 生态,应用无需或者修改少量代码即可从 MySQL 迁移到 TiDB。提供丰富的数据迁移工具帮助应用便捷完成数据迁移。
术语解释
术语 | 解释 |
---|---|
TiDB | TiDB数据库 |
TiKV | 数据库行存储引擎 |
TiFlash | 数据库列存储引擎 |
TiDB Operator | Kubernetes 上的 TiDB 集群自动运维系统 |
TiUP | 包管理器,下载、更新、卸载组件 |
DM | 数据迁移工具 |
Lightning | 大数据量迁移工具 |
体系架构
TiDB Server
- 对外暴露 MySQL 协议的连接 endpoint,负责接受客户端的连接
- 执行 SQL 解析、编译和优化,最终生成执行计划
- SQL语句的执行
- 在线DDL的执行
- 垃圾回收,老版本数据的回收
- TiDB Server 本身并不存储数据,只是解析 SQL,将实际的数据读取请求转发给底层的存储节点 TiKV(或 TiFlash)
PD Server
- Placement Driver,集群控制中枢
- 元信息管理模块,存储每个 TiKV 节点实时的数据分布情况和集群的整体拓扑结构
- 分配全局ID和事务ID
- 生成全局时间戳TSO
- 收集存储集群健康信息,协调调度集群
- 提供TiDB Dashboard 服务,负责监控整个集群
TiKV
- 数据持久化,RocksDB存储引擎
- 分布式事务支持
- 副本的强一致性和高可用性
- MVCC 多版本并发控制
- Coprocessor 算子下推,SQL一部分的计算放在TiKV节点,比如数据过滤,部分聚合,最大值,最小值等,来减少计算数据量
TiFlash
- 列式存储提高分析查询效率
- 支持强一致性和实时性
- 业务隔离,行存与列存互不干扰
- 智能选择,优化器模型根据sql特点和请求分类,自动选择走行存还是列存
TiUP
在各种系统软件和应用软件的安装管理中,包管理器均有着广泛的应用,包管理工具的出现大大简化了软件的安装和升级维护工作。例如,几乎所有使用 RPM 的 Linux 都会使用 yum 来进行包管理,而 Anaconda 则可以非常方便地管理 Python 的环境和相关软件包。
TiUP是TiDB的包管理器,管理着 TiDB 生态下众多的组件,如 TiDB、PD、TiKV 等。用户想要运行 TiDB 生态中任何组件时,只需要执行 TiUP 一行命令即可
数据迁移
TiDB 提供了丰富的数据迁移相关的工具,用于全量迁移、增量迁移、备份恢复、数据同步等多种场景。
工具 | 使用场景 |
---|---|
TiDB Data Migration (DM) | 用于将数据从与 MySQL 协议兼容的数据库迁移到 TiDB |
TiDB Lightning | 用于将数据全量导入到 TiDB |
Dumpling | 用于将数据从 MySQL/TiDB 进行全量导出 |
TiCDC | 通过拉取 TiKV 变更日志实现的 TiDB 增量数据同步工具, 具有将数据还原到与上游任意 TSO 一致状态的能力,支持其他系统订阅数据变更 |
Backup & Restore (BR) | 通过对大数据量的 TiDB 集群进行数据备份和恢复,实现数据迁移 |
sync-diff-inspector | 用于校验 MySQL/TiDB 中两份数据的一致性 |
监控框架
TiDB 使用开源时序数据库 Prometheus 作为监控和性能指标信息存储方案,使用 Grafana 作为可视化组件进行展示。
Prometheus 提供了多个组件供用户使用。目前,TiDB 使用了以下组件:
- Prometheus Server:用于收集和存储时间序列数据。
- Client 代码库:用于定制程序中需要的 Metric。
- Alertmanager:用于实现报警机制。
与 MySQL 兼容性对比
TiDB 高度兼容 MySQL 协议,以及 MySQL 5.7 和 MySQL 8.0 常用的功能及语法。MySQL 生态中的系统工具(PHPMyAdmin、Navicat、MySQL Workbench、DBeaver 和其他工具)、客户端等均适用于 TiDB。
不支持的功能特性
- 存储过程与函数
- 触发器
- 事件
- 自定义函数
- 全文语法与索引
- 空间类型的函数(即
GIS
/GEOMETRY
)、数据类型和索引 - 非
ascii
、latin1
、binary
、utf8
、utf8mb4
、gbk
的字符集 - SYS schema
- MySQL 追踪优化器
- XML 函数
- X-Protocol
- 列级权限
XA
语法(TiDB 内部使用两阶段提交,但并没有通过 SQL 接口公开)CREATE TABLE tblName AS SELECT stmt
语法CHECK TABLE
语法CHECKSUM TABLE
语法REPAIR TABLE
语法OPTIMIZE TABLE
语法HANDLER
语句CREATE TABLESPACE
语句- “Session Tracker: 将 GTID 上下文信息添加到 OK 包中”
- 降序索引
SKIP LOCKED
语法- 横向派生表