万字讲明白TiDB数据库丨【绽放吧!数据库】

举报
liuzhen007 发表于 2021/08/08 16:04:05 2021/08/08
【摘要】 前言去年5月28日,PingCAP 正式发布了 TiDB 4.0.0 的版本。上个月末,TiDB 4.0.14 发布了,主要完成了如下功能提升:1. 对于 point get 或 batch point get 算子,在唯一索引写入过程中,将悲观锁 LOCK 记录转化为 PUT 记录;2. 支持 MySQL 的系统变量 init_connect 及其相关功能;3. 支持稳定结果模式,使查询结...

前言

去年5月28日,PingCAP 正式发布了 TiDB 4.0.0 的版本。上个月末,TiDB 4.0.14 发布了,主要完成了如下功能提升:1. 对于 point get 或 batch point get 算子,在唯一索引写入过程中,将悲观锁 LOCK 记录转化为 PUT 记录;2. 支持 MySQL 的系统变量 init_connect 及其相关功能;3. 支持稳定结果模式,使查询结果更稳定。
4. 支持将函数 json_unquote() 下推到 TiKV;5. 使 SQL 计划管理 (SPM) 不受字符集的影响。今天,我们就来聊一聊TiDB。

正文

TiDB 信息介绍

TiDB 是 PingCAP 公司自主设计、研发的开源分布式关系型数据库,是一款同时支持在线事务处理与在线分析处理 (Hybrid Transactional and Analytical Processing, HTAP) 的融合型分布式数据库产品,具备水平扩容或者缩容、金融级高可用、实时 HTAP、云原生的分布式数据库、兼容 MySQL 5.7 协议和 MySQL 生态等重要特性。目标是为用户提供一站式 OLTP (Online Transactional Processing)、OLAP (Online Analytical Processing)、HTAP 解决方案。TiDB 适合高可用、强一致要求较高、数据规模较大等各种应用场景。

五大核心特性

1. 一键水平扩容或者缩容

得益于 TiDB 存储计算分离的架构的设计,可按需对计算、存储分别进行在线扩容或者缩容,扩容或者缩容过程中对应用运维人员透明。

2. 金融级高可用

数据采用多副本存储,数据副本通过 Multi-Raft 协议同步事务日志,多数派写入成功事务才能提交,确保数据强一致性且少数副本发生故障时不影响数据的可用性。可按需配置副本地理位置、副本数量等策略满足不同容灾级别的要求。

3. 实时 HTAP

提供行存储引擎 TiKV、列存储引擎 TiFlash 两款存储引擎,TiFlash 通过 Multi-Raft Learner 协议实时从 TiKV 复制数据,确保行存储引擎 TiKV 和列存储引擎 TiFlash 之间的数据强一致。TiKV、TiFlash 可按需部署在不同的机器,解决 HTAP 资源隔离的问题。

4. 云原生的分布式数据库

专为云而设计的分布式数据库,通过 TiDB Operator 可在公有云、私有云、混合云中实现部署工具化、自动化。

5. 兼容 MySQL 5.7 协议和 MySQL 生态

兼容 MySQL 5.7 协议、MySQL 常用的功能、MySQL 生态,应用无需或者修改少量代码即可从 MySQL 迁移到 TiDB。提供丰富的数据迁移工具帮助应用便捷完成数据迁移。

四大核心应用场景

1. 对数据一致性及高可靠、系统高可用、可扩展性、容灾要求较高的金融行业属性的场景

众所周知,金融行业对数据一致性及高可靠、系统高可用、可扩展性、容灾要求较高。传统的解决方案是同城两个机房提供服务、异地一个机房提供数据容灾能力但不提供服务,此解决方案存在以下缺点:资源利用率低、维护成本高、RTO (Recovery Time Objective) 及 RPO (Recovery Point Objective) 无法真实达到企业所期望的值。TiDB 采用多副本 + Multi-Raft 协议的方式将数据调度到不同的机房、机架、机器,当部分机器出现故障时系统可自动进行切换,确保系统的 RTO <= 30s 及 RPO = 0。

2. 对存储容量、可扩展性、并发要求较高的海量数据及高并发的 OLTP 场景

随着业务的高速发展,数据呈现爆炸性的增长,传统的单机数据库无法满足因数据爆炸性的增长对数据库的容量要求,可行方案是采用分库分表的中间件产品或者 NewSQL 数据库替代、采用高端的存储设备等,其中性价比最大的是 NewSQL 数据库,例如:TiDB。TiDB 采用计算、存储分离的架构,可对计算、存储分别进行扩容和缩容,计算最大支持 512 节点,每个节点最大支持 1000 并发,集群容量最大支持 PB 级别。

3. Real-time HTAP 场景

随着 5G、物联网、人工智能的高速发展,企业所生产的数据会越来越多,其规模可能达到数百 TB 甚至 PB 级别,传统的解决方案是通过 OLTP 型数据库处理在线联机交易业务,通过 ETL 工具将数据同步到 OLAP 型数据库进行数据分析,这种处理方案存在存储成本高、实时性差等多方面的问题。TiDB 在 4.0 版本中引入列存储引擎 TiFlash 结合行存储引擎 TiKV 构建真正的 HTAP 数据库,在增加少量存储成本的情况下,可以同一个系统中做联机交易处理、实时数据分析,极大地节省企业的成本。

4. 数据汇聚、二次加工处理的场景

当前绝大部分企业的业务数据都分散在不同的系统中,没有一个统一的汇总,随着业务的发展,企业的决策层需要了解整个公司的业务状况以便及时做出决策,故需要将分散在各个系统的数据汇聚在同一个系统并进行二次加工处理生成 T+0 或 T+1 的报表。传统常见的解决方案是采用 ETL + Hadoop 来完成,但 Hadoop 体系太复杂,运维、存储成本太高无法满足用户的需求。与 Hadoop 相比,TiDB 就简单得多,业务通过 ETL 工具或者 TiDB 的同步工具将数据同步到 TiDB,在 TiDB 中可通过 SQL 直接生成报表。

基本功能

1. 数据类型
数值类型:BIT、BOOL|BOOLEAN、SMALLINT、MEDIUMINT、INT|INTEGER、BIGINT、FLOAT、DOUBLE、DECIMAL。

日期和时间类型:DATE、TIME、DATETIME、TIMESTAMP、YEAR。

字符串类型:CHAR、VARCHAR、TEXT、TINYTEXT、MEDIUMTEXT、LONGTEXT、BINARY、VARBINARY、BLOB、TINYBLOB、MEDIUMBLOB、LONGBLOB、ENUM、SET。

JSON 类型。

2. 运算符
算术运算符、位运算符、比较运算符、逻辑运算符、日期和时间运算符等。

字符集:UTF8、UTF8MB4、BINARY、ASCII、LATIN1。

排序规则:UTF8MB4_GENERAL_CI、UTF8MB4_GENERAL_BIN、UTF8_GENERAL_CI、UTF8_GENERAL_BIN、BINARY。

3. 函数
控制流函数、字符串函数、日期和时间函数、位函数、数据类型转换函数、数据加解密函数、压缩和解压函数、信息函数、JSON 函数、聚合函数、窗口函数等。

4. SQL 语句
完全支持标准的 Data Definition Language (DDL) 语句,例如:CREATE、DROP、ALTER、RENAME、TRUNCATE 等。

完全支持标准的 Data Manipulation Language (DML) 语句,例如:INSERT、REPLACE、SELECT、Subqueries、UPDATE、LOAD DATA 等。

完全支持标准的 Transactional and Locking 语句,例如:START TRANSACTION、COMMIT、ROLLBACK、SET TRANSACTION 等。

完全支持标准的 Database Administration 语句,例如:SHOW、SET 等。

完全支持标准的 Utility 语句,例如:DESCRIBE、EXPLAIN、USE 等。

完全支持 SQL GROUP BY 和 ORDER BY 子语句。

完全支持标准 SQL 语法的 LEFT OUTER JOIN 和 RIGHT OUTER JOIN。

完全支持标准 SQL 要求的表和列别名。

5. 分区表
支持 Range 分区。

支持 Hash 分区。

6. 视图
支持普通视图。

7. 约束
支持非空约束。

支持主键约束。

支持唯一约束。

8. 安全
支持基于 RBAC (role-based access control) 的权限管理。

支持密码管理。

支持通信、数据加密。

支持 IP 白名单。

支持审计功能。

9. 工具
支持快速备份功能。

支持通过工具从 MySQL 迁移数据到 TiDB。

支持通过工具部署、运维 TiDB。

TiDB 本地部署

TiDB 是一个分布式系统。最基础的 TiDB 测试集群通常由 2 个 TiDB 实例、3 个 TiKV 实例、3 个 PD 实例和可选的 TiFlash 实例构成。通过 TiUP Playground,可以快速搭建出上述的一套基础测试集群。这里以 linux 系统为例进行说明,其实在 mac 也是支持的。

1. 下载并安装 TiUP,命令如下:

curl --proto '=https' --tlsv1.2 -sSf https://tiup-mirrors.pingcap.com/install.sh | sh

如果有如下执行结果,表示安装成功。

root@ubuntu tools# curl --proto '=https' --tlsv1.2 -sSf https://tiup-mirrors.pingcap.com/install.sh | sh
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 7040k  100 7040k    0     0  5425k      0  0:00:01  0:00:01 --:--:-- 5424k
WARN: adding root certificate via internet: https://tiup-mirrors.pingcap.com/root.json
You can revoke this by remove /root/.tiup/bin/7b8e153f2e2d0928.root.json
Successfully set mirror to https://tiup-mirrors.pingcap.com
Detected shell: bash
Shell profile:  /root/.bash_profile
/root/.bash_profile has been modified to add tiup to PATH
open a new terminal or source /root/.bash_profile to use it
Installed path: /root/.tiup/bin/tiup
===============================================
Have a try:     tiup playground
===============================================

2. 更新全局环境变量,因为 TiUP 安装完成后会提示对应 profile 文件的绝对路径。在执行以下 source 命令前,需要根据 profile 文件的实际位置修改命令。

执行命令如下:

source /root/.bash_profile

3. 启动集群。

直接运行 tiup playground 命令会运行最新版本的 TiDB 集群,其中 TiDB、TiKV、PD 和 TiFlash 实例各 1 个,命令如下:

tiup playground

同时,我们也可以指定 TiDB 版本以及各组件实例个数,命令类似于:

tiup playground v4.0.14 --db 2 --pd 3 --kv 3 --monitor

执行过程如下:

root@ubuntu tools# tiup playground v4.0.14 --db 2 --pd 3 --kv 3 --monitor
Starting component `playground`: /root/.tiup/components/playground/v1.5.4/tiup-playground v4.0.14 --db 2 --pd 3 --kv 3 --monitor
Using the version v4.0.14 for version constraint "v4.0.14".

If you'd like to use a TiDB version other than v4.0.14, cancel and retry with the following arguments:
    Specify version manually:   tiup playground <version>
    Specify version range:      tiup playground ^5
    The nightly version:        tiup playground nightly

Playground Bootstrapping...
The component `prometheus` version v4.0.14 is not installed; downloading from repository.
download https://tiup-mirrors.pingcap.com/prometheus-v4.0.14-linux-amd64.tar.gz 
download https://tiup-mirrors.pingcap.com/prometheus-v4.0.14-linux-amd64.tar.gz 
download https://tiup-mirrors.pingcap.com/prometheus-v4.0.14-linux-amd64.tar.gz 
download https://tiup-mirrors.pingcap.com/prometheus-v4.0.14-linux-amd64.tar.gz 
download https://tiup-mirrors.pingcap.com/prometheus-v4.0.14-linux-amd64.tar.gz 
download https://tiup-mirrors.pingcap.com/prometheus-v4.0.14-linux-amd64.tar.gz 
download https://tiup-mirrors.pingcap.com/prometheus-v4.0.14-linux-amd64.tar.gz 
download https://tiup-mirrors.pingcap.com/prometheus-v4.0.14-linux-amd64.tar.gz
。。。。。。

上述命令会在本地下载并启动某个版本的集群(例如 v4.0.14),--monitor 表示同时部署监控组件。最新版本可以通过执行 tiup list tidb 来查看。运行结果将显示集群的访问方式,输出如下结果,表示数据库相关服务已经启动成功:

Waiting for tiflash instances ready
127.0.0.1:3930 ... Done
CLUSTER START SUCCESSFULLY, Enjoy it ^-^
To connect TiDB: mysql --host 127.0.0.1 --port 4000 -u root -p (no password) --comments
To connect TiDB: mysql --host 127.0.0.1 --port 4001 -u root -p (no password) --comments
To view the dashboard: http://127.0.0.1:2379/dashboard
PD client endpoints: [127.0.0.1:2379 127.0.0.1:2382 127.0.0.1:2384]
To view the Prometheus: http://127.0.0.1:9090
To view the Grafana: http://127.0.0.1:35822

4. 新开启一个 session 以访问 TiDB 数据库。

使用 TiUP client 连接 TiDB:

tiup client

会出现如下界面

此时,让我们选择连接的终端,因为在上一个命令中,我们启动了两个数据库终端,我们选择第一个,回车!

然后,我们进入了如下界面:

root@ubuntu ~# tiup client
The component `client` version  is not installed; downloading from repository.
download https://tiup-mirrors.pingcap.com/client-v1.5.4-linux-amd64.tar.gz 2.02 Mdownload https://tiup-mirrors.pingcap.com/client-v1.5.4-linux-amd64.tar.gz 4.30 Mdownload https://tiup-mirrors.pingcap.com/client-v1.5.4-linux-amd64.tar.gz 4.59 MiB / 4.59 MiB 100.00% 20.86 MiB/s
Starting component `client`: /root/.tiup/components/client/v1.5.4/tiup-client
Connected with driver mysql (5.7.25-TiDB-v4.0.14)
Type "help" for help.

my:root@127.0.0.1:4000=>  

当然,也可使用 MySQL 客户端连接 TiDB:

mysql --host 127.0.0.1 --port 4000 -u root

5. 通过 http://127.0.0.1:9090 访问 TiDB 的 Prometheus 管理界面。

6. 通过 http://127.0.0.1:2379/dashboard 访问 TiDB Dashboard 页面,默认用户名为 root,密码为空。

7. 将数据加载到 TiFlash 进行分析,当然,这一步是可选的,毕竟刚启动,数据库还没有什么可用数据,分析什么呢?

8. 测试完成之后,可以通过执行以下步骤来清理集群:

通过按下 ctrl + c 键停掉进程,也可以执行以下命令:

tiup clean --all

工具及生态

一个产品或者服务要想赢得市场,必须具备一定的生态环境。接下来,我们就聊一聊 TiDB 数据库的生态工具的功能以及它们之间的替代关系。

1. 全量导出

Dumpling 是一个用于从 MySQL/TiDB 进行全量逻辑导出的工具。基本信息:Dumpling 的输入:MySQL/TiDB 集群;Dumpling 的输出:SQL/CSV 文件;适用 TiDB 版本:所有版本;Kubernetes 支持:尚未支持。

2. 全量导入

TiDB Lightning 是一个用于将全量数据导入到 TiDB 集群的工具。使用 TiDB Lightning 导入数据到 TiDB 时,有三种模式:

1)local 模式:TiDB Lightning 将数据解析为有序的键值对,并直接将其导入 TiKV。这种模式一般用于导入大量的数据(TB 级别)到新集群,但在数据导入过程中集群无法提供正常的服务。
2)importer 模式:和 local 模式类似,但是需要部署额外的组件 tikv-importer 协助完成键值对的导入。对于 4.0 以上的目标集群,请优先使用 local 模式进行导入。
3)tidb 模式:以 TiDB/MySQL 作为后端,这种模式相比 local 和 importer 模式的导入速度较慢,但是可以在线导入,同时也支持将数据导入到 MySQL。

基本信息:

1)TiDB Lightning 的输入:Dumpling 输出文件、其他格式兼容的 CSV 文件。
2)适用 TiDB 版本:v2.1 及以上。
3)Kubernetes 支持:使用 TiDB Lightning 快速恢复 Kubernetes 上的 TiDB 集群数据。

3. 备份和恢复

BR 是一个对 TiDB 进行分布式备份和恢复的工具,可以高效地对大数据量的 TiDB 集群进行数据备份和恢复。

基本信息:

1)备份输出和恢复输入的文件类型:SST + backupmeta 文件。
2)适用 TiDB 版本:v3.1 及 v4.0。
3)Kubernetes 支持:使用 BR 工具备份 TiDB 集群数据到兼容 S3 的存储, 使用 BR 工具恢复 S3 兼容存储上的备份数据。

4. TiDB 增量日志同步

TiDB Binlog 是收集 TiDB 的增量 binlog 数据,并提供准实时同步和备份的工具。该工具可用于 TiDB 集群间的增量数据同步,如将其中一个 TiDB 集群作为另一个 TiDB 集群的从集群。

基本信息:

1)TiDB Binlog 的输入:TiDB 集群。
2)TiDB Binlog 的输出:TiDB 集群、MySQL、Kafka 或者增量备份文件。
3)适用 TiDB 版本:v2.1 及以上。
4)Kubernetes 支持:TiDB Binlog 运维文档,Kubernetes 上的 TiDB Binlog Drainer 配置。

5. 数据迁入
TiDB Data Migration (DM) 是将 MySQL/MariaDB 数据迁移到 TiDB 的工具,支持全量数据和增量数据的迁移。

基本信息:

1)DM 的输入:MySQL/MariaDB。
2)DM 的输出:TiDB 集群。
3)适用 TiDB 版本:所有版本
4)Kubernetes 支持:开发中
如果数据量在 TB 级别以下,推荐直接使用 DM 迁移 MySQL/MariaDB 数据到 TiDB(迁移的过程包括全量数据的导出导入和增量数据的同步)。

如果数据量在 TB 级别,推荐的迁移步骤如下:

1)使用 Dumpling 导出 MySQL/MariaDB 全量数据。
2)使用 TiDB Lightning 将全量导出数据导入 TiDB 集群。
3)使用 DM 迁移 MySQL/MariaDB 增量数据到 TiDB。

结尾

我们非常高兴能够看到像 TiDB 这样的国产开源数据库,能够在国民生产和生活中发挥更多更大的作用。目前,TiDB 5.0 正在快速迭代中,本着稳、快、安全、好用的原则,持续发力。让我们期待 TiDB 5.0 早日发布。

 

【绽放吧!数据库】有奖征文火热进行中:https://bbs.huaweicloud.com/blogs/285617

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。