天天看點

Greenplum hash分布算法

PostgreSQL , hash , cdbhash , 一緻性hash算法

Greenplum,如果從master節點寫入資料的話,寫入性能實際上是比較差的,但是我們可以直接連資料節點來寫入:

<a href="https://github.com/digoal/blog/blob/master/201511/20151126_01.md">《讓greenplum的oltp性能飛起來》</a>

這種用法需要用戶端從master擷取gp_segment_configuration,同時需要擷取表的分布鍵,同時需要使用cdbhash算法算出記錄應該寫入哪個segment節點,這種方法不保證全局一緻性,建議選擇場景使用。

src/backend/cdb/cdbhash.c

算出的值對應gp_segment_configuration.content.

content就是hash value,注意-1表示master,0開始表示segment,如果有mirror的話,content會重複,每個content id都有兩條,分别表示primary 和 mirror。

通過role判斷目前屬于什麼角色,選擇primary寫入。

注意有MIRROR時,如果PRIMARY挂了會自動切換到MIRROR,是以建議寫入時,如果發現失敗,再從master擷取新的gp_segment_configuration,找到對應content id的目前role=p的連接配接。

hostname, port表示節點的真實連接配接斷開和主機名。

如果gp_distribution_policy擷取到的attrnums是空,表示随機分布。

繼續閱讀