粉碎5個NoSQL流言:各司其職,NoSQL的出現比關系型更早
巴西人Henrique Lobo Weissmann(還有個名字叫Kico Lobo)是咨詢公司itexto的聯合創始人,他還在2008年創立了Grails Brasil——巴西最大的Groovy and Grails 用戶組織,當下成員已超過1700個,仍處于飛速增長階段。近日Kico在其博客上發表了多篇NoSQL精彩博文,這里為大家分享他對NoSQL一些常見宣傳的看法。
以下為譯文:
與許多流行詞一樣,NoSQL在大肆宣傳后,許多荒謬的觀點產生,本篇文章將揭穿其中廣被認同的5個。
流言1:NoSQL是新鮮事物
從根本上說,NoSQL數據庫系統的幾大屬性都不是出于關系模型,而關系模型首次揭露是在1970年Codd發布的文章中。
那么,這是否就意味著在1970年之前不存在任何其它的數據庫系統?不容爭論的是,這些數據庫卻是真實存在,比如CODASYL系統,它顯然不是關系型數據庫;基于其主要屬性,NoSQL的誕生其實明顯早于傳統關系型數據庫。
流言2:遺棄數據結構模型
從長遠上看,這個流言的影響更為惡劣。雖然許多NoSQL解決方案都不會強迫你使用嚴格的數據結構模型,但是絕對不意味它可以忽視。而在實際操作中也是恰恰相反的,隨著時間的流逝,你必須明白你為什么要使用這些屬性。
有些情況可能會更加危險,舉個MongoDB的例子:作為一個良好的實踐,許多經驗豐富的用戶都會建議去建立文檔的屬性,在文檔大小改變時,通過預分配大小去避免文檔的完整拷貝。還有在查詢優化時,你必須要清楚你的結構模型以便做索引。
流言3:NoSQL的擴展性永遠都是卓越的
高擴展性是NoSQL的主要賣點之一,但是僅僅選擇一個NoSQL解決方案并不意味著擴展性問題的解決,真正解決問題的是優秀的架構。
不錯,這里確實存在通過選擇NoSQL讓系統擴展性得到了大幅度的提升。然而勝利的背后依稀可見的是數據結構的變化,在特定場景下使用正確的結構替換錯的。
這個流言中有趣的地方是忽略了同樣提供優秀擴展性的關系型數據庫,不錯,使用NoSQL方案進行擴展確實非常容易,但是NoSQL的選擇絕對不是問題解決的唯一功臣。
流言4:不公平的基準
你如何才能公平的比較兩個完全不同的持久化方案,比如:鍵值、關系、文檔等等。而當下許多NoSQL與關系型數據庫的對比也并不公平。
當你的查詢只涉及一個鍵時,NoSQL數據庫的性能明顯要優于關系型數據庫。公平的基準應該建立在同類型產品的比較之上,類似MySQL與MongoDB的對比根本無任何意義。即使系統性能取得了巨大提升,也只是開始時使用了錯誤的數據結構模型而已。
流言5:NoSQL可以大幅度的提高生產力
這一點只發生在夢中,或者是開始選擇了錯誤的工具。在選擇NoSQL之前,我們已經使用了多年的關系型數據庫,這里只存在團隊花大量精力去適應NoSQL的情況。
很少人談及這一點, NoSQL采用最大的挑戰是文化,而不是技術。新事物之所以難以接受,是因為“老伙計”用起來很舒服,即使新事物更加得優秀。生產力源于實踐,而不是魔術。
總結
對比近年來研發領域發生的事件,NoSQL絕對可以稱得上最有意義之一;然而需要銘記的是,任何提升都需要付出同等的代價。