天天看點

Greenplum 資料分布黃金法則 - 論分布列與分區的選擇

阿裡雲apsaradb for greenplum公測以來,已經收到好多使用者的公測申請。

要使用greenplum,登陸到資料庫後第一件事當然是建表,然後倒入資料開測。

大部分使用者以前是使用mysql的,并沒有接觸過greenplum,文法需要适應一下。

例如mysql中的建表語句

在greenplum中可以寫成

greenplum完整的建表文法參考本文末尾。

由于greenplum是一個分布式的資料庫,資料是分散存儲在各個資料節點的,是以需要告訴greenplum資料應該如何分布。

短闆效應

當使用者請求query時,greenplum會在所有的節點并行執行,是以最慢的節點會成為整個系統的瓶頸。

greenplum 支援的分布算法 :

使用者可以指定 分布列(允許指定多個列) ,或者使用 随機分布 算法。

那麼使用者應該如何選擇分布列,或者是否要使用随機分布算法呢?

總結起來,需要考慮以下幾點

join

當join的列都是分布列時,不需要重分布或廣播小表,可以在segment内完成join。

Greenplum 資料分布黃金法則 - 論分布列與分區的選擇

兩個表在join時,如果join列不是表的分布列,那麼其中一個更小的表會發生資料重分布,或者broadcast,以繼續完成join的動作。

例如a和b都是随機分布的,在join時,要麼廣播小表,要麼兩個表都根據join 列重分布。

Greenplum 資料分布黃金法則 - 論分布列與分區的選擇

例如a和b,其中a是join列分布,b不是,那麼b可以選擇廣播,或者重分布。

Greenplum 資料分布黃金法則 - 論分布列與分區的選擇

重分布或廣播的動作都是自動完成的,但是這樣一定會帶來額外的網絡開銷。

想象一下,如果你的query并發很高,而且大量的query中涉及到join的資料重分布或broadcast的話,網絡很快就會成為瓶頸。

法則1,分布列盡量選擇需要經常join的列,這類查詢的并發越高,越應該考慮。

防止資料傾斜

greenplum依據指定的分布列,hash取模存放到對應的segment中。

如果選擇的分布列值分布不均勻,就可能導緻資料傾斜,某些segment可能非常大,而某些segment非常小。

資料傾斜的顯著危害,1. 空間不均勻,不好規劃存儲。2. 資料分布過多的節點,容易成為整個系統的短闆。

法則2,盡量選擇分布均勻的列,或者多列

高并發查詢,選擇性好

如果資料經常被高并發的鍵值或離散查詢,建議将查詢條件的列作為分布列,這樣不需要連接配接到所有的segment去查,可以大大提高并發能力。

例子

aa01 的分布列是aaz499

查詢分布列時,定位到一個segment查詢

查詢非分布列,需要所有的segment參與查詢

法則3,盡量選擇高并發查詢的條件列(指該查詢條件産生的中間結果集小的,如果中間結果集很大,那就讓所有節點都來參與運算更好,是以不選),如果有多個條件,請先權衡前面的法則

法則4,不要輕易使用随機分布

目前greenplum支援list和range兩種分區類型。

分區的目的是盡可能的縮小query需要掃描的資料量,是以必須和查詢條件相關聯。

法則1,盡量選擇和查詢條件相關的字段,縮小query需要掃描的資料

法則2,當有多個查詢條件時,可以使用子分區,進一步縮小需要掃描的資料

例子,一個使用者發起了帶兩個查詢條件col1=xx and col2 between ?1 and ?2 的請求,通過分區,如果表已經根據col1進行了list分區,同時根據col2進行了range的分區,那麼查詢範圍可以大大的縮小。

Greenplum 資料分布黃金法則 - 論分布列與分區的選擇

分布列選擇法則

原則,避免短闆效應。

分區法則

原則,縮小查詢範圍。

《阿裡雲apsaradb rds使用者 - olap最佳實踐》

<a href="https://yq.aliyun.com/articles/57778">https://yq.aliyun.com/articles/57778</a>

《greenplum資源隔離指南》

<a href="https://yq.aliyun.com/articles/57763">https://yq.aliyun.com/articles/57763</a>

《三張圖讀懂greenplum在企業的正确使用姿勢》

<a href="https://yq.aliyun.com/articles/57736">https://yq.aliyun.com/articles/57736</a>

《greenplum 公測申請頁面》

<a href="https://www.aliyun.com/product/gpdb?spm=5176.7960203.237031.39.3xwera">https://www.aliyun.com/product/gpdb?spm=5176.7960203.237031.39.3xwera</a>

greenplum完整的建表文法如下 :

祝大家玩得開心,歡迎随時來 阿裡雲促膝長談 業務需求 ,恭候光臨。

阿裡雲的小夥伴們加油,努力做 最貼地氣的雲資料庫 。