Nikita Shamgunov先生一生都在不斷地建立各種各樣的數(shù)據(jù)庫,8年時(shí)間在Facebook公司等建立了很多的數(shù)據(jù)庫,現(xiàn)在他在舊金山建立了一個(gè)下一代的分析的數(shù)據(jù)庫叫MemSQL。

他表示對(duì)于數(shù)據(jù)分析師來說現(xiàn)在的時(shí)代是一個(gè)很有意思的時(shí)代,首先Moore時(shí)代已經(jīng)結(jié)束了,我們看到很多的速度是放緩了,但是摩爾定律依然可使用于大數(shù)據(jù),數(shù)據(jù)每18個(gè)月翻一番,而且需要更多的技術(shù)允許我們來操作這么多的數(shù)據(jù)。Hadoop就是一個(gè)很好的技術(shù)幫助我們操作海量的數(shù)據(jù)。另外一個(gè)所發(fā)生的情況是十年前談到大數(shù)據(jù)的時(shí)候讓人非常地乏味?,F(xiàn)在有各種各樣的數(shù)據(jù),有存儲(chǔ)數(shù)據(jù)、形象數(shù)據(jù)、JS數(shù)據(jù)和結(jié)構(gòu)的數(shù)據(jù)。

關(guān)系型數(shù)據(jù)庫經(jīng)常會(huì)出現(xiàn)問題。同時(shí)數(shù)據(jù)是成功的關(guān)鍵,如果我們看一下世界上最成功的公司比如說谷歌、Facebook、亞馬遜所有的這些公司都非常癡迷于數(shù)據(jù),無論現(xiàn)在做什么,每個(gè)人五年之后可能都不再那么具有競爭性和競爭力了?他談及了數(shù)據(jù)的時(shí)效性,即是最近所搜集的數(shù)據(jù)會(huì)比一年前所搜集的數(shù)據(jù)更具有價(jià)值。Nikita在Facebook公司的時(shí)候也創(chuàng)造了很大的集群,當(dāng)設(shè)置的時(shí)間是19天,19天之后人們所搜集的Hadoop的數(shù)據(jù)就沒有了,因?yàn)樵贈(zèng)]有可用性了。所以Facebook很快改變了代碼,因?yàn)槔系臄?shù)據(jù)沒有用了,失去了相關(guān)性。所以這取決于你所處理的是哪種類型的數(shù)據(jù)。

實(shí)際上你所獲得的價(jià)值速度是很快的。我今天談的是半衰期很短的數(shù)據(jù)。處理這些數(shù)據(jù)的情境、實(shí)時(shí)的數(shù)據(jù)是什么樣的情境?也就是變化很快的數(shù)據(jù)。這可能會(huì)有一些業(yè)績上的評(píng)估。這是Facebook做的,每周二是重要的一天,我們會(huì)做這個(gè)工作,然后想捕獲所有關(guān)鍵的標(biāo)準(zhǔn),在Facebook的網(wǎng)站上、潛在的趨勢(shì),我們把整個(gè)Facebook的網(wǎng)站分成不同的功能,之后我們會(huì)測(cè)量每個(gè)功能所帶來的消耗量,可以很好地想象到Facebook是很知名的網(wǎng)站。所以把這些數(shù)據(jù)放入數(shù)據(jù)庫的時(shí)候是需要非常大的數(shù)據(jù)庫的。因此我們有一個(gè)數(shù)據(jù)庫可以把所有的數(shù)據(jù)都容納起來。

可是如果不管哪個(gè)地方發(fā)生變化你都是希望了解到的,比如說你有一個(gè)bug的話,整個(gè)的數(shù)據(jù)庫都會(huì)出現(xiàn)問題,這樣的情況下Facebook就會(huì)損失和 虧損。所以如果出現(xiàn)問題一定要快速的解決,同時(shí)找到哪個(gè)地方發(fā)生了問題。像ZYNGA這樣的公司有很多的網(wǎng)游他們會(huì)對(duì)數(shù)據(jù)進(jìn)行實(shí)時(shí)追蹤,還有AB測(cè)試。比 如說你想運(yùn)行各種各樣的測(cè)試看一下自己的網(wǎng)絡(luò)以及網(wǎng)絡(luò)上的廣告到底做得怎么樣,是不是有一些廣告比其他的廣告效果要好。這樣可以根據(jù)點(diǎn)擊率來進(jìn)行計(jì)算。越 早發(fā)現(xiàn)哪個(gè)廣告表現(xiàn)越好,這樣你的錢就可以從廣告中得到更多的錢,因?yàn)椴粫?huì)浪費(fèi)時(shí)間。但有一點(diǎn)很有趣,如果有實(shí)時(shí)的高效率系統(tǒng),在CPU的應(yīng)用上會(huì)很快地 用起來,因?yàn)闄C(jī)器是有學(xué)習(xí)能,所以你會(huì)很快地培訓(xùn)機(jī)器的模型。所以說如果你的數(shù)據(jù)量比較小的話,可以把它放到一個(gè)比較小的領(lǐng)域,如果說是大數(shù)據(jù)的話可能這 個(gè)時(shí)候需要用Hadoop來進(jìn)行處理了。所以得需要集群的方式來做數(shù)據(jù)處理。 有的時(shí)候用了Hadoop之后的速度會(huì)提到幾千倍或者是更快,因此你的速度會(huì)更快了。

再看一下,有越來越多的數(shù)據(jù)密集型實(shí)時(shí)的情況越來越多。比如說航空的飛機(jī)票和酒店的費(fèi)用,如果你想到一個(gè)網(wǎng)站上購買機(jī)票,每次做搜索的時(shí)候只花5秒 鐘的時(shí)間就可以找到搜索的結(jié)果。如果要是給出一個(gè)更低的時(shí)間更減少的話效益就更高了,但這需要不斷的培訓(xùn)或者說加強(qiáng)改善優(yōu)化。比如說在股票交易上可以了解 之后進(jìn)行追蹤看核心的數(shù)據(jù)和核心的衡量機(jī)制以及數(shù)據(jù)的遷移。有的時(shí)候數(shù)據(jù)量是非常大的,尤其是在股票交易上,有時(shí)候達(dá)到每秒6億運(yùn)行,在紐交所有這樣的 量。所以我們都希望我們的速度更快,這一點(diǎn)是大家都希望的,尤其是當(dāng)你有大數(shù)據(jù)技術(shù)來處理技術(shù)的時(shí)候,你希望它的處理會(huì)更快。

我們談到Latency的時(shí)候有兩種,一種是搜索或者是查詢Latency,你查詢了以后再回來這叫查詢的,但對(duì)數(shù)據(jù)Latency指的是時(shí)間差, 產(chǎn)出時(shí)間之后把它放入大數(shù)據(jù)系統(tǒng)中我們稱之為數(shù)據(jù)上的Latency。數(shù)據(jù)Latency只能在24小時(shí)之內(nèi)處理。所以,上傳數(shù)據(jù)的時(shí)候等你喝咖啡回來之 后數(shù)據(jù)還沒有上來,再喝咖啡,之后等到了以后就可以分析數(shù)據(jù)了。對(duì)查詢的Latency來說要花很長的時(shí)間才能運(yùn)行。所以說解決方案是什么呢?我們有大量 的研究來解決這個(gè)問題,尤其是在Hadoop的平臺(tái)上。所以有一個(gè)Storm,這個(gè)技術(shù)非常好,可以把這個(gè)數(shù)據(jù)通過節(jié)點(diǎn)來計(jì)算,這個(gè)數(shù)據(jù)在進(jìn)入系統(tǒng)中的時(shí) 候就開始計(jì)算了。Storm有時(shí)候不會(huì)存儲(chǔ)數(shù)據(jù)只是計(jì)算數(shù)據(jù),所以可以把它放到Hadoop。

另外還有Cloudera Impala,這是以前的系統(tǒng)允許你可以實(shí)時(shí)地處理Hadoop數(shù)據(jù)和HPC數(shù)據(jù)。另外他還提到了MemSQL,一個(gè)分布式的in-memory的數(shù)據(jù)庫,可以在成千上萬的節(jié)點(diǎn)上運(yùn)行。

實(shí)際上它是能夠處理并分析全球最具有挑戰(zhàn)性的工作量的,主要是處理兩件事,第一是數(shù)據(jù)的Latency,它可以直接地用SQL來處理,同時(shí)我們也可 以進(jìn)行任何時(shí)候的查詢,利用所有的核和處理器以及集群中的所有的節(jié)點(diǎn)來處理。所以怎么來處理數(shù)據(jù)上出現(xiàn)的Latency我們可以提供超快速的數(shù)據(jù)負(fù)荷,可 以把數(shù)據(jù)上載到系統(tǒng)中通過多個(gè)電腦、多個(gè)終端、多個(gè)節(jié)點(diǎn),這樣在集群里面可以把數(shù)據(jù)完全地引入系統(tǒng)中。同時(shí)它也可以使你能實(shí)時(shí)地插入數(shù)據(jù),不需要有一個(gè)特 殊的批上載,可以任何時(shí)候可以把數(shù)據(jù)直接地放入系統(tǒng)中。

另外對(duì)查詢的Latency來說我們有優(yōu)化器,也就是說大家如果處理NPP系統(tǒng),一旦查詢出現(xiàn)在系統(tǒng)中就可以看一下把它分解成次查詢,之后在這個(gè)階 段集群的節(jié)點(diǎn)中處理最后給你一個(gè)最終的答案。我我對(duì)工程師或者是在座的特別喜歡技術(shù)的我會(huì)告訴你它是怎么做的,我們有一個(gè)Lock-free data,一個(gè)電腦上有很多核,可以允許我讀寫但不對(duì)數(shù)據(jù)鎖定。所以如果一方面需要上載數(shù)據(jù),另外一方面也需要上載查詢的話,這樣的結(jié)構(gòu)可以很好地處理數(shù) 據(jù)。另外這個(gè)系統(tǒng)是分布的架構(gòu),這個(gè)架構(gòu)是由集群器等的,這是存儲(chǔ)數(shù)據(jù)的地方,這個(gè)集存器有一個(gè)電腦的節(jié)點(diǎn),用戶可以訪問集群器中間的部 分,Aggregator可以共享信息,比如說數(shù)據(jù)是怎樣分析的??梢灾荒艿匮刂?jié)點(diǎn)來分布。另外可以通過節(jié)點(diǎn)來復(fù)制,之后處理之后再把信息反饋給用戶。 看起來就像一個(gè)數(shù)據(jù)庫一樣,有耐用性同時(shí)也可以復(fù)制。你可以關(guān)掉并且開放之后數(shù)據(jù)還是在數(shù)據(jù)庫里面。

再看一下復(fù)制性,高獲取性是非常重要,因此我們有兩個(gè)中心來進(jìn)行復(fù)制。第二,在一個(gè)數(shù)據(jù)中心里也有安全性的數(shù)據(jù)的復(fù)制,所以你可以有各種各樣的數(shù) 據(jù),有的時(shí)候有一些節(jié)點(diǎn)出現(xiàn)了問題這時(shí)候會(huì)有復(fù)制和副本出現(xiàn),這樣不會(huì)出現(xiàn)數(shù)據(jù)的損失。還有是Facebook對(duì)我們產(chǎn)生很大的影響,就是SQL到C++ 編碼的生成,使得執(zhí)行起來的速度非???。我們把SQL的聲明轉(zhuǎn)變成C++的編碼。如果在做的時(shí)候要考慮到例子,我們把它拿出來之后加上就可以形成SQL到 C++的編碼轉(zhuǎn)換。當(dāng)然在進(jìn)入不同的系統(tǒng)的時(shí)候可以在很短的時(shí)間進(jìn)行實(shí)施和執(zhí)行,這樣會(huì)使我們同時(shí)來進(jìn)行很多的數(shù)據(jù)處理或者是查詢處理。

接下來我給大家做一個(gè)展示,因?yàn)镈EMO總會(huì)讓大家看到真實(shí)的東西。每次做DEMO的時(shí)候有一些意外的情況還是比較有趣的。在這個(gè)DEMO中我給大 家看一下這32個(gè)節(jié)點(diǎn)還有8個(gè)Aggregator,之后我們把整個(gè)的程序從8個(gè)節(jié)點(diǎn)中泵入。這個(gè)集群是半個(gè)小時(shí)之前啟動(dòng)的,也就是我進(jìn)入這個(gè)會(huì)議廳之前 的半個(gè)小時(shí),所以在系統(tǒng)中應(yīng)該有一些數(shù)據(jù)了,之后會(huì)發(fā)出一些非常復(fù)雜的查詢之后看一下它是怎么表現(xiàn)的。接下來再看一下,這應(yīng)該是48個(gè)集群,我是在亞馬遜 EC2上部署的,由于有公共云所以計(jì)算起來很簡單,你只需要編程之后點(diǎn)擊輸入,現(xiàn)在84個(gè)集群就可以開始運(yùn)行了。這個(gè)集群的總內(nèi)存是2.7TB,所以可以 把2.7TB的數(shù)據(jù)泵入,在系統(tǒng)中任何的記錄都會(huì)在很短的時(shí)間里處理完。好,接下來我們看一下。這是一個(gè)終端的窗口,這有一些數(shù)據(jù)我們看系統(tǒng)中是怎樣的, 在這兒有數(shù)據(jù)庫的協(xié)議,在做發(fā)言之前我們已經(jīng)做了,已經(jīng)有幾個(gè)表格了,看起來還不錯(cuò)運(yùn)行正常。所以,這里面都有很多的記錄。這有一個(gè)表格,這個(gè)表中間顯示 一下數(shù)字,把數(shù)據(jù)插入,在兩個(gè)查詢之間有這么一個(gè)數(shù)據(jù)輸入了。這實(shí)際上是占用CPU的,在集群的每個(gè)節(jié)點(diǎn)上都是占用CPU的。集群上的每個(gè)節(jié)點(diǎn)、每個(gè)核都 在工作。所以目前還沒有什么意外,我們最終看到有26億的記錄。因此可以看到速度是非??於伊渴欠浅4蟮?。所以可以把東西進(jìn)行修改和修訂。

我們有一個(gè)客戶,每天要輸入10億個(gè)記錄,而且同時(shí)還可以對(duì)數(shù)據(jù)進(jìn)行匯總監(jiān)測(cè)一下網(wǎng)站怎么樣。但是雖說它是非常簡單的查詢都可以,比如說用一些簡單 的索引或者說把數(shù)據(jù)存儲(chǔ)在某些地方我在這里還有其他的幾個(gè)查詢,這是其他的一些查詢。這里有一個(gè)匯總,有一點(diǎn)是必須有趣的,也就是你有一種直覺,可以看到 數(shù)據(jù)在整個(gè)的集群中布置的話是可以復(fù)制的,你選擇了之后就可以對(duì)它進(jìn)行復(fù)制。在這兒我就把數(shù)據(jù)推到客戶這邊,所以數(shù)據(jù)運(yùn)行得非???。最后看到這兒可以運(yùn)行 一些非常復(fù)雜的東西,這些就是查詢的例子,基本上是數(shù)據(jù)庫的查詢,這是一個(gè)很大的查詢,我可以運(yùn)行查詢程度一個(gè)客戶,有各種各樣的節(jié)點(diǎn)。但基本的一點(diǎn)是, 它是一個(gè)生態(tài)系統(tǒng),可以表達(dá)復(fù)雜的東西,可以表達(dá)復(fù)雜的集合,大量的數(shù)據(jù)中可以有很重要的變化,這是一個(gè)重要的視角。

給大家一個(gè)信息是每個(gè)工作都需要的工具,如果你需要進(jìn)行分析目前市場(chǎng)上可用的最好的技術(shù)就是這個(gè)。但是在大數(shù)據(jù)中有很多的情境,有非常不多的數(shù)據(jù)運(yùn) 行的特點(diǎn)可能我覺得工程師需要像拿一個(gè)瑞士軍刀這樣的組合,對(duì)每個(gè)工具選擇適合的工具,SQL就是這樣的一個(gè)工具,對(duì)高速度的工具進(jìn)行很好的處理,因?yàn)榭?以大大地提高運(yùn)行的效率,對(duì)數(shù)據(jù)的快速變化來說有很好的處理。

分享到

huanghui

相關(guān)推薦