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