既然介紹了一些技術(shù),給大家介紹一下南大通用的GBase 8a,它們中間有萬(wàn)兆網(wǎng)絡(luò)把它連接起來(lái),它分為三個(gè)節(jié)點(diǎn)或者兩個(gè)節(jié)點(diǎn)一組,用組進(jìn)行管理。組管理的目的是在這個(gè)同組的數(shù)據(jù)還要互相備份,想通過(guò)多副本機(jī)制保證集群的高可用性。它的數(shù)據(jù)從哪里來(lái)?我們說(shuō)基本上它的數(shù)據(jù)都是其他的數(shù)據(jù)源,生產(chǎn)系統(tǒng)、各個(gè)交易系統(tǒng)的數(shù)據(jù),每天定時(shí)的會(huì)把數(shù)據(jù)跑出來(lái),通過(guò)我們的分發(fā)節(jié)點(diǎn),把數(shù)據(jù)分發(fā)以后,分發(fā)到我們的節(jié)點(diǎn)上。上層應(yīng)用可以連到集群的任何一個(gè)節(jié)點(diǎn),下達(dá)它的SQL命令,它在哪個(gè)節(jié)點(diǎn)執(zhí)行的結(jié)果都是一樣的。
MPP數(shù)據(jù)庫(kù)還支持適合于分析類應(yīng)用,它的另外一個(gè)特點(diǎn)是列存儲(chǔ)的。行存儲(chǔ)的數(shù)據(jù)庫(kù)按行為一塊唯一配置來(lái)存的,特點(diǎn)是小數(shù)據(jù)量,要改一個(gè)數(shù),直接把一行數(shù)據(jù)取出來(lái),把這些數(shù)據(jù)改了就可以。它的缺點(diǎn)就是它查詢的時(shí)候,如果大家有經(jīng)驗(yàn),查詢性能比較慢,它要單獨(dú)列一些索引,數(shù)據(jù)和索引的分離。另外,行存數(shù)據(jù)基本上會(huì)壓縮,另外,它查詢的時(shí)候?qū)δ骋涣凶霾僮鳎仨毎颜械臄?shù)據(jù)拎出來(lái),然后找到那一列,這樣它I/O占的比較多。列存數(shù)據(jù)庫(kù)是按列進(jìn)行存儲(chǔ)的,優(yōu)勢(shì)在于查詢、統(tǒng)計(jì)、分析。我們查詢的時(shí)候可能一個(gè)寬表,可是我們只對(duì)其中的個(gè)別列進(jìn)行分析,它分析哪一列,直接把那一列的數(shù)據(jù)讀持續(xù)就可以了。另外,列存儲(chǔ)基本上都是壓縮的。所以,這塊它就是占用的空間比較小,I/O也大量的減少。從行存轉(zhuǎn)化成列存儲(chǔ)以后,采取性能一般都有數(shù)十倍的提升,而且壓縮比有的高達(dá)1:20。分布式的數(shù)據(jù)庫(kù)有幾種分布策略,有復(fù)制的還有分布的,假如我們有復(fù)制表,把一個(gè)小表,緯度表可以分別存儲(chǔ)到各個(gè)節(jié)點(diǎn)上。分布表是完整的數(shù)存到各個(gè)節(jié)點(diǎn)上,分布表就是我要按照一定的分布策略,把這個(gè)表拆成小表分發(fā)到各個(gè)節(jié)點(diǎn)上。我們分隨機(jī)分布表和hash分布表,hash就是去一列,把相同值的節(jié)點(diǎn)分發(fā)到各個(gè)節(jié)點(diǎn)上。對(duì)于我們一般常用的新型模型,假如說(shuō)一些緯度表,我們就采用復(fù)制表的方式把整個(gè)表都放到各個(gè)節(jié)點(diǎn)上。同組的數(shù)據(jù)做一個(gè)互為備份,萬(wàn)一一個(gè)節(jié)點(diǎn)失敗了,可以另外一個(gè)節(jié)點(diǎn)返回正確的結(jié)果。
剛才說(shuō)了hash分布,對(duì)于分布式查詢來(lái)說(shuō),其實(shí)比較難處理的在于兩個(gè)大表的關(guān)聯(lián)運(yùn)算。我們分為靜態(tài)hash和動(dòng)態(tài)hash。假如都是按關(guān)聯(lián)鍵事先把數(shù)據(jù)排在一個(gè)節(jié)點(diǎn)上,只要本地的兩個(gè)小表進(jìn)行關(guān)聯(lián),把結(jié)果上傳給上層應(yīng)用就可以了。還有一種情況,其中有表不是按照你這個(gè)hash等值關(guān)聯(lián)鍵進(jìn)行分布的,這時(shí)候要按照鍵重新動(dòng)態(tài)把這個(gè)數(shù)據(jù)再做一次分布之后,再進(jìn)行關(guān)聯(lián)操作和其他預(yù)算,這就叫動(dòng)態(tài)的hash。但是,因?yàn)樗写鎯?chǔ),只把這一類數(shù)據(jù)傳一下就可以了。
并行,單機(jī)版也可以有并行,算子里頭,像掃描、關(guān)聯(lián),以及聚合這種操作都可以把它并行,最大的利用單機(jī)的多核資源。我們說(shuō)MPP是充分的利用了單機(jī)的并行,然后在多個(gè)節(jié)點(diǎn)上再一次更大規(guī)模的并行。像這樣它就能夠,假如說(shuō)可以建立100個(gè)節(jié)點(diǎn)的這種架構(gòu)的系統(tǒng),那么它就能達(dá)到1000個(gè)核的運(yùn)算能力,甚至I/O達(dá)到10GB/s,內(nèi)存達(dá)到單節(jié)點(diǎn),要支持這樣大的能力,它的成本肯定是不可預(yù)想的。
高可用用組的方式存副本,節(jié)點(diǎn)正常的時(shí)候每個(gè)節(jié)點(diǎn)都參與運(yùn)算,當(dāng)其中一個(gè)節(jié)點(diǎn)出故障的時(shí)候,它就把這個(gè)任務(wù)發(fā)給其他有副本的節(jié)點(diǎn)來(lái)保證高可用性,就是節(jié)點(diǎn)出故障了也能返回正確的結(jié)果。我們說(shuō)的擴(kuò)展,傳統(tǒng)的SMP的數(shù)據(jù)庫(kù)都是縱向的擴(kuò)展,MPP數(shù)據(jù)庫(kù)是通過(guò)橫向的,增加節(jié)點(diǎn)的方式來(lái)進(jìn)行擴(kuò)展。那么,擴(kuò)展的目的一個(gè)是提升性能,再一個(gè)就是支持更大的數(shù)據(jù)量。MPP數(shù)據(jù)庫(kù)的應(yīng)用方向主要是適合機(jī)器查詢、統(tǒng)計(jì)分析等。
下面給大家簡(jiǎn)單介紹一下案例。MPP數(shù)據(jù)庫(kù)在金融行業(yè)已經(jīng)有成功的上線的項(xiàng)目。主要說(shuō)一下農(nóng)行的數(shù)據(jù)倉(cāng)庫(kù)的項(xiàng)目,是真正的實(shí)現(xiàn)了PB級(jí)的大數(shù)據(jù)平臺(tái)。它總體架構(gòu)分為六層,最底下是數(shù)據(jù)來(lái)源層,都往這個(gè)平臺(tái)上吐數(shù)據(jù),底下做了數(shù)據(jù)初步的處理層,建了一個(gè)將近100個(gè)節(jié)點(diǎn)的Hadoop集群,做數(shù)據(jù)的抽取、轉(zhuǎn)換,另外做銀行系統(tǒng)拉鏈的加工。然后就是模型指標(biāo)層,用Gbase Ba MPP Cluster。上層還有數(shù)據(jù)集市層,分別建了四個(gè)數(shù)據(jù)集市,每個(gè)集市都是用了一個(gè)MPP的數(shù)據(jù)庫(kù)。那么,因?yàn)殂y行的業(yè)務(wù)非常復(fù)雜,它通過(guò)建多個(gè)集群,而且這么嚴(yán)格的按這個(gè)層來(lái)建立,主要是避免這次假如說(shuō)這里失敗就只影響我這一層,再失敗可以從我的下一層再重新來(lái)一遍,所以保障了可用性。上層應(yīng)用,當(dāng)然它還有中間件,以及上層的應(yīng)用。MPP物理架構(gòu)是采用華為的國(guó)產(chǎn)設(shè)備,我們數(shù)據(jù)庫(kù)也是國(guó)產(chǎn)數(shù)據(jù)庫(kù)。在底下大的就是它的主倉(cāng)庫(kù),數(shù)據(jù)倉(cāng)庫(kù),是兩個(gè)56集群,總共是112個(gè)節(jié)點(diǎn),還有16個(gè)加載機(jī),是雙活的,一個(gè)寫處理當(dāng)天的數(shù)據(jù),一個(gè)是查詢的集群是查詢昨天的數(shù)據(jù)。這個(gè)項(xiàng)目是2013年開(kāi)始應(yīng)用,一直連調(diào)。到2014年主庫(kù)上線了,然后不斷的做優(yōu)化,2016年準(zhǔn)備要建八個(gè)數(shù)據(jù)集市,總共的節(jié)點(diǎn)數(shù)加Hadoop要打造800個(gè)節(jié)點(diǎn)。所以,這個(gè)項(xiàng)目是針對(duì)一個(gè)海量數(shù)據(jù)處理,因?yàn)樗鼣?shù)據(jù)處理量已經(jīng)超過(guò)2PB了,而且有50多數(shù)據(jù)源于,目前節(jié)點(diǎn)數(shù)已經(jīng)超過(guò)200個(gè)節(jié)點(diǎn)了。它的復(fù)雜業(yè)務(wù)是SQL 60000多個(gè),將近15000多張表,整個(gè)成本是千萬(wàn)級(jí)的成本。