如何查询当前表空间下所有实例_详解人大金仓MPP数据库并行查询技术
什么是MPP數據庫?
人大金倉MPP數據庫的
并行查詢技術原理是什么?
如何實現并行查詢?性能如何?
且聽以下詳細分解~
01
什么是人大金倉MPP數據庫?
KingbaseAnalyticsDB(簡稱KADB)是人大金倉為應對大數據時代海量數據分析處理的需求推出的具備高性能、高擴展能力的MPP數據庫。它具有分布式集群部署、數據分片無共享存儲、大規模并行處理技術(MPP)、數據分區、行列混存、數據庫內壓縮、MapReduce、在線擴容、內嵌數十種AI算法等技術特點,能滿足當前各行業對大量數據采集、存儲、挖掘及分析等多種需求的能力。
目前,該產品主要定位于數據分析類應用市場,可處理PB級甚至更大存儲量的數據,并能集成多種異構數據源進行數據挖掘和分析,在處理多表連接、聚合等各類復雜查詢方面也體現出了很好的性能。
▲KADB技術架構圖
02
如何理解MPP數據庫并行查詢技術?
MPP數據庫并行查詢技術主要是為了提升多節點并行查詢時的查詢性能而設計的。
其設計思路如下:讓用戶的數據較均勻地分開存放在各集群計算節點上(采用哈希分布或隨機分布等)——管理實例接受客戶端查詢請求——分析請求并生成查詢計劃——分發查詢計劃給計算實例并發查詢。
以數據庫中最常見的join操作為例,假如兩張表的分片字段上是等值連接,則各計算節點可根據自己負責的分片數據得出查詢結果(管理實例會將查詢直接發給各相關計算實例執行);否則,各計算實例必須依賴于其他計算實例的數據才能完成查詢。此時,就需系統在執行計劃樹中插入一個數據傳輸節點(Motion)負責在不同計算實例之間傳輸數據。
計算實例間的通信有3種方式:
01
基于廣播的數據傳輸
(Broadcast Motion)
每個計算實例將自己負責的執行結果發送給其他所有計算實例;
02
基于重哈希的數據傳輸
(Redistribute Motion)
每個計算實例首先計算指定字段的HASH值,然后根據HASH結果將本條記錄發送給對應的計算實例;
03
匯總傳輸
(Gather motion)
計算實例將執行結果發送給管理實例。
需要說明的是,以上3種傳輸方式中,前兩種傳輸是為了保證單個計算節點查詢時數據的完整性,匯總傳輸是為了保證返回給用戶數據的完整性。
03
KADB如何保證查詢最大的并行度?
KADB按照Motion操作對查詢計劃進行分片(Slice),再將分片后的查詢計劃發送給計算實例進行并行查詢。此時,不同的Slice可以并行執行查詢,由此實現計算實例內和計算實例間的多級并行,保證查詢實現最大的并行度。
執行過程圖和執行計劃示意圖如下圖所示:
▲MPP執行過程圖
▲MPP某個含有所有Motion節點的執行示意圖
下面將以1個管理實例+2個計算實例的集群join操作的實際執行計劃作具體說明:
create table x(x1 int, x2 int, x3 int) distributed by (x1);
create table y(y1 int, y2 int, y3 int) distributed by (y1);
insert into x values(1,2,3);
insert into x values(2,3,4),(3,4,5),(4,5,6);
insert into y values(1,2,3);
insert into y values(2,3,4),(3,4,5),(4,5,6);
注:表默認hash分布。
01
查詢計劃只有Gather Motion情況
select * from x join y on x1=y1;
kingbase=# explain select * from x join y on x1=y1;
QUERY PLAN
-----------------------------------------
Gather Motion (slice1)
-> Hash Join
Hash Cond: x.x1 = y.y1
-> Seq Scan on x
-> Hash
-> Seq Scan on y
當表x、y的join條件都是分布鍵x1、y1進行join時,因為相同值一定會hash到同一個計算實例中,因此只需每個計算實例在本地,根據本地的數據執行hashjoin,最終的結果返回給管理實例,管理實例統一收集返回給客戶端即可。
02
查詢計劃使用Redistribute Motion情況
select * from x join y on x1=y2;
kingbase=# explain select * from x join y on x1=y2;
QUERY PLAN
------------------------------------------
Gather Motion 2:1 (slice2)
-> Hash Join
Hash Cond: y.y2 = x.x1
-> Redistribute Motion 2:2 (slice1)
Hash Key: y.y2
-> Seq Scan on y
-> Hash
-> Seq Scan on x
當表x、y的join條件不全是分布鍵(y2不是分布鍵)做join時,由于采用分布鍵做join表x列的x1數據已hash好,采用非分布鍵做join表y列的y2是隨機分布的,因此每個計算實例需要根據非分布鍵做join表的y按照y2進行重新hash把數據分發給各節點,各節點在本地做join,也就是計劃中有y表的Redistribute Motion,然后將最終結果返回給管理實例,管理實例統一收集返回給客戶端。
03
查詢計劃使用Broadcast Motion情況
select * from x join y on x1=y2;
kingbase=# explain select * from x join y on x2=y2;
QUERY PLAN
----------------------------------------------------
Gather Motion 2:1 (slice2)
-> Hash Join
Hash Cond: x.x2 = y.y2
-> Seq Scan on x
-> Hash
-> Broadcast Motion 2:2 (slice1)
-> Seq Scan on y
當表x、y的join條件都不是分布鍵(x2、y2不是分布鍵)做join時,表x列的x2數據是隨機分布的,表y列的y2也是隨機分布的。
當x、y表存在小表情況,可把小表如表y的所有數據廣播(Broadcast)到各節點,將每個計算實例本地表x數據和整個表y的數據做join,最終的結果返回給管理實例,管理實例統一收集返回給客戶端即可。
當遇到計算實例較多,x、y數據量較大的情況,可將表x、y分別按列x2、y2進行hash,對數據進行重新分發(Redistribute)。這樣一來,每個計算實例的數據都是hash后的數據,再進行本地join,將最終結果返回給管理實例,管理實例統一收集返回給客戶端即可。
執行計劃如下:
QUERY PLAN
--------------------------------------------
Gather Motion 2:1 (slice3)
-> Hash Join
Hash Cond: (x.x2 = y.y2)
-> Redistribute Motion 2:2 (slice1)
Hash Key: x.x2
-> Seq Scan on x
-> Hash
-> Redistribute Motion 2:2 (slice2)
Hash Key: y.y2
-> Seq Scan on y
04
KADB并行查詢性能表現
應用數的增加會帶來數據量的增加,相應地,對查詢性能的響應速度也提出了更高的要求。在單機數據庫無法滿足的情況下,可采用MPP集群的并行技術提高查詢響應速度,MPP數據庫的性能也會隨著機器數的增長得到線性提升。
以下是一個簡單模擬采用MPP數據庫的性能表現情況:
01
測試環境
02
應用場景
03
測試結果
測試結論: 采用人大金倉MPP數據庫KADB的集群技術能使查詢速度隨機器數量得到線性提升。
總結
以上是生活随笔為你收集整理的如何查询当前表空间下所有实例_详解人大金仓MPP数据库并行查询技术的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python必学的模块_Python必学
- 下一篇: python显示数据长度_Python数