日期:2014-05-16  浏览次数:20387 次

數據庫分佈式計算的一些思考

  距離上次寫文字又有一段時間矣,期間都是以學習爲主的工作,用Python寫寫一些業務邏輯,將一個用SVM寫成的AI算法打了個包,繼續學習一些其他東東,比如深入HTTP協議,WSGI協議等等,這個遲啲再寫,而今期使我最爲獲得感悟的是關於數據庫,分佈式計算之一些思考。
  P.S.改人家的代碼真是一件蛋痛事,但每次我想有所抱怨之時,又想起將會有人看我的代碼,反而更自覺地去反思如何將代碼從構思上做得更好。

  緣起業務上需要處理幾十TB的文件,而各個子業務分別用到這幾十T,所以鵬哥也一直在想用hadoop搞蛋這些東東究竟行不行。我也一直在查找著各種可能出現的情況。包括以下這篇文字:http://121.52.208.248/mwiki/index.php/MapReduce:_%E4%B8%80%E4%B8%AA%E5%B7%A8%E5%A4%A7%E7%9A%84%E5%80%92%E9%80%80 。

  讀完這篇文字,說實話,真的頗受啓發,使我覺得hadoop其實是“一次性”的工具。一次性爲何物呢?我指的是用這個框架你是不會用到索引等等一些高級的技巧,而也使得我確信mapreduce的確是一種倒退,或者說是從幾十年前的那個分叉路口選擇第二條路用別樣貌的方法重新走一遍。而在的確由mapreduce發展出來也有別的一些理論和方法去使mapreduce更加高效。
  同時,我一直有留意和試用如mongodb、redis等nosql,特別是mongodb,有索引,這是很特別的一點,而redis也被用在我參與開發的一個信息庫,用作隊列服務,雖然後來我發現一些好像也不錯的隊列服務軟件,但我還是鍾意用python給redis寫一個小小的邏輯層,包括一個極其變態的插入和取出隊列驗證機制=。=
  扯回來hadoop、DBMS、nosql這些keyword。其實nosql出現是對舊時DBMS的重構,有一條路是hadoop,這種生硬的方法,還有像redis,這也是一種生硬的方法,唯有mongodb這類,說是nosql,其實一定程度上是對舊有數據庫系統“解構”了。

  讀了這麼一些文字之後,我將我一向認爲hadoop就是解決超大型數據的良方這一思想改變了。我認爲無非就是真正解決大數據不是依靠硬生生耗費大量資源對數據進行mapreduce,說到最後,還是應該對數據進行索引,進一步的,不是說nosql就是只用keyvalue,而是以key爲基礎,以索引爲基礎,對數據進行分佈式存取,甚至將過大的索引做成分佈式索引(我覺得未來一段時間肯定有分佈式索引數據庫的出現),將數據庫解構成數據和索引兩部分。

  我也並不否認mapreduce的用途,用在那些不知道怎麼產生來的幾PB的文本數據,想要提取一些什麼東西,還是非常有用的,如果你不考慮集羣成本的話。