TiDB数据库之简介
TiDB 是 PingCAP 公司自主设计、研发的开源分布式关系型数据库,是一款同时支持在线事务处理与在线分析处理 (Hybrid Transactional and Analytical Processing, HTAP) 的融合型分布式数据库产品,具备水平扩容或者缩容、金融级高可用、实时 HTAP、云原生的分布式数据库、兼容 MySQL 5.7 协议和 MySQL 生态等重要特性。目标是为用户提供一站式 OLTP (Online Transactional Processing)、OLAP (Online Analytical Processing)、HTAP 解决方案。
简单的说就是一款分布式数据库.
五大特性
-
支持水平扩容或缩容
这一点在传统的RDBMS上不容易实现,传统的RDBMS通常是数据存储和计算没有进行分离的; -
金融级高可用
采用 Multi-Raft 协议来进行保证的 -
实时 HTAP
同时支持OLAP和OLTP处理 -
云原生的分布式数据库
-
兼容MySQL 5.7协议
支持MySQL协议这是一大优点
四大核心应用场景
- 对数据一致性及高可靠、系统高可用、可扩展性、容灾要求较高的金融行业属性的场景
也就是适合需要高性能/高可用/高扩展性的场景
- 对存储容量、可扩展性、并发要求较高的海量数据及高并发的 OLTP 场景
随着业务的高速发展,数据呈现爆炸性的增长,传统的单机数据库无法满足因数据爆炸性的增长对数据库的容量要求,可行方案是采用分库分表的中间件产品或者 NewSQL 数据库替代、采用高端的存储设备等,其中性价比最大的是 NewSQL 数据库,例如:TiDB。TiDB 采用计算、存储分离的架构,可对计算、存储分别进行扩容和缩容,计算最大支持 512 节点,每个节点最大支持 1000 并发,集群容量最大支持 PB 级别。
-
HTAP场景
一套数据库支持全部场景 -
OLAP场景
TiDB在实现上比ETL + Hadddoop简单和高效低本,并且可以直接用SQL实现分析统计功能
快速上手
本次快速上手实验的环境主要是: WSL2+Ubunta
- 下载安装脚本
curl --proto '=https' --tlsv1.2 -sSf https://tiup-mirrors.pingcap.com/install.sh | sh
# 下载完成后会展示安装脚本路径 'Shell profile:'后面的就是 ${your_shell_profile} 替换量
source ${your_shell_profile}
- 启动集群
# 默认TiDB、TiKV、PD 和 TiFlash 实例各一个
tiup playground
- TiDB的相关操作
- 连接TiDB
# 使用TiDB clinet
tiup client
# 使用MySQL 协议
mysql --host 127.0.0.1 --port 4000 -u root
在使用MySQL客户端连接的时候,因为TiDB默认没有为root用户分配密码的,可以通过TiDB clint 登陆后使用set password for root=‘123456’;来修改密码
- 退出/清理
-
按下 Control+C 键停掉上述启用的 TiDB 服务。
-
等待服务退出操作完成后,执行以下命令:
tiup clean --all
- 管控平台/性能分析后台
- dashboard
可以看到TiDB的后台管理页面比较现代,支持各种功能包括集群信息、慢SQL分析、日志查询、性能诊断等
HTAP功能对比
HTAOP功能就是在线分析功能,在传统的数据库使用过程中通常会伴随着这样的使用场景,下面用TiFlash和MySQL之间来对比
准备数据
# 使用以下命令安装数据生成工具
tiup install bench
# 使用以下命令生成数据
tiup bench tpch --sf=1 prepare

# 运行以下 SQL 语句查看生成的数据量
SELECT CONCAT(table_schema,'.',table_name) AS 'Table Name', table_rows AS 'Number of Rows', CONCAT(ROUND(data_length/(1024*1024*1024),4),'G') AS 'Data Size', CONCAT(ROUND(index_length/(1024*1024*1024),4),'G') AS 'Index Size', CONCAT(ROUND((data_length+index_length)/(1024*1024*1024),4),'G') AS'Total'FROM information_schema.TABLES WHERE table_schema LIKE 'test';
执行SQL
SELECT
l_orderkey,
SUM(
l_extendedprice * (1 - l_discount)
) AS revenue,
o_orderdate,
o_shippriority
FROM
customer,
orders,
lineitem
WHERE
c_mktsegment = 'BUILDING'
AND c_custkey = o_custkey
AND l_orderkey = o_orderkey
AND o_orderdate < DATE '1996-01-01'
AND l_shipdate > DATE '1996-02-01'
GROUP BY
l_orderkey,
o_orderdate,
o_shippriority
ORDER BY
revenue DESC,
o_orderdate
limit 10;
同步列存数据
TiFlash 部署完成后并不会自动同步 TiKV 数据,你可以在 MySQL 客户端向 TiDB 发送以下 DDL 命令指定需要同步到 TiFlash 的表。指定后,TiDB 将创建对应的 TiFlash 副本。
ALTER TABLE test.customer SET TIFLASH REPLICA 1;
ALTER TABLE test.orders SET TIFLASH REPLICA 1;
ALTER TABLE test.lineitem SET TIFLASH REPLICA 1;
分析对比性能差异
可以看到TiFlash执行的耗时非常的少
SQL 基本操作
SQL 基本操作
TODO