對于大規模并行處理數據庫來說,一般由單master與多segment組成。
那么數據表的單行會被分配到一個或多個segment上,此時需要想一想分布策略
分布
在gp6中,共有三個策略:
哈希分布
隨機分布
復制分布
哈希分布
就是對分布鍵進行hash,這樣相同值的key始終散列到同一個segment上。如果選擇唯一的分布鍵,將確保較均勻的數據分布。
要使用這一策略,需要在創建表使用 “DISTRIBUTED BY(column,[…])” 子句。
隨機分布
將數據行按順序依次發送到各個segment,此時具有相同值的數據行不一定位于同一個segment上。隨機分布保證了數據的平均分布,但是性能顯然不如hash
復制分布
gp會將每行數據分配到每個segment上,此策略下,表數據將均勻分布,每個segment存儲同樣的數據行。
當在segment上執行用戶自定義函數且需要訪問表中所有行時,此時需要用到此策略。
接下講解分區概念
分布時對存儲的數據進行物理劃分,分區是邏輯劃分。
分區將大表從邏輯上劃分為多個子表,分區不會更改表數據在segment之間的物理分布。
分區
gp支持以下分區類型:
1、范圍分區:根據數字范圍,如日期或價格
2、列表分區:基于值列表的數據劃分,如銷售地區或者產品線
3、兩種類型的組合
對大表分區可以簡化數據庫維護以及提高查詢性能,例如通過對時間分區,可以將舊數據滾動移除出數據庫。
但是創建過多的分區可能會拖慢管理和維護的速度,如清理,恢復segment,擴展集群等情況。
除非優化器可以通過查詢謂詞修剪分區,否則分區將不會提高查詢性能。
依次掃描各個分區表的查詢會比只需掃描無分區的根表要慢。所以當查詢中很少使用分區裁剪的話,盡量避免對表分區。
參考
Greenplum數據分布和分區策略