Greenplum+Hadoop學習筆記-11-分散式資料庫儲存及查詢處理,hadoop-11-
3.1.分布儲存
Greenplum是一個分散式資料庫系統,因此其所有的業務資料都是物理存放在叢集的所有Segment執行個體資料庫上;在Greenplum資料庫中所有表都是分布式的,所以每一張表都會被切片,每個Segment執行個體資料庫都會存放相應的資料片段。在中sale、customer、vendor、product四張表的資料都會切片存放在所有的Segment上,所有Segment執行個體同時工作,由於每個Segment只需要計算一部分資料,所以計算效率會大大提升。
3.2.表分布的策略-並行計算的基礎
3.2.1.Hash分布
文法格式:
CREATE TABLE … DISTRIBUTED BY (column [,…])
同樣數值的內容被分配到同一個Segment上;當選擇Hash分布策略時,可指定表的一列或者多列組合。GP會根據指定的Hash Key列計算每一行資料對應的Hash值,並映射至相應的Segment執行個體。當選擇的Hash Key列的值唯一時,資料將會均勻地分散至所有的Segment執行個體。GP資料庫預設採用Hash分布,如果建立表時未指定Distributed Key,則會選擇Primary Key作為Distributed Key,如果Primary Key也不存在,則會選擇表的第一列作為Distributed Key。
3.2.2.迴圈(隨機)分布
文法格式:
CREATE TABLE … DISTRIBUTED RANDOMLY
具有同樣數值的行內容並不一定在同一個Segment上,相同的值不一定會分發至同一個Segment。不建議使用隨機分布。
3.3.查詢規劃與分發
用戶端通過Master節點將查詢計劃分發到各個子節點上,包括update,delete,create等操作,各個子節點上執行完查詢計劃結束後將結果返回到Master節點後顯示到用戶端中。
3.4.SQL查詢處理機制
在Master節點上存在QD process(查詢和分發進程),子節點上存在QE process(查詢和執行進程);當Master節點將查詢計劃分發到子節點上,子節點上執行QE process。GP將一個查詢計劃切分成多個slice來提供執行效率;多個執行計畫並行工作,最先完成的slice會繼續等待後完成的slice的結果。對於同一資料的處理可以理解為gang(簇)。Slice 1處理結束後會將處理結果發送給slice 2中,slice 2將匯總後的結果返回給Master節點。
3.5.並行查詢計劃
SELECT customer, amount FROM sales JOIN customer USING (cust_id) WHERE date=03222015;
GP的查詢計劃:首先對錶進行全表掃描,全表掃描結束後資料進行重分布以及Hash分布,重分布是在slice1上,hash分布式在slice2上,重分布和hash分布結束後進行Hash join,Hash join結束進行gather Motion(合并串連)操作進入slice3中。