Greenplum(GP)採用了MPP架構,基於開源的資料庫 PostgreSQL(PG)。 1.首先什麼是MPP架構? GreenPlum的架構採用了MPP(大規模並行處理)。在 MPP 系統中,每個 Segment 節點也可以運行自己的操作系統、資料庫等。換言之,每個節點內的 CPU 不能訪問另 ...
Greenplum(GP)採用了MPP架構,基於開源的資料庫 PostgreSQL(PG)。
1.首先什麼是MPP架構?
GreenPlum的架構採用了MPP(大規模並行處理)。在 MPP 系統中,每個 Segment 節點也可以運行自己的操作系統、資料庫等。換言之,每個節點內的 CPU 不能訪問另一個節點的記憶體。節點之間的信息交互是通過節點互聯網路實現的,這個過程一般稱為數據重分配(Data Redistribution) 。與傳統的SMP架構明顯不同,通常情況下,MPP系統因為要在不同處理單元之間傳送信息,所以它的效率要比SMP要差一點,但是這也不是絕對的,因為 MPP系統不共用資源,因此對它而言,資源比SMP要多,當需要處理的事務達到一定規模時,MPP的效率要比SMP好。這就是看通信時間占用計算時間的比例而定,如果通信時間比較多,那MPP系統就不占優勢了,相反,如果通信時間比較少,那MPP系統可以充分發揮資源的優勢,達到高效率。
2.簡單介紹一下GP的各個組件:
資料庫由Master Severs和Segment Severs通過Interconnect互聯組成。
Master主機負責:建立與客戶端的連接和管理;SQL的解析並形成執行計劃;執行計劃向Segment的分發收集Segment的執行結果;Master不存儲業務數據,只存儲數據字典。
Segment主機負責:業務數據的存儲和存取;用戶查詢SQL的執行。
master node高可用,類似於hadoop的namenode和second namenode,實現主備的高可用。
3.數據是如何分佈的?
在 GPDB 中創建(Create)或者修改(Alter)表時,有一個額外的 DISTRIBUTED 子句用以定義表的分佈策略(Distribution Policy)。分佈策略決定了表中的數據記錄如何被打散到GP的 Segment Instance。GPDB 提供了2種分佈策略:
HASH 分佈 使用 HASH 分佈時,1個或數個Table Column被用作Distribution Key(簡稱 DK)。DK被HASH 演算法用來決定每行記錄對應特定的Segment Instance。相同Key值的記錄會HASH 到相同的 Segment Instance。選擇一個唯一鍵(unique key)作為DK,比如主鍵(Primary Key),可以確保儘可能的平坦分佈數據。
隨機(Random)分佈 使用隨機分佈,數據記錄被迴圈的分佈到 Segment Instance。相同值的記錄可能會落在不同的Segment Instance。隨機分佈可以確保數據分佈的平坦性,但為了確保性能優勢應該儘可能的使用 HASH 分佈。
4.GPDB查詢過程
用戶可以像使用其他的DBMS一樣向GPDB提交查詢。直接通過客戶端程式(例如 psql)連接到GP的Master主機並提交查詢語句,也可以通過pgadmin工具來連接GP執行查詢語句。
psql -l //列出所有的database
psql -d xxxx //登陸資料庫,預設gpadmin用戶
查詢性能的強弱往往由查詢優化器的水平來決定,greenplum主節點負責解析SQL與生成執行計劃。Greenplum的執行計劃生成同樣採用基於成本的方式,基於資料庫是由諸多segment實例組成,在選擇執行計劃時主節點還要綜合考慮節點間傳送數據的代價。
查詢被Master 接收、處理、優化、創建一個並行的或者定向的查詢計劃(根據查詢語句決定)。之後 Master將查詢計劃分發到相關的Instance去執行,每個Instance只負責處理自己本地的那部分數據。
大部分的操作—比如掃表、關聯、聚合、排序都是同時在Instance上並行被執行。每個操作都獨立於其他Instance執行。
例如:
QUERY查詢語句及分析結果
下圖解釋了查詢計劃。每個Instance獲取到查詢計劃的副本且並行執行。對於該查詢計劃來說,有一個重分佈操作(Redistribute motion),這是為了完成連接(join)而執行的數據 移動操作。查詢計劃被重分佈操作分割為兩步(slice 1 與 slice 2)。該查詢計劃還有另外一種數據移動稱為彙總移動(Gather motion)。彙總移動是Instance將計算結果反饋到Master從而可以反饋給客戶端的一種操作。由於在移動動作發生時查詢計劃總是會被分割,該查詢計劃還存在一個隱含的操作(slice 3)。不是所有的查詢都有彙總操作,比如:CREATE TABLE…AS SELECT...語句就不需要彙總操作。
5.JDBC連接GP
首先需要去GP官網下載最新的JDBC驅動包
地址:https://network.pivotal.io/api/v2/products/pivotal-gpdb/releases/6342/product_files/27496/download
然後在Eclipse中引入這個驅動包,新建一個測試類,如下:
運行結果如下:
引申:開發一個登陸界面,監控GP
登陸界面需要從GP中獲取用戶表來驗證登陸用戶名和密碼。具體代碼如下:
login.html--登陸頁面
login_check.jsp--驗證密碼
部分截圖
登陸效果: