http://glinden.blogspot.com/2008/01/mapreduce-step-backwards.html
http://www.databasecolumn.com/2008/01/mapreduce-a-major-step-back.htmlMapReduce是開技術倒車?實際上這像是當初SQL推出的時候,很多人也認為以語言來描述資料的處理是多餘的事情一樣。而ORM盛行的時候,也有人質疑SQL已經很直觀了,為啥又要轉成物件。
"Ronn Brashear said:
...
A good engineer understands the specific problem space, examines the potential solutions, and picks the right tool for the job. "
所以說,Vertica DB發表這一篇也只是商業競爭而已,其實他們並不如Google能夠理解Column-based DBMS的好處,並經其原理應用在BigTable上,其中一個回應也說的對,根據paper裡所說的結構,BigTable是有index(還有vertica做不到的timestamp based query)。這些教授對RDBMS很熟,可是卻完全不瞭解parallel data processing是怎樣回事,因此誤用,並拿來對照。
當然我在上次的書報討論中,也將這幾個paradigm拿來比,是不太對的。不過當然就是想說先讓同學們瞭解一下觀念。
不管怎樣,在此重新釐清一次觀念。
Google File System(GFS)是一種Global File System,目的是以出力(throughput)為主,並不具備任何的檔案分割能力。他與Redhat推出的GFS功能上相似,但實測的檔案大小及效能差異極為懸殊。GFS本身不具備任何的DLM(Distributed Lock Manager)機制,而是以另一套服務稱為Chubby來提供,這也是跟Redhat GFS不同。簡單地說,把他想像能夠高速傳輸上10TB大小檔案的NFS即可。
MapRedurce是一個parallel data processing framework,根據程式設計師撰寫的Mapper/Reducer Function,搭配合併於framework內的checkpoint技術,而進行平行化的資料分析及處理。首先利用GFS的特性,使得大容量(如上述的10TB)並且為單一檔案的資料,能夠分散在適當的節點群組裡。接著Framework的主程序就會自動地散佈開發好的程式,進行呼叫Map,Reduce兩個函式,最後將結果寫回GFS去。也就是說,就某種角度,他比較像Condor,而跟資料庫一點都扯不上關係。至於說他是不是能夠用在Computation上,paper的說法是「有機會」,但我認為除非你將問題切割成資料處理,不然是很難有機會的。
BigTable是一個利用上述Framework所撰寫成的巨大資料集儲存系統,這裡指的是「資料集」,而表示這些資料彼此之間可能不具有任何的「關連」。因此將關連式資料庫能夠有的功能如transcation,拿來比較是不合適的。換句話說,你應該不會經常拿許多份Excel,將其內容合併(join)後才取出資料(select)進行你的工作(真的已經這樣就會去用DB而不是excel了),而你也不會將資料庫系統裡就建一個表格,然後把所有欄位都放在同一個資料表裡(坦白說我還是有看過人這樣做@@|||)。BigTable如其名,就是一個巨大的表格,就像Excel一樣,而並不是DBMS。儘管在paper裡也提過他擁有一些與DBMS相同的功能,不過這也不代表他是被定義為DBMS。更何況,在這樣大的系統內,要堅持使用特定的觀念去解決事情是一件很不合理的事。
看完了,大部分人可能也還是無法從定義去對應到腦袋裡可以想像的模樣,而不免心裡會有疑問,這些東西搭在一起又能幹嘛?就未來來說,我們有機會擁有下一代平行資料庫的雛形,也有可能就真的只是一輩子被用在Google的應用服務中了。但就現階段而言,請不要忘記這世界上已經有多少人無時無刻地在使用Google的軟體了。