最近有Twitter、Digg和Reddit等多家Web 2.0企業宣布從MySQL轉而使用非關系型數據庫(NoSQL)提供可伸縮的數據存儲解決方案,引起了開發者對NoSQL的強烈關注。
NoSQL真的會完全取代關系型數據庫嗎?
對此,前Google工程師,Milo(本地商店搜索引擎)創始人Ted Dziuba最近發表標題驚人的博客“I Can't Wait for NoSQL to DIE”,對NoSQL的適用范圍進行了分析。他認為,NoSQL也會帶來一連串的新問題,並不會成為主流,無法取代關系型數據庫。
他的理由是:Cassandra等NoSQL數據庫在使用上並不方便,比如,修改column family定義時就需要重啟。而且NoSQL更適合Google那樣的規模,而一般的互聯網公司都不是Google,早早地去考慮Google那樣的規模的可擴展性,純粹是浪費時間,存在巨大的商業風險。
他還透露,即使在Google,AdWords這樣的關鍵產品也是基於MySQL實現的。
他在文中最後表示,NoSQL當然死不了,但是它最終會被邊緣化,就像Rails被NoSQL邊緣化一樣。而DBA同學們也用不著擔驚受怕,因為有錢招 DBA的公司的決策者們都懂實際的生意是怎麼回事兒。
Dziuba的文章因為言辭激烈,在社區裡引起了強烈反應。
SQL數據庫陣營贊同者大有人在。craigslist工程師、著名的MySQL專家Jeremy Zawodny表示,在讀此文的時候,不時會心一笑。他說,NoSQL運動只是軟件不斷進化進程中的正常現象。關系型數據庫也會繼續發展,MySQL社區不斷推出的XtraDB或InnoDB插件, PBXT, Drizzle都是證據。各種技術競爭的結果是,我們獲得了更多解決問題的選擇。
drizzle項目開發者Eric Day也表示,NoSQL有很多值得學習的,但是目前大部分實際項目的最佳選擇還是關系型數據庫。
NoSQL陣營當然不會坐視不理,Cassandra項目組的Eric Evans表示,Dziuba提到Cassandra修改column family定義的問題其實很容易解決。而且,NoSQL並不是要取代MySQL,事實上Twitter仍然在用MySQL。如果關系型數據庫能夠承擔負荷,那就用好了;如果不行,請考慮NoSQL。
而德國知名博客Code Monkeyism則嘲笑Dziuba看起來並沒有用MySQL做過真實項目,因為MySQL如果沒有memcache,基本上無法應付網站項目。他認為,NoSQL將使SQL數據庫邊緣化,而且一個重要理由恰恰是可以節省DBA的開銷。
digg的前任首席架構師現在也在創業的Joe Stump說,自己現在的創業項目就是用NoSQL,而且列舉了一系列問題挑戰SQL陣營。