大數(shù)據(jù)教父Micheal Stonebraker為你剖析大數(shù)據(jù)的秘密
君小田 | 2016-01-05 13:15
【數(shù)據(jù)猿導(dǎo)讀】 Michael Stonebraker,生于1943年10月11日,因?qū)ΜF(xiàn)代數(shù)據(jù)庫系統(tǒng)底層的概念與實(shí)踐所做出的基礎(chǔ)性貢獻(xiàn),最終摘得被譽(yù)為“計(jì)算機(jī)界諾貝爾獎(jiǎng)”的2015年度圖靈獎(jiǎng)。本文為他在學(xué)術(shù)研討會(huì)上的演講內(nèi)容

今天,我要跟大家談?wù)劥髷?shù)據(jù)。大數(shù)據(jù)這個(gè)詞其實(shí)是一些做營銷的人發(fā)明的,大概是幾年前的事情。然后我也非常高興,我終于知道過去四十年自己到底在做什么,我原來是在做大數(shù)據(jù)。所以我想跟大家談?wù)劥髷?shù)據(jù)對(duì)于我來說意味著什么,以及我認(rèn)為的大數(shù)據(jù)中什么是重要的。
關(guān)于大數(shù)據(jù),很多人說意味著三件事情,這三個(gè)單詞都是以字母 V 開頭的。
大數(shù)據(jù)的問題,第一個(gè)就是量( volume )很大。第二個(gè)是這些數(shù)據(jù)的產(chǎn)生速度( velocity )太快了,軟件跟不上。第三個(gè)問題是數(shù)據(jù)來自許多不同的地方( variety ),你需要進(jìn)行數(shù)據(jù)整合,但這些數(shù)據(jù)來源太多了,你想要整合這些數(shù)據(jù)就非常困難。所以在這三個(gè)“ V ”領(lǐng)域你要解決的問題是完全不一樣的,我分別給大家談?wù)劇?/p>
Big Volume 大量數(shù)據(jù)
在量方面,第一種情況是你要想做一些非常愚蠢的分析,比如說 SQL 分析。第二種情況是,你想要做非常復(fù)雜的分析。前者是比較簡單的,如果你想做 SQL 分析的話,我知道你可能要在上百個(gè)節(jié)點(diǎn), PB 的數(shù)據(jù)上面運(yùn)行二十到三十個(gè)生產(chǎn)實(shí)現(xiàn),日以繼夜地進(jìn)行分析。在這些數(shù)據(jù)倉庫產(chǎn)品中,有幾款已經(jīng)做得還不錯(cuò)了。所以,這個(gè)市場的需求其實(shí)已經(jīng)被一些商業(yè)軟件很好地解決了,比如說 Vertica ,就是這樣的一家數(shù)據(jù)倉庫公司。他們最大的用戶叫做 Zynga 。 Zynga 開發(fā)了一個(gè)名叫 FarmVille 的游戲。 Zynga 會(huì)實(shí)時(shí)記錄全世界每一個(gè)用戶在玩他們的游戲時(shí)每一次的點(diǎn)擊,這樣的話就可以利用他們的數(shù)據(jù)做人工智能研究,看看如何能夠讓全世界的用戶購買更多虛擬商品。所以,我認(rèn)為這個(gè)問題已經(jīng)得到了解決, 因?yàn)楝F(xiàn)在即使你從用戶身上獲得大量的數(shù)據(jù),他們也不會(huì)感到不快。但我要提醒一下大家,在過去十年里,我們已經(jīng)經(jīng)歷了一個(gè)非常巨大的變化。
大約十年以前,如果你去和一些賣數(shù)據(jù)倉庫產(chǎn)品的公司聊的話,他們基本上賣的都是一種叫做“行存儲(chǔ)”( row storage )的產(chǎn)品,這是指存儲(chǔ)的下一個(gè)對(duì)象是同條記錄的下一個(gè)屬性。他們在磁盤上用行的方式存儲(chǔ)數(shù)據(jù)。 SQL 服務(wù)器以前就是這樣的。
其他的數(shù)據(jù)倉庫公司都是賣這樣的產(chǎn)品。當(dāng)時(shí)我成立的這家公司叫做 Vertica 。我們從另外一個(gè)角度來看待這件事情,把行轉(zhuǎn) 90 度,變成列,用列的方式存儲(chǔ)數(shù)據(jù)。
于是存儲(chǔ)的下一個(gè)對(duì)象就從同一條記錄的下一個(gè)屬性,轉(zhuǎn)變?yōu)橄乱粭l記錄的同一屬性。這種方式比原來的行存儲(chǔ)方式要快很多。 Vertica 完全顛覆了這個(gè)市場。它的速度比行存儲(chǔ)產(chǎn)品要快 50 到 100 倍。這是顛覆性的。
而這是由一家創(chuàng)業(yè)公司帶來的。所以我認(rèn)為,在這個(gè)市場上實(shí)現(xiàn)顛覆的一種常見方式就是成立一家公司,然后去挑戰(zhàn)那些大公司,讓他們感受到威脅。所以在過去的十年里,整個(gè)市場都開始轉(zhuǎn)而采用列存儲(chǔ)。其中包括微軟的數(shù)據(jù)倉庫產(chǎn)品 PDW ,也是用的列存儲(chǔ), 不過是 10 年后才用的。為什么列存儲(chǔ)的速度要比行存儲(chǔ)快很多呢?當(dāng)然,這背后有很深層次的技術(shù)原因,不過我現(xiàn)在沒有時(shí)間去詳細(xì)解釋了。廠商要取得成功,他們必須做出轉(zhuǎn)變。于是,基本上除了 Oracle 外,所有其他廠商都開始采用多節(jié)點(diǎn)列存儲(chǔ)的方式,它的速度非常快。在過去的十年里,正是由于這種顛覆性的轉(zhuǎn)變,數(shù)據(jù)倉庫產(chǎn)品的性能提升了 50 倍。但是在我看來,這已經(jīng)是明日黃花了,就像 PeterLee 所說的,人們現(xiàn)在感興趣的是機(jī)器學(xué)習(xí),機(jī)器翻譯,數(shù)據(jù)聚類,預(yù)測模型,這些才是接下來要做的重要事情。
借用華爾街的說法,我們已經(jīng)進(jìn)入了“股市分析員”的時(shí)代。這些分析員其實(shí)與火箭科學(xué)家無異。如果你是一名從事數(shù)據(jù)庫工作的人員,當(dāng)你仔細(xì)去看他們的算法和他們的工作,你會(huì)發(fā)現(xiàn),其實(shí)大部分的算法都是采用數(shù)組形式的線性代數(shù),而不是表格形式的 SQL 。這與現(xiàn)實(shí)世界毫無關(guān)系。如果你再仔細(xì)看這些算法的話,你會(huì)發(fā)現(xiàn),其實(shí)大部分的算法都是內(nèi)循環(huán)迭代,也就是執(zhí)行幾次諸如矩陣乘法、奇異值分解之類的線性代數(shù)運(yùn)算。為了說明這一點(diǎn),我來舉一個(gè)非常簡單的例子。
這個(gè)例子就是人們?yōu)橹偪竦墓善笔袌?。股票市場有漲有跌。假設(shè)有兩只股票—— A 和 B ,讓我們來看一下它們在過去五年所有交易日的收盤價(jià)。如果你想的話,可以假設(shè)這兩只股票是華為和阿里巴巴的股票。如果你在做電子交易,你可能想知道這兩只股票的收盤價(jià)是否有關(guān)聯(lián),它們的時(shí)間序列是否有關(guān)聯(lián)。如果有關(guān)聯(lián),那么如果一只股票漲了,你是否應(yīng)該購買另一只股票?所以你能做的最簡單的事情就是計(jì)算一下這兩個(gè)時(shí)間序列之間的協(xié)方差。具體的做法我已從我的統(tǒng)計(jì)課本那里抄了下來——如果我沒有抄錯(cuò)的話——就是幻燈片最下面的紅色字。這就是你想要計(jì)算的東西。
其實(shí)并不難。你在手機(jī)上也可以做這種計(jì)算。但現(xiàn)在,假設(shè)你要對(duì)紐約證交所的所有股票進(jìn)行這樣的計(jì)算,有差不多四千只股票。五年的數(shù)據(jù)大約有一千個(gè)交易日。假設(shè)你有這樣一個(gè)紅色的矩陣,其中你有一只股票的一千個(gè)收盤價(jià),然后一共有四千只股票。我要做的就是要計(jì)算每一對(duì)股票之間的協(xié)方差。
那會(huì)是怎樣的呢?請?jiān)试S我自由發(fā)揮一下,忽略掉那些常量減去他們的平均數(shù)。這就是紅色的矩陣,矩陣乘以它的轉(zhuǎn)置矩陣。也就是我們想要做的內(nèi)循環(huán)。所以,大多數(shù)算法最終都要應(yīng)用于這種超大規(guī)模的運(yùn)算。
理想的大數(shù)據(jù)用戶是當(dāng)你解決了這個(gè)問題后,他馬上就會(huì)想要更多的訓(xùn)練數(shù)據(jù)。你為華爾街的股市分析員解決了問題后,他又會(huì)想要為全世界所有的股票做這種計(jì)算,而不是僅僅紐約證交所上的股票。這就是你想要做的事情,不過不是在 SQL 中做,甚至不是在表格中定義的。所以我認(rèn)為,對(duì)于一個(gè)數(shù)據(jù)科學(xué)家來說,他必須要對(duì)他的數(shù)據(jù)進(jìn)行清理,去粗取精。這是他現(xiàn)在大部分時(shí)間所做的事情。
待會(huì)我在談到多樣性問題的時(shí)候會(huì)再說一下這一點(diǎn)。所以,數(shù)據(jù)科學(xué)家退休前所從事的工作就是數(shù)據(jù)管理和股票分析員的那種分析工作。而且你必須不斷重復(fù)去做這種工作。這就是數(shù)據(jù)科學(xué)家所做的事情。目前我們有一些商業(yè)分析師,他們在數(shù)據(jù)倉庫上運(yùn)行 SQL ,所有這些都要被數(shù)據(jù)科學(xué)家所取代,在他們的數(shù)據(jù)上執(zhí)行這種操作。那么我們應(yīng)如何滿足這種用戶需求呢?你要做的就是數(shù)組分析。目前有大量的數(shù)組計(jì)算。你可能會(huì)說,我有一些問題是在圖表上定義的,比如說社交網(wǎng)絡(luò)這種問題。可是我認(rèn)為,圖表其實(shí)只是一種稀疏數(shù)組。它跟數(shù)組是類似的。然后你還要進(jìn)行數(shù)據(jù)管理,不斷重復(fù)這種操作,還要擴(kuò)大規(guī)模。因?yàn)橹灰獫M足了用戶的一個(gè)需求,他就會(huì)讓你去處理另一個(gè)更復(fù)雜的問題。這個(gè)問題可能涉及更多的核心、節(jié)點(diǎn)和超出內(nèi)存的數(shù)據(jù)。這就是真正的大數(shù)據(jù),也是問題所在。
那么應(yīng)該如何解決這個(gè)問題呢?如果你現(xiàn)在要做這樣的工作的話,你很可能會(huì)成為 R 、 SaaS 或 Matlab 等統(tǒng)計(jì)軟件的忠實(shí)用戶。
當(dāng)然,你可以選擇 R 。但它基本上沒有數(shù)據(jù)管理能力,因?yàn)樗腔谖募到y(tǒng)的。你可以用 R 來進(jìn)行大量的數(shù)組分析,但它無法擴(kuò)展,實(shí)現(xiàn)不了真正的數(shù)據(jù)管理。所以它只是解決了問題的一部分?;蛘呶覀兛梢允褂?Oracle 。 Oracle 的擴(kuò)展性也不是很好。但是先不管這一點(diǎn)。那么你應(yīng)該如何在一個(gè)關(guān)系型數(shù)據(jù)庫中做矩陣乘法呢?這樣做的效果并不是很好。你們當(dāng)中可能有些人會(huì)覺得自己很聰明,于是嘗試在 SQL 中寫矩陣乘法代碼,這是一種不錯(cuò)的練習(xí)方法。這是可以做到的。它要求用表格去模擬數(shù)組的表現(xiàn)形式,但它的速度真的很慢。 而且在 SQL 中也很難去做奇異值分解。所以單就 SQL 來說,那是有問題的。
當(dāng)然你可以說,??今大多數(shù)的系統(tǒng)都支持用戶自定義功能,所以我們可以將矩陣運(yùn)算的代碼編寫為用戶自定義功能。這種想法已經(jīng)開始實(shí)現(xiàn)。用戶現(xiàn)在可以用 R 或 C++ 語言編寫自定義功能。但是這種方式很別扭,做起來難度也很大。所以這并不是一個(gè)很好的想法。那么現(xiàn)在人們是怎么做的呢?他們對(duì)此一籌莫展嗎?他們把數(shù)據(jù)放在一個(gè)關(guān)系型數(shù)據(jù)庫系統(tǒng)里,在上面運(yùn)行數(shù)據(jù)管理,將他們感興趣的東西拷貝到 R 或 Matlab ,然后在上面進(jìn)行統(tǒng)計(jì)分析。
這是一個(gè)很糟糕的解決方案,因?yàn)槟愕脤W(xué)會(huì)兩種完全不同的系統(tǒng)。而且要在兩個(gè)系統(tǒng)當(dāng)中來回拷貝。這樣做的結(jié)果是讓網(wǎng)絡(luò)銷售商大賺了一筆。而且 R 還無法擴(kuò)展。所以研究的挑戰(zhàn)就在于找出一種更好的方法。很明顯這就是人們現(xiàn)在每天所做的,也是數(shù)據(jù)科學(xué)家在實(shí)現(xiàn)世界中所面臨的挑戰(zhàn)。我們應(yīng)該可以做得更好。我傾向于將它視為數(shù)組問題來看待。這并不是表格問題。我們?yōu)槭裁床荒苡脭?shù)組型數(shù)據(jù)庫系統(tǒng)呢?所以,跳出你的思維條框,擺脫那些表格,用數(shù)組去取代它們。所以幾年前我寫了一個(gè)名叫 SciDB 的系統(tǒng)。它支持在 SQL 上使用數(shù)組,內(nèi)置有分析方法,對(duì)于矩陣乘法的計(jì)算速度非???,而且與現(xiàn)在許多其他軟件一樣,它是基于開源的 Linux 系統(tǒng)開發(fā)的。你可以試著去 SciDB.org 尋找一個(gè)顛覆性的解決方案,看看結(jié)果如何。
之所以說數(shù)組是一個(gè)理想的解決方案,是因?yàn)槿绻銓⒁粋€(gè)表格模擬為數(shù)組,那么你會(huì)得到一個(gè)維度為 I 和 J 的數(shù)組,而且被賦予了值。如果你想得到一個(gè) 4x4 的矩陣,那么它的左邊就是表格的模擬。
注意剛才已經(jīng)明確指定了維度。然后有大量的數(shù)據(jù)。右邊是數(shù)組表達(dá)。你可以完全壓縮掉這些維度。很多時(shí)候你想要得到該數(shù)組的一個(gè)子集,例如地理子集。它在右邊可以很容易地定位。但在左邊就很難做到。所以數(shù)組型數(shù)據(jù)庫系統(tǒng)具有一些先天的優(yōu)勢。我認(rèn)為從長期來說,這種技術(shù)將成為最終的贏者?,F(xiàn)在我必須向大家坦白, Hadoop 曾經(jīng)存在很嚴(yán)重的問題。讓我們來看看 2012 年前后的 Hadoop 。
Hadoop 是一個(gè)真正的三層堆棧。位于底層的是文件系統(tǒng) HDFS 。 中間層是由谷歌寫的 Map-Reduce 。雅虎寫了一個(gè)開源的版本。然后在頂層有各種不同的高級(jí)系統(tǒng)—— Hive 、 Pig 、 Hahout 等等。這就是 Hadoop 在大約三年前出售的堆棧。他們發(fā)現(xiàn),當(dāng)你試圖讓實(shí)現(xiàn)世界的用戶使用該產(chǎn)品時(shí), Map-Reduce 并不是一個(gè)特別吸引人的分布式計(jì)算平臺(tái),這其中有許多技術(shù)上的原因。所以它在分布式計(jì)算上是失敗了。另外, Map-Reduce 也不是一個(gè)很好的數(shù)據(jù)管理平臺(tái)。將 SQL 放在 Map-Reduce 頂層導(dǎo)致性能慘不忍睹。所以說 Map-Reduce 無論是在數(shù)據(jù)管理還是在分布式計(jì)算上都基本算得上完敗。那么是誰放棄了 Map-Reduce 呢?
谷歌在寫 Map-Reduce 的時(shí)候,是專門針對(duì)他們的 Web 搜索數(shù)據(jù)庫寫的。他們在大概 2001 年就放棄了 Map-Reduce 。而 Map-Reduce 當(dāng)時(shí)設(shè)計(jì)所針對(duì)的應(yīng)用,谷歌在五年后也將之放棄了。他們后來為其他項(xiàng)目開發(fā)了 Dremmel 、 F1 等不同系統(tǒng)。 Map-Reduce 已淡出谷歌的視線,他們對(duì)之失去了興趣,不想進(jìn)一步去開發(fā)了。 Cloudera 是 Hadoop 的一個(gè)主要供應(yīng)商,他們也基本上放棄了 Map-Reduce 。所以他們的新 SQL 數(shù)據(jù)庫管理系統(tǒng)—— Impala 并不是建立在 Map-Reduce 上的。 HortonWorks 和 Facebook 也有類似的項(xiàng)目。那么, Hadoop 堆棧的未來究竟在哪里呢?
它可以用作底部的文件系統(tǒng)。但由于 HDFS 存在非常糟糕的性能問題,因此先要將這些問題解決掉才行。未來 SQL 將位于頂層,類似于 Impala 的系統(tǒng)。大家知道,數(shù)據(jù)倉庫形式的數(shù)據(jù)庫系統(tǒng)都要運(yùn)行在 HDFS 之上。所以 Hadoop 市場內(nèi)的數(shù)據(jù)倉庫市場將會(huì)完全融合。在商業(yè)分析上也存在同樣的情況。所以 Hadoop 在他們最新的營銷演講上提到了“數(shù)據(jù)湖”這個(gè)概念,待會(huì)我就會(huì)大概說一下?,F(xiàn)在我想說的是,數(shù)據(jù)倉庫市場和 Hadoop 市場基本上是同一個(gè)市場。
那么 Spark 表現(xiàn)得怎樣呢? Spark 我認(rèn)為很有意思。
Spark 的存在是為了以快于 Map-Reduce 的速度進(jìn)行分布式計(jì)算。現(xiàn)在大家都不想要 Map-Reduce 了, Spark 的設(shè)計(jì)初衷是要解決一個(gè)沒有人愿意解決的問題。所以出售 Spark 的商業(yè)公司 Databricks 很快就了解到,人們想要用 SQL ?,F(xiàn)在, Spark 有 70% 的訪問量來自于 SparkSQL 。
Spark 就是一個(gè) SQL 市場。但不幸的是, Spark 壓根兒不是一個(gè) SQL 引擎。它沒有事務(wù),沒有持久度,也沒有索引。現(xiàn)在所有這些問題都將得到修復(fù)。所以 SparkSQL 可能會(huì)越來越像 Impala ,像商業(yè)數(shù)據(jù)倉庫實(shí)現(xiàn)。而且他們可能在數(shù)據(jù)倉庫市場上與 Impala 以及現(xiàn)有的一些數(shù)據(jù)倉庫廠商競爭。希望最好的系統(tǒng)能夠笑到最后。 Spark 的市場有 30% 是分布式計(jì)算,它的主要客戶是 Scala 。而且它的功能比 Map-Reduce 更強(qiáng)大。但是, Spark 數(shù)據(jù)的 RDD 格式并不是所有人都喜聞樂見的,所以很快 Databricks 就嘗試采用一種 R 形式的數(shù)據(jù)結(jié)構(gòu)——數(shù)據(jù)幀。因此 Spark 內(nèi)部將發(fā)生翻天覆地的變化,請系好你的安全帶。這是下一代的明星產(chǎn)品。但明年會(huì)怎樣誰都不知道。 Spark 的確有這樣的意向。而且?guī)缀蹩梢钥隙ǖ氖?,它一定?huì)進(jìn)軍數(shù)據(jù)倉庫市場。我認(rèn)為在商業(yè)智能領(lǐng)域的分析市場,其實(shí)有很多系統(tǒng)都做得非常好。而且 Spark 和 Hadoop 也將會(huì)進(jìn)軍這個(gè)市場,為它帶來更多的產(chǎn)品。但最大的難題在于如何在數(shù)據(jù)管理的中心進(jìn)行可擴(kuò)展的分析。如果你決定要在這方面開展某項(xiàng)工作,你必須先解決好這個(gè)大難題。
Big Velocity 很快的處理速度
下面馬上就到高速這個(gè)話題。現(xiàn)在的商業(yè)市場規(guī)則不斷變化,這是個(gè)不錯(cuò)的現(xiàn)象。物聯(lián)網(wǎng)正在通過傳感器記錄下所有有意義的東西。例如戴在你腕上的小腕帶,它可以記錄下你的生命特征。不管是賽跑中的馬拉松選手,還是為數(shù)眾多的野生鳥類和動(dòng)物,都能一一記錄下來。這些人或動(dòng)物會(huì)將他們的狀態(tài)或其他數(shù)據(jù)實(shí)時(shí)傳送給我們。這就帶來了海量的數(shù)據(jù)。我們都在使用智能手機(jī)作為移動(dòng)平臺(tái),它發(fā)送數(shù)據(jù)的速度也是相當(dāng)?shù)目臁N锫?lián)網(wǎng)持續(xù)沖擊著人們原有的基礎(chǔ)設(shè)施——我們必須提速了。而在人們說要提速的時(shí)候,他們會(huì)遇到兩種不同的問題。第一種問題我將之稱為“大模式、小狀態(tài)”。
當(dāng)你要做電子交易時(shí),華爾街的工作人員會(huì)在海量的數(shù)據(jù)中尋找一個(gè)模式。比如先找一只草莓,然后 0.1 秒后再找一條香蕉。這就是復(fù)雜事件處理( CEP )技術(shù)。另外也有一些商業(yè)系統(tǒng),他們可以比較好地解決這個(gè)市場的需求。所以這并不是一個(gè)交易數(shù)據(jù)庫市場,而只是打開一條消防水管,然后從噴出的水中尋找模式。我對(duì)第二種有關(guān)高速的問題更感興趣,我將之稱為“大狀態(tài)、小模式”。
假設(shè)有一家電子交易公司,他們目前的交易量占紐約證交所總交易量的 10% 。他們在紐約、倫敦、東京以及北京這里都設(shè)有電子交易專柜。這些電子交易專柜可以進(jìn)行實(shí)時(shí)證券交易。這家公司的 CEO 想要確定自己相對(duì)于全球任一股票的價(jià)位。如果價(jià)位相對(duì)較高,那么他可以說,我的風(fēng)險(xiǎn)太高了。然后按下應(yīng)急按鈕來降低風(fēng)險(xiǎn)。也就是說,在風(fēng)險(xiǎn)高于一定水平的時(shí)候提醒我。注意這一次就不是在消防水管噴出的水中尋找模式了,而是確切地記錄下世界各地每一次交易的影響。這是數(shù)據(jù)庫中一個(gè)有關(guān)我當(dāng)前全球位置的例子。此時(shí)哪怕你只是遺漏了一條消息,你的數(shù)據(jù)庫也會(huì)變得毫無價(jià)值。所以你不能遺漏任何數(shù)據(jù)。一定不要遺漏任何數(shù)據(jù)。而且要非??焖?、準(zhǔn)確地記錄我的狀態(tài)。這看起來像是一個(gè)有關(guān)超高性能交易處理的問題。這是一個(gè)我非常有興趣去研究的領(lǐng)域。
要解決這個(gè)問題,你可以運(yùn)行任何一個(gè)商業(yè)關(guān)系型數(shù)據(jù)庫系統(tǒng),我將之稱為老 SQL 。所以你可以運(yùn)行微軟的 SQLserver 。它就是其中一款老 SQL 大型應(yīng)用。你也可以運(yùn)行 NoSQL 系統(tǒng)。目前有 75 到 100 家廠商可以賣給你 NoSQL 系統(tǒng)。而且他們主張放棄 SQL 和 ACID 。另外還有第三種解決方案,我將之稱為新 SQL ,那就是保留 SQL 和 ACID ,但放棄老 SQL 廠商遺留下來的實(shí)現(xiàn),以編寫體積更小、速度更快的實(shí)現(xiàn)。待會(huì)我會(huì)分別解釋這些方案。
現(xiàn)有的大型應(yīng)用速度很慢。除了慢還是慢。如果你要在一秒內(nèi)運(yùn)行 100 萬個(gè)交易,那么我勸你不必費(fèi)勁在任何這些遺留實(shí)現(xiàn)上去嘗試這樣做。 SQL 是可以的,但它對(duì)交易的實(shí)現(xiàn)實(shí)在是太慢了。我在 2007 年與其他人合作寫了一篇名叫 "Through the OLTP Looking Glass" 的論文,上面明確解釋了為什么老 SQL 無法在這樣一個(gè)市場當(dāng)中高性能運(yùn)行。如需更多詳情,大家可以看一下這篇文章。所以為什么不使用 NoSQL 系統(tǒng)呢?
關(guān)于 NoSQL 我想說兩件事情。第一件是,如果你主張放棄 SQL ,那么你就是主張使用低級(jí)的表示法,因?yàn)檫@是 SQL 編譯后的結(jié)果。不要將賭注壓在編譯器上。我雖然白頭發(fā)很多,但是我還記得我在剛?cè)胄械臅r(shí)候那些“白頭”前輩對(duì)我說,你必須用 IBM 匯編器來寫代碼。這是因?yàn)?,除非你能夠控制機(jī)器上的所有寄存器,否則提速根本是不可能的?,F(xiàn)在我們都知道這是多么的可笑。不要將賭注壓在編譯器上。高級(jí)語言是可以的。但低級(jí)表示法就不好了。 40 年的數(shù)據(jù)庫研究教會(huì)大家這個(gè)道理。而 NoSQL 那些人還沒有完全明白這個(gè)道理。我們應(yīng)該放棄 ACID 。遺留廠商的傳統(tǒng)交易實(shí)現(xiàn)實(shí)在是太慢了。真的。一種選擇是放棄它們,但我并不是很支持這種做法。這是因?yàn)?,如果你想?100 美元從這里挪到那里,你必須要有交易才能做到。例如,比特幣就是一個(gè)很好的例子,不少人因?yàn)?NoSQL 系統(tǒng)受到攻擊而損失了很多錢。所以說, 如果你需要交易但又沒有好的交易系統(tǒng),那么你很容易就會(huì)被一些非常嚴(yán)重的漏洞陷入危險(xiǎn)的境地。你所能做的就是對(duì)著用戶代碼抓狂。
所以我的預(yù)測是這樣的, SQL 和 NoSQL 系統(tǒng)之后會(huì)合并在一起。 NoSQL 是指 2012 年版本的 NoSQL 。然后 NoSQL 廠商的營銷人員就改口說,我們不僅有 SQL ,還有 SQL 的替代方案,對(duì)于那些需要用 SQL 做的事情,我們還有其他的解決方案。在我看來,現(xiàn)在 NoSQL 就是尚未使用 SQL 的意思。因?yàn)?NoSQL 廠商已經(jīng)了解到高級(jí)語言的好處,所以便開始在他們系統(tǒng)的上層編寫高級(jí)語言。尤其是 Mongodb 和 Cassandra ,它們基本上都實(shí)現(xiàn)了看起來與 SQL 幾乎一樣的高級(jí)語言。所以說如今 NoSQL 陣營已開始轉(zhuǎn)向 SQL 。而 SQL 人員也在他們的引擎中加入 JSON ,這是 NoSQL 廠商的其中一項(xiàng)重要功能—— JSON 數(shù)據(jù)類型的靈活性。所以我認(rèn)為這兩個(gè)市場將最終融合在一起,不使用 SQL 的引擎不再叫做 NoSQL 。它們都是 SQL 的一種實(shí)現(xiàn),只是使用了不同于其他廠商的特性而已。我個(gè)人對(duì)新 SQL 是非常喜歡的,因?yàn)榻灰讓?duì)每個(gè)人來說都是非常有用的。現(xiàn)在的問題是,老廠商的交易實(shí)現(xiàn)存在很多問題,它們的速度實(shí)在是太慢了。但這并不表示你無法將速度提起來。
例如, VoltDB 是一款名叫“ H-Store ”的 MIT 系統(tǒng)的商業(yè)化版本,它比 TPC-C 上的老系統(tǒng)要快將近 100 倍。而且它的交易系統(tǒng)非常輕型,線程優(yōu)化得很好。它是一款速度超快的主內(nèi)存開源 SQL 引擎。微軟的數(shù)據(jù)庫系統(tǒng)—— Hekaton 最近作為 SQL Server 14 的一部分捆綁推出,它就是新 SQL 的另一個(gè)實(shí)現(xiàn)。所以說,提升在目前來看是可能的,只要你不要使用那些三、四十年前的老系統(tǒng)。
接下來我要說的是數(shù)據(jù)流速快的問題。這個(gè)問題要么是流處理問題,要么就是高性能交易問題。對(duì)于高性能交易問題,已經(jīng)開始有速度很快的實(shí)現(xiàn)了。但我認(rèn)為,這里面的關(guān)鍵是如何讓交易高速進(jìn)行。在這方面我們有很多的想法,未來也有很大的改善空間。
Big Variety 數(shù)據(jù)來源多樣性
好了,還有最后 9 分鐘,我來談?wù)劧鄻有缘膯栴}。像聯(lián)邦快遞這樣的典型企業(yè)一般會(huì)有 5000 個(gè)運(yùn)營數(shù)據(jù)系統(tǒng)。聯(lián)邦快遞現(xiàn)在有一個(gè)數(shù)據(jù)倉庫。但其中只有幾個(gè)系統(tǒng)的數(shù)據(jù)納入到了這個(gè)數(shù)據(jù)倉庫當(dāng)中。也就是說,這個(gè)典型的數(shù)據(jù)倉庫只從 10 到 20 個(gè)???統(tǒng)那里收集數(shù)據(jù)。那么其余剩下的 4980 個(gè)系統(tǒng)該怎么辦呢?像 Verizon 這樣的大型電信公司擁有 10 萬個(gè)運(yùn)營系統(tǒng)。大企業(yè)要有許多運(yùn)營系統(tǒng),主要是因?yàn)樗麄兎殖闪嗽S多獨(dú)立的業(yè)務(wù)部門,以便于業(yè)務(wù)的開展。而獨(dú)立的業(yè)務(wù)部門會(huì)產(chǎn)生大量的獨(dú)立數(shù)據(jù)。所以在大企業(yè)的內(nèi)部有許多運(yùn)營系統(tǒng)。當(dāng)然,這其中還包括電子表格、網(wǎng)頁、數(shù)據(jù)庫等等。而且每個(gè)人都想從互聯(lián)網(wǎng)獲得天氣信息,也要從各種公共數(shù)據(jù)源獲取數(shù)據(jù)。所以他們需要擴(kuò)展性,將大量運(yùn)營數(shù)據(jù)系統(tǒng)進(jìn)行整合。那么該怎么做呢?
在過去,市場的傳統(tǒng)做法是提取、轉(zhuǎn)換、載入數(shù)據(jù), ETF 系統(tǒng)就是這樣的。比如 Data Stage 或 Informatics ,如果你聽說過的話,他們就是做這個(gè)的大廠商。那具體怎么做呢?首先是提前創(chuàng)建一個(gè)全局模式。讓你們當(dāng)中最聰明的人去研究這個(gè)全局模式應(yīng)該是怎樣的。創(chuàng)建完成后,針對(duì)每一個(gè)你想要納入到該全局模式的本地化數(shù)據(jù)源,派一名程序員去咨詢數(shù)據(jù)系統(tǒng)的所有者,了解數(shù)據(jù)源中包含了什么內(nèi)容,然后將這些內(nèi)容映射到全局模式當(dāng)中,再編寫一個(gè)數(shù)據(jù)轉(zhuǎn)換腳本,最后確定如何清理并刪除數(shù)據(jù)源中的重復(fù)數(shù)據(jù)。如果有 20 個(gè)數(shù)據(jù)源的話,應(yīng)該沒問題。但由于這種做法需要提前創(chuàng)建一個(gè)全局模式,如果數(shù)據(jù)源太多的話就不好做了。你也需要一個(gè)受訓(xùn)良好的程序員去單獨(dú)處理每個(gè)數(shù)據(jù)源,其中涉及了太多的人力。如今的 ETL 人員在賣一種叫做“主數(shù)據(jù)管理”的產(chǎn)品。它其實(shí)只是一個(gè)新的術(shù)語,指的就是上面那種做法。這時(shí)候已經(jīng)無法再擴(kuò)展了。而且,現(xiàn)在有許多企業(yè)不只想整合 20 個(gè)數(shù)據(jù)源這么簡單,他們想要整合 1000 個(gè)或 3000 個(gè)數(shù)據(jù)源。比如做團(tuán)購優(yōu)惠券的網(wǎng)站 Groupon ,他們正在建立一個(gè)全球小企業(yè)數(shù)據(jù)庫,這些企業(yè)就是他們的客戶。為此他們需要整合 1 萬個(gè)數(shù)據(jù)源。所以他們實(shí)際上是以 1 萬倍的規(guī)模去處理這個(gè)問題。而 ETL 根本不可能完成這個(gè)任務(wù)。這就是對(duì)系統(tǒng)可擴(kuò)展性的巨大需求,傳統(tǒng)的廠商無法解決這個(gè)問題。所以我認(rèn)為, 在這個(gè)關(guān)鍵的領(lǐng)域我們需要有新的想法,需要去做研究,看看怎么去解決這個(gè)問題。
我加入過一家名為 Data Tamer 的初創(chuàng)公司,待會(huì)我 會(huì)在另一張幻燈片里面說明。他們有一種比較好的方式去做這種規(guī)模的數(shù)據(jù)。另外還有許多類似的初創(chuàng)企業(yè),例如由來自 Berkeley 的 Joe Hellerstein 創(chuàng)立的 Trifacta 。他們關(guān)注于每個(gè)數(shù)據(jù)科學(xué)家,注重?cái)?shù)據(jù)策管問題。他們非常關(guān)心非程序員、可視化以及每個(gè)數(shù)據(jù)科學(xué)家的需求。但不管怎樣,我都認(rèn)為這是一個(gè)亟需創(chuàng)新想法的領(lǐng)域。
那么 Data Tamer 究竟是做什么的呢?他們是做數(shù)據(jù)策管的,對(duì)我來說,數(shù)據(jù)策管就是要在原處攝取數(shù)據(jù),然后將數(shù)據(jù)轉(zhuǎn)換為某種不同的表示形式,例如歐元轉(zhuǎn)換為美元,或人民幣轉(zhuǎn)換為美元等。然后還要進(jìn)行數(shù)據(jù)清理?;旧先魏螖?shù)據(jù)源都會(huì)有 10% 到 20% 的錯(cuò)誤率。有些情況下人們會(huì)拼錯(cuò)人名或公司名字等等。然后你必須將多個(gè)數(shù)據(jù)源放到一起,對(duì)它們的屬性進(jìn)行映射對(duì)比。比如說你有一組員工的數(shù)據(jù)集。我也有一組員工數(shù)據(jù)集。你稱之為薪金。我稱之為工資。你填滿了一行數(shù)據(jù)。然后發(fā)現(xiàn)有重復(fù)的數(shù)據(jù),于是你要進(jìn)行數(shù)據(jù)整合。數(shù)據(jù)策管就是這樣的概念。在過去,數(shù)據(jù)策管的成本非常之高,是普通人無法逾越的大山。但如果你想做數(shù)據(jù)科學(xué),你就必須翻過這座大山,完成所有的數(shù)據(jù)整理和勘誤工作。如果使用傳統(tǒng)的技術(shù)去做這項(xiàng)工作,所需的費(fèi)用非常高。而且傳統(tǒng)技術(shù)無法擴(kuò)展。所以說這是一個(gè)很大的問題。那么 Data Tamer 究竟是做什么的呢?
我借用 Peter Lee 演講稿里面的一段話。他們在統(tǒng)計(jì)學(xué)上應(yīng)用機(jī)器學(xué)習(xí),讓機(jī)器找出那些我們無法找到的東西。這類似于將掛在低處的蘋果全部摘掉。然后在需要人類幫助時(shí),你必須去找這個(gè)領(lǐng)域的專家。你不能去問程序員。因?yàn)?ETL 的程序員不知道怎么解答這方面的問題。比如說 Data Tamer 有一個(gè)客戶是 Novartis ,是一家非常大的醫(yī)藥公司。他們對(duì)基因數(shù)據(jù)應(yīng)用這項(xiàng)技術(shù)。 ICE50 和 ICU50 是兩個(gè)基因術(shù)語。他們是一樣的東西嗎?是否其中一個(gè)是另一個(gè)的筆誤?他們是兩個(gè)不同的基因術(shù)語嗎?程序員對(duì)此一無所知。你必須去問基因領(lǐng)域的專家。 Tamer 有一個(gè)專家搜索系統(tǒng)。當(dāng)需要人類回答問題時(shí),比如說創(chuàng)建培訓(xùn)數(shù)據(jù),你必須去問這個(gè)領(lǐng)域的專家。你不能去問程序員。這樣才能獲得巨大的投資回報(bào)。這種方式比起使用傳統(tǒng)技術(shù)要省錢。這是解決數(shù)據(jù)源多樣性問題的一個(gè)可行方法。但我的建議是,這一點(diǎn)非常重要。如果你想研究這個(gè)問題,你必須去找一個(gè)真實(shí)的用戶,例如阿里巴巴或華為。去拜訪真實(shí)的用戶,找出他們的數(shù)據(jù)策管問題在哪里,然后解決這個(gè)問題。因?yàn)樵诂F(xiàn)實(shí)世界中,很多人都會(huì)先寫一個(gè)算法,然后再想這個(gè)算法在現(xiàn)實(shí)世界中究竟好不好用。我覺得這個(gè)順序反了。你應(yīng)該先找出現(xiàn)實(shí)世界的數(shù)據(jù),然后再修復(fù)這些數(shù)據(jù)。好了,時(shí)間不多了。但我剛才說了,我會(huì)談一談數(shù)據(jù)湖。
Hadoop 廠商現(xiàn)在的想法是,將所有數(shù)據(jù)放入一個(gè)基于 HDFS 的數(shù)據(jù)湖中,這樣就萬事大吉了。也就是說,將所有原始數(shù)據(jù)放入 HDFS ,這就是他們所說的數(shù)據(jù)湖。注意這只是數(shù)據(jù)策管所攝取的數(shù)據(jù)塊。其余部分才是難點(diǎn)所在,你還必須解決這些難點(diǎn)。所以,如果你采用 Hadoop 廠商的建議,將所有原始數(shù)據(jù)放入 HDFS 當(dāng)中,你并非創(chuàng)建一個(gè)數(shù)據(jù)湖,而只是創(chuàng)建了一個(gè)數(shù)據(jù)沼澤。然后你必須進(jìn)行數(shù)據(jù)策管,才能創(chuàng)建出一個(gè)可供你使用的數(shù)據(jù)湖。所以說,數(shù)據(jù)湖只是一個(gè)新的營銷術(shù)語,它指的是數(shù)據(jù)策管所攝取的數(shù)據(jù)塊。
總結(jié):工欲善其事,必先利其器
最后總結(jié)一下,如果你想做大數(shù)據(jù),想做 SQL 分析,你應(yīng)該采用列存儲(chǔ)。如果你想做智能分析,最好不要用過時(shí)的產(chǎn)品。我強(qiáng)烈建議你使用數(shù)組存儲(chǔ)。但可能也會(huì)有其他解決方案。如果你遇到數(shù)據(jù)速度的問題,你需要找一個(gè)流處理產(chǎn)品,或高性能的 OLTP 系統(tǒng),這取決于你手頭上有什么資源。 NoSQL 人員目前提供了一種不錯(cuò)的上手體驗(yàn)。他們的產(chǎn)品容易使用,而且他們正在轉(zhuǎn)向 SQL 。但你的公司現(xiàn)在已經(jīng)有了大量類似的產(chǎn)品。一些遺留的廠商實(shí)現(xiàn)仍將存在,它們不會(huì)完全過時(shí),但會(huì)逐漸被這些新技術(shù)所取代。與此同時(shí),你仍然需要用到這些舊的技術(shù)。然后,你將擁有一個(gè)或多個(gè)數(shù)據(jù)策管系統(tǒng),它們能夠最大限度地解決數(shù)據(jù)源多樣性方面的可擴(kuò)展性問題。所以,你公司內(nèi)部的堆棧中將產(chǎn)生大量的數(shù)據(jù)。最后我的建議是:“工欲善其事,必先利其器”。謝謝大家!
第十七屆“二十一世紀(jì)的計(jì)算”學(xué)術(shù)研討會(huì)
來源:微軟亞洲研究院的博客
刷新相關(guān)文章
我要評(píng)論
活動(dòng)推薦more >
- 2018 上海國際大數(shù)據(jù)產(chǎn)業(yè)高2018-12-03
- 2018上海國際計(jì)算機(jī)網(wǎng)絡(luò)及信2018-12-03
- 中國國際信息通信展覽會(huì)將于2018-09-26
- 第五屆FEA消費(fèi)金融國際峰會(huì)62018-06-21
- 第五屆FEA消費(fèi)金融國際峰會(huì)2018-06-21
- “無界區(qū)塊鏈技術(shù)峰會(huì)2018”2018-06-14
不容錯(cuò)過的資訊
-
1#后疫情時(shí)代的新思考#疫情之下,關(guān)于醫(yī)
-
2眾盟科技獲ADMIC 2020金粲獎(jiǎng)“年度汽車
-
3數(shù)據(jù)智能 無限未來—2020世界人工智能大
-
4#2020非凡大賞:數(shù)字化風(fēng)起云涌時(shí),共尋
-
5#榜樣的力量#天璣數(shù)據(jù)大腦疫情風(fēng)險(xiǎn)感知
-
6#榜樣的力量#內(nèi)蒙古自治區(qū)互聯(lián)網(wǎng)醫(yī)療服
-
7#榜樣的力量#實(shí)時(shí)新型肺炎疫情數(shù)據(jù)小程
-
8#榜樣的力量#華佗疫情防控平臺(tái)丨數(shù)據(jù)猿
-
9#后疫情時(shí)代的新思考#構(gòu)建工業(yè)互聯(lián)網(wǎng)新
-
102020可信云大會(huì)丨《云MSP發(fā)展白皮書》重