混合型在线事务与在线分析处理 (Hybrid Transactional and Analytical Processing, HTAP) 功能
- HTAP 存储引擎:行存 与列存 同时存在,自动同步,保持强一致性。行存 OLTP ,列存 OLAP
- HTAP 数据一致性:作为一个分布式事务型的键值数据库,TiKV 提供了满足 ACID 约束的分布式事务接口,并通过 Raft 协议保证了多副本数据一致性以及高可用。TiFlash 通过 Multi-Raft Learner 协议实时从 TiKV 复制数据,确保与 TiKV 之间的数据强一致。
- HTAP 数据隔离性:TiKV、TiFlash 可按需部署在不同的机器,解决 HTAP 资源隔离的问题。
- MPP 计算引擎:从 v5.0 版本起,TiFlash 引入了分布式计算框架 MPP
1、部署试用环境
参考 02-部署本地测试集群 完成快速部署
tiup playground --tag v7.5.0 --host 192.168.1.1
2、准备试用数据
使用以下命令安装数据生成工具:
tiup install bench
使用以下命令生成数据:
tiup bench tpch --sf=1 prepare
此过程耗时较长(10多分钟),生成完后。会在test查看相关表及数据
当命令行输出 Finished 时,表示数据生成完毕。
运行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';
从输出中可以看到,一共生成了八张表,最大的一张表数据量有 600 万行(由于数据是工具随机生成,所以实际的数据生成量以 SQL 实际查询到的值为准)。
这是一个商业订购系统的数据库。其中,
test.nation 表是国家信息、test.region 表是地区信息、test.part 表是零件信息、
test.supplier 表是供货商信息、test.partsupp 表是供货商的零件信息、
test.customer 表是消费者信息、test.orders 表是订单信息、test.lineitem 表是在线商品的信息。
3、使用行存查询数据
执行以下 SQL 语句 TiDB 的表现:
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;
用于给出在指定日期之前尚未运送的订单中收入最高订单的优先权和潜在的收入。
潜在的收入被定义为 l_extendedprice * (1-l_discount) 的和。订单按照收入的降序列出。
列出潜在查询收入在前 10 的尚未运送的订单。
4、同步列存数据
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 语句:
SELECT * FROM information_schema.tiflash_replica WHERE TABLE_SCHEMA = 'test' and TABLE_NAME = 'customer';
SELECT * FROM information_schema.tiflash_replica WHERE TABLE_SCHEMA = 'test' and TABLE_NAME = 'orders';
SELECT * FROM information_schema.tiflash_replica WHERE TABLE_SCHEMA = 'test' and TABLE_NAME = 'lineitem';
以上查询结果中:
- AVAILABLE 字段表示该表的 TiFlash 副本是否可用。1 代表可用,0 代表不可用。副本状态变为可用之后就不再改变。
- PROGRESS 字段代表同步进度,在 0.0~1.0 之间,1 代表 TiFlash 副本已经完成同步。
5、使用 HTAP 更快地分析数据
再次执行第 3 步中的 SQL 语句
对于创建了 TiFlash 副本的表,TiDB 优化器会自动根据代价估算选择是否使用 TiFlash 副本。
如需查看实际是否选择了 TiFlash 副本,可以使用 desc 或 explain analyze 语句,例如:
explain analyze SELECTl_orderkey,SUM(l_extendedprice * (1 - l_discount)) AS revenue,o_orderdate,o_shippriority
FROMcustomer,orders,lineitem
WHEREc_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 BYl_orderkey,o_orderdate,o_shippriority
ORDER BYrevenue DESC,o_orderdate
limit 10;
如果结果中出现 ExchangeSender 和 ExchangeReceiver 算子,表明 MPP 已生效。
此外,你也可以指定整个查询的各个计算部分都只使用 TiFlash 引擎,详情请参阅使用 TiDB 读取 TiFlash。
使用后效率