Greenplum高性能數據引擎探秘
原創【51CTO獨家特稿】Greenplum數據引擎是為新一代數據倉庫和大規模分析處理而建立的軟件解決方案。其最大的特點是不需要高端的硬件支持仍然可以支撐大規模的高性能數據倉庫和商業智能查詢。在數據倉庫、商業智能的應用上,尤其海量數據的處理方面性能極其優異。
高性能的大規模數據處理能力是DBA對數據庫夢寐以求的能力之一。從字面上不難看出,“高性能的大規模數據處理能力”中,一方面是針對“大規模的數據”,另一方面就是“數據的處理”,施加于二者之上的要求是“高性能”。
所以,高性能數據引擎也都是基于這兩個方面的來最求高效:“大規模”需要的是數據吞吐能力,就是所謂的I/O;“數據處理”需要的是并行計算能力,即充分利用硬件資源對任務及進程的最大化運行。
在理解提升I/O和并行計算的能力之前,我們需要深入Greenplum的核心,了解一下Greenplum的Shared Nothing架構。
Shared Nothing架構
與Oracle RAC的Shared Everything架構不同,Greenplum采用Shared Nothing架構。整個集群由很多個數據節點(Segment Host)和控制節點(Master Host)組成,其中每個數據節點上可以運行多個數據庫。
簡單來說,Shared Nothing是一個分布式的架構,每個節點相對獨立。典型的Shared Nothing系統會集數據庫、內存Cache、等存儲狀態的信息;而不在節點上保存狀態的信息。
對于應對大規模數據處理的服務器集群設備,若將Session狀態信息保存在各個數據節點上,各節點的Session復制會極大的影響性能;若采用Shared Nothing,保持每個節點的無狀態性,不再使用Session來保持全局的狀態,而是將Session直接放在數據庫中,在數據庫前再加一層如Memcached分布式Cache,這樣將可極大的提高性能,當改變Session中的對象時,將同步到Cache和數據庫。
基于Shared Nothing的分布式架構模式,Greenplum在高效處理I/O數據吞吐和并發計算的過程就很好理解。
高效I/O的實現
I/O瓶頸是數據庫,特別是大規模數據分析處理中永恒的話題。在Greenplum中,需要存儲的數據在進入進入數據庫時,將首先進行數據分布的處理工作;將一個表里的數據平均分布到每個節點,并為每個表指定一個分發列(distribute Column),之后便根據Hash來分布數據。
基于Shared Nothing的原則,Greenplum這樣處理可以充分發揮每個節點處I/O的處理能力。在這一過程中,控制節點(Master Host)將不再承擔計算任務,而只負責必要的邏輯控制和客戶端交互。
這是Greenplum的獨到之處。在多數集群的大規模數據處理系統中,都使用中心節點進行大量的控制和計算,大量的數據交換過程中將造成中心節點的負載過大;多數情況下,數據庫的I/O瓶頸在這一位置(處理過程)形成病灶,進而隨多核心CPU時序控制和處理響應的時段等問題開始蔓延,最終致使系統中很多節點的I/O位置病入膏肓。
在Greenplum中,控制節點只負責必要的邏輯處理和客戶端交互,節點間的數據交互將直接在節點間完成,而不需要控制節點;在一定的硬件資源支持下,高效I/O不再是DBA的夢想。
并行計算能力
I/O瓶頸的解決為并行計算能力的提升創造了良好的環境。下面我們一起來看看Greenplum是如何進行高性能的并行計算的。
在硬件方面,Greenplum可以使用標準的服務器并通過服務器間的高級通信連接,將多臺服務器組成一個強大的計算平臺,實現快速的海量并行運算。
在系統內部,Greenplum通過自己的并行數據流引擎來實現更多計算需求的硬件資源調度。一般,多表JOIN操作是考驗系統并行計算能力的經典案例。在Greenplum中,這一過程是將一個表里的數據平均分布到每個節點,并為每個表指定一個分發列,之后便根據Hash算法來分布數據。
這樣,每個節點的數據通過分發列即得知。如果對distribute Column做JOIN操作,只需要通過分發列得到數據的節點位置,并對相應的節點進行計算,最后合并結果就可完成。
當然,這種幾個表規模的查詢還不能證明Greenplum在并行計算方面的能力。但重要的是,通過Greenplum的并行數據流引擎,我們可以在一個主機上同時啟動多個PostgreSQL數據庫進行更多表的關聯及更復雜的查詢操作。這就充分發揮了硬件資源的性能。
在進行數據裝載時,不是常規的一個中心數據源將數據分發至各節點,而是所有節點同時讀取數據,然后根據Hash算法,將屬于自己的數據留下,將其他的節點的數據通過網絡直接傳送給需求方。這種多數據流的并行傳輸保證了高性能的數據裝載速度。
在進行并發數據分析時,Greenplum的另一個強大之處是支持對一個Segment節點的虛擬化,在載入數據后,我們可以對數據節點虛擬多個數據庫進行并行分析操作,依舊源于Share nothing架構,Greenplum的一個Segment可支持2-10個虛擬數據庫(官方推薦為6個),可以最大限度發揮硬件設備,提高并行規模和查詢分析效率。
【編輯推薦】