HTAP 快速上手指南
本指南介紹如何快速上手體驗 TiDB 的一站式混合型在線事務與在線分析處理 (Hybrid Transactional and Analytical Processing, HTAP) 功能。
注意
本指南中的步驟僅適用于快速上手體驗,不適用于生產環境。如需探索 HTAP 更多功能,請參考深入探索 HTAP。
基礎概念
在試用前,你需要對 TiDB 面向在線事務處理的行存儲引擎?TiKV?與面向實時分析場景的列存儲引擎?TiFlash?有一些基本了解:
- HTAP 存儲引擎:行存 (Row-store) 與列存 (columnar-store) 同時存在,自動同步,保持強一致性。行存為在線事務處理 OLTP 提供優化,列存則為在線分析處理 OLAP 提供性能優化。
 - HTAP 數據一致性:作為一個分布式事務型的鍵值數據庫,TiKV 提供了滿足 ACID 約束的分布式事務接口,并通過?Raft?協議保證了多副本數據一致性以及高可用。TiFlash 通過 Multi-Raft Learner 協議實時從 TiKV 復制數據,確保與 TiKV 之間的數據強一致。
 - HTAP 數據隔離性:TiKV、TiFlash 可按需部署在不同的機器,解決 HTAP 資源隔離的問題。
 - MPP 計算引擎:從 v5.0 版本起,TiFlash 引入了分布式計算框架?MPP,允許節點之間的數據交換并提供高性能、高吞吐的 SQL 算法,可以大幅度縮短分析查詢的執行時間。
 
體驗步驟
本文的步驟以?TPC-H?數據集為例,通過其中一個查詢場景來體驗 TiDB HTAP 的便捷性和高性能。TPC-H 是業界較為流行的決策支持(Desision Support)業務 Benchmark。它包含大數據量下,一個業務決策分析系統所需要響應的不同類型高復雜度的即席查詢。如果需要體驗 TPC-H 完整的 22 條 SQL,可以訪問?tidb-bench 倉庫?或者閱讀 TPC-H 官網說明了解如何生成查詢語句以及數據。
第 1 步:部署試用環境
在試用 TiDB HTAP 功能前,請按照?TiDB 數據庫快速上手指南中的步驟準備 TiDB 本地測試環境,執行以下命令啟動 TiDB 集群:
tiup playground
注意
tiup playground?命令僅適用于快速上手體驗,不適用于生產環境。
第 2 步:準備試用數據
通過以下步驟,將生成一個?TPC-H?數據集用于體驗 TiDB HTAP 功能。如果你對 TPC-H 感興趣,可查看其規格說明。
注意
如果你想使用自己現有的數據進行分析查詢,可以將數據遷移到 TiDB?中;如果你想自己設計并生成數據,可以通過 SQL 語句或相關工具生成。
使用以下命令安裝數據生成工具:
tiup install bench
使用以下命令生成數據:
tiup bench tpch --sf=1 prepare
當命令行輸出?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 實際查詢到的值為準)。
+---------------+----------------+-----------+------------+---------+ | Table Name | Number of Rows | Data Size | Index Size | Total | +---------------+----------------+-----------+------------+---------+ | test.nation | 25 | 0.0000G | 0.0000G | 0.0000G | | test.region | 5 | 0.0000G | 0.0000G | 0.0000G | | test.part | 200000 | 0.0245G | 0.0000G | 0.0245G | | test.supplier | 10000 | 0.0014G | 0.0000G | 0.0014G | | test.partsupp | 800000 | 0.1174G | 0.0119G | 0.1293G | | test.customer | 150000 | 0.0242G | 0.0000G | 0.0242G | | test.orders | 1514336 | 0.1673G | 0.0000G | 0.1673G | | test.lineitem | 6001215 | 0.7756G | 0.0894G | 0.8651G | +---------------+----------------+-----------+------------+---------+ 8 rows in set (0.06 sec)
這是一個商業訂購系統的數據庫。其中,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 代表不可用。副本狀態變為可用之后就不再改變,如果通過 DDL 命令修改副本數則會重新計算同步進度。
 - PROGRESS?字段代表同步進度,在 0.0~1.0 之間,1 代表至少 1 個副本已經完成同步。
 
第 5 步:使用 HTAP 更快地分析數據
再次執行第 3 步中的 SQL 語句,你可以感受 TiDB HTAP 的表現。
對于創建了 TiFlash 副本的表,TiDB 優化器會自動根據代價估算選擇是否使用 TiFlash 副本。如需查看實際是否選擇了 TiFlash 副本,可以使用?desc?或?explain analyze?語句,例如:
explain analyze 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;
如果結果中出現 ExchangeSender 和 ExchangeReceiver 算子,表明 MPP 已生效。
此外,你也可以指定整個查詢的各個計算部分都只使用 TiFlash 引擎,詳情請參閱使用 TiDB 讀取 TiFlash。
你可以對比兩次的查詢結果和查詢性能。
總結
以上是生活随笔為你收集整理的HTAP 快速上手指南的全部內容,希望文章能夠幫你解決所遇到的問題。
                            
                        - 上一篇: Axios 简单使用指南
 - 下一篇: 微信小程序、app之间的跳转