Greenplumhash分佈演算法
標籤
PostgreSQL , hash , cdbhash , 一致性hash演算法
背景
Greenplum,如果從master節點寫入資料的話,寫入效能實際上是比較差的,但是我們可以直接連資料節點來寫入:
這種用法需要客戶端從master獲取gp_segment_configuration,同時需要獲取表的分佈鍵,同時需要使用cdbhash演算法算出記錄應該寫入哪個segment節點,這種方法不保證全域性一致性,建議選擇場景使用。
hash演算法
src/backend/cdb/cdbhash.c
算出的值對應gp_segment_configuration.content.
獲取GPDB叢集配置
postgres=# select * from gp_segment_configuration ;
dbid | content | role | preferred_role | mode | status | port | hostname | address | replication_port | san_mounts
------+---------+------+----------------+------+--------+-------+-------------------+-----------+------------------+------------
1 | -1 | p | p | s | u | 15432 | .sqa.tbc | localhost | |
2 | 0 | p | p | s | u | 25432 | .sqa.tbc | localhost | |
3 | 1 | p | p | s | u | 25433 | .sqa.tbc | localhost | |
4 | 2 | p | p | s | u | 25434 | .sqa.tbc | localhost | |
5 | 3 | p | p | s | u | 25435 | .sqa.tbc | localhost | |
6 | 4 | p | p | s | u | 25436 | .sqa.tbc | localhost | |
7 | 5 | p | p | s | u | 25437 | .sqa.tbc | localhost | |
8 | 6 | p | p | s | u | 25438 | .sqa.tbc | localhost | |
9 | 7 | p | p | s | u | 25439 | .sqa.tbc | localhost | |
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表示節點的真實連線斷開和主機名。
獲取分佈鍵
********* QUERY **********
SELECT attrnums
FROM pg_catalog.gp_distribution_policy t
WHERE localoid = `721689`
**************************
********* QUERY **********
SELECT attname FROM pg_attribute
WHERE attrelid = `721689`
AND attnum = `1`
**************************
如果gp_distribution_policy獲取到的attrnums是空,表示隨機分佈。
相關文章
- 概率演算法_二項分佈和泊松分佈演算法
- 關於共軛分佈,beta分佈,二項分佈和Dirichlet分佈、多項式分佈的關係
- 泊松分佈和指數分佈:10分鐘教程
- 動態分佈與靜態分佈的區別
- PRML 概率分佈概率分佈
- 如何根據資料的分佈來選擇ML演算法? - Reddit演算法
- 淺談分散式儲存系統的資料分佈演算法分散式演算法
- HBASE偽分佈搭建
- Python獲取好友地區分佈及好友性別分佈Python
- 多元統計分析04:多元正態分佈的抽樣分佈
- 樹佈局演算法演算法
- 業務分佈地圖怎麼做,用地圖製作客戶分佈圖地圖
- 卡方分佈和 Zipf 分佈模擬及 Seaborn 視覺化教程視覺化
- .NET開發者省份分佈排名
- 熟悉常見概率分佈概率分佈
- Redis 實現分佈鎖Redis
- 正態分佈簡述
- 十分鐘學習泊松分佈
- 位置分佈圖怎麼畫,怎麼做地圖網點分佈圖地圖
- 區域分佈圖怎麼做,怎麼做區域網格分佈圖
- 玻爾茲曼能量分佈律及麥克斯韋速度分佈推導
- 如何通俗理解泊松分佈?
- 程式虛擬空間分佈
- 【scipy 基礎】--統計分佈
- 正態分佈函式值函式
- HADOOP的偽分佈搭建Hadoop
- Hadoop偽分佈模式(HDFS)Hadoop模式
- 二、hadoop偽分佈搭建Hadoop
- 常見的機率分佈
- 怎麼製作區域分佈圖?區域網格分佈圖怎麼做?
- 怎麼製作位置分佈圖?什麼軟體可以做區域分佈圖?
- 商場分佈圖是怎麼做,地圖資料分佈圖怎麼做地圖
- 分詞演算法分詞演算法
- 3分鐘tips:高斯分佈和高斯積分的關係
- Flurry:移動應用分類忠誠度分佈象限
- 地圖網點分佈圖怎麼做,如何製作地圖資料分佈圖地圖
- 正態分佈的應用——基於描述性統計與分佈的推論
- 模式識別與機器學習——概率分佈模式機器學習概率分佈