TiDB基础知识

简介

TiDB 是一款开源分布式关系型数据库,同时支持在线事务处理(OLTP)与在线分析处理(OLAP),具备水平扩容或者缩容、金融级高可用、实时 HTAP、云原生的分布式数据库、兼容 MySQL 协议和 MySQL 生态等重要特性。
Github: https://github.com/pingcap/tidb
官网: https://cn.pingcap.com/
文档: https://docs.pingcap.com/zh/tidb/stable/overview

使用用户

核心特性

  1. 一键水平扩缩容
    可按需对计算、存储分别进行在线扩容或者缩容,扩容或者缩容过程中对应用运维人员透明。
  2. 金融级高可用
    数据采用多副本存储,确保数据强一致性且少数副本发生故障时不影响数据的可用性。
  3. 实时 HTAP
    提供行存储引擎 TiKV、列存储引擎 TiFlash 两款存储引擎,确保TiKV 和 TiFlash 之间的数据强一致
  4. 云原生的分布式数据库
    专为云而设计的分布式数据库,通过 TiDB Operator 可在公有云、私有云、混合云中实现部署工具化、自动化。
  5. 兼容 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)、数据类型和索引 
  • 非 asciilatin1binaryutf8utf8mb4gbk 的字符集
  • 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 语法
  • 横向派生表