greenplum數據庫引擎探究
Greenplum做為新一代的數據庫引擎,有著良好的發展與應用前景。強大的工作效率,低成本的硬件平臺對數據倉庫與商業智能建設有很大的吸引力。要清楚的了解其特點最好從架構著手。
架構分析
Greenplum的高性能得益于其良好的體系結構。Greenplum的架構采用了MPP(大規模并行處理)。在 MPP 系統中,每個 SMP 節點也可以運行自己的操作系統、數據庫等。換言之,每個節點內的 CPU 不能訪問另一個節點的內存。節點之間的信息交互是通過節點互聯網絡實現的,這個過程一般稱為數據重分配 (Data Redistribution) 。與傳統的SMP架構明顯不同,通常情況下,MPP系統因為要在不同處理單元之間傳送信息,所以它的效率要比SMP要差一點,但是這也不是絕對的,因為MPP系統不共享資源,因此對它而言,資源比SMP要多,當需要處理的事務達到一定規模時,MPP的效率要比SMP好。這就是看通信時間占用計算時間的比例而定,如果通信時間比較多,那MPP系統就不占優勢了,相反,如果通信時間比較少,那MPP系統可以充分發揮資源的優勢,達到高效率。當前使用的OTLP程序中,用戶訪問一個中心數據庫,如果采用SMP系統結構,它的效率要比采用MPP結構要快得多。而MPP系統在決策支持和數據挖掘方面顯示了優勢,可以這樣說,如果操作相互之間沒有什么關系,處理單元之間需要進行的通信比較少,那采用MPP系統就要好,相反就不合適了。
Shared nothing架構
常見的OLTP數據庫系統常常采用shared everything架構來做集群,例如oracle RAC架構,數據存儲共享,節點間內存可以相互訪問。
Oracle RAC架構
Greenplum是一種基于postgresql(開源數據庫)的分布式數據庫。其采用shared nothing架構(MPP),主機,操作系統,內存,存儲都是自我控制的,不存在共享。主要由master host,segment host,interconnect三大部分組成。
Greenplum架構圖
了解完Greenplum的架構后,對其工作流程也就相對簡單了。因greenplum采用了MPP架構,其主要的優點是大規模的并行處理能力,應該把精力主要放在大規模存儲與并行處理兩個方面。
大規模存儲
Greenplum數據庫通過將數據分布到多個節點上來實現規模數據的存儲。數據庫的瓶頸經常發生在I/O方面,數據庫的諸多性能問題最終總能歸罪到I/O身上,久而久之,IO瓶頸成為了數據庫性能的永恒的話題。
Greenplum采用分而治之的辦法,將數據規律的分布到節點上,充分利用segment主機的IO能力,以此讓系統達到最大的IO能力(主要是帶寬)。
在greenplum中每個表都是分布在所有節點上的。Master host首先通過對表的某個或多個列進行hash運算,然后根據hash結果將表的數據分布到segment host中。整個過程中master host不存放任何用戶數據,只是對客戶端進行訪問控制和存儲表分布邏輯的元數據。
并行處理
Greenplum的并行處理主要體現在外部表并行裝載,并行備份恢復與并行查詢處理三個方面。
數據倉庫的主要精力一般集中在數據的裝載和查詢,數據的并行裝載主要是在采用外部表或者web表方式,通常情況下通過gpfdist來實現。
Gpfidist架構
Gpfdist程序能夠以370MB/s裝載text格式的文件和200MB/s裝載CSV格式文件,ETL帶寬為1GB的情況下,我們可以運行3個gpfdist程序裝載text文件,或者運行5個gpfdist程序裝載CSV格式文件。例如圖例中采用了2個gpfdist程序進行數據裝載。可以根據實際的環境通過配置postgresql.conf參數文件來優化裝載性能。
查詢性能的強弱往往由查詢優化器的水平來決定,greenplum主節點負責解析SQL與生成執行計劃。Greenplum的執行計劃生成同樣采用基于成本的方式,基于數據庫是由諸多segment實例組成,在選擇執行計劃時主節點還要綜合考慮節點間傳送數據的代價。
工作原理:
在主節點上存在query dispatcher (QD)進程,該進程前期負責查詢計劃的創建和調度,segment instance返回結果后,該進程再進行聚合與向用戶展示;segment host存在query executor (QE)進程,該進程負責其它節點相互通信與執行QD調度的執行計劃。
Greenplum最為一個嚴格的數據庫系統,同樣支持線性擴展,高可用性架構,數據與主機的容錯機制,還有數據的分區與壓縮功能。
想要充分的發揮出greenplum的性能,還要對greenplum的運行機制有更加深入的了解。<歡迎大家一起討論>