一致性還是可用性?
雖然CAP(CAP theorem)模型是不完整,但如果你仔細想想,CA系統的目的是保護你什麼東西?在網絡磁碟分割時,它會減少較基礎的配置來為你提供一致性和可用性。但是,當網絡中斷時,就不會再有所謂的一致性,意味着資料的差異性會出現,或者你可以減低可用性。因此,我們認為可以定義一個更簡單的CAP定理,即是分散式系統的一致性和可用性做出選擇。
考慮到現實中會發生網絡中斷的情況,結論如下:
只有兩種實用的分散式系統:一致性系統和可用性系統。
如果你的分散式系統在一個單獨的Data Center中,又具備一個可靠的,高速的,穩定的網絡,你可以選擇一致性而不是可用性。因為你認為一致性的好處多過網絡失敗的可能性。而且對大部分Data Center來說,這是一個很好的機會給客戶認為他們是最好的。
如果你的分散式系統在一個不可靠的網絡上,或者你計劃將來建立一個可以橫跨的Data Center,那麼你應該要放棄一致性、支援可用性。對於分散式資料庫來說,這是需要的。
如果你的業務讓你能在同一個全球的Data Center為所有客戶服務,並且不需要你改去網絡中的拓撲結構,你可以選擇一致性或可用性。對其他人來說,我們真的沒有選擇,只能放棄一致性,才有合理的可用性能,所以:
長遠來看,一致性是十分必要的
隨着互聯網發展越來越大,全球的擴展性也將會更高。同樣,一個能分佈全球的資料庫不需備有一致性。如果,你的應用程式不需要這種規模,那麼請你提高資料庫的一致性。
資料庫的擴展性
接下來會提及作者對產品的立場。作者唯一感興趣的是NoSQL資料庫當中的向外擴展的資料庫。或者你會有其他的需要,但作者認為需要的是NoSQL的擴展問題。讓我們從不同的角度來看NoSQL的資料庫表現吧。
首先,作者認為在NoSQL的資料庫中,任何的複製、或集群中節點的概念等等都比其他的觀點更重要。按照這些路線可構成可擴展性的模式來說,會有不少人說作者錯了。但無可否認的是,由於MongoDB的興起,這些類型的系統並不成正比。
其次,作者認為NoSQL資料庫在本地網絡和WAN之間有不同的概念更為重要。LAN的Bandwidth更為可靠和令人意想不到。例如Gigabytes 的 Ethernet是每個Data Center的標凖,甚至使用更高的Bandwidth。其他的網絡都並不可靠,提供的Bandwidth都不多。最符合成本效益應該是VPN,但這種連接方式會有瞬態問題。專用線路則比VPN更可靠,但其頻寬是相當昂貴的。因此,你需要在差異中考慮一致性的系統,對你的可擴展性有更好的改善。
作者的結論很簡單。目前只有三種NoSQL資料庫可以滿足對可擴展性的定義,在於它們的向外擴展性和處理本地和WAN之間的差異能力:明顯Cassandra ,Couchbase, 和 Riak . MongoDB都不在名單之列。
資料多樣性的問題
到目前需要注意的是,作者還沒有提到圖形資料庫,檔案資料庫等。這是故意的,因為作者不認為這些五花八門的資料庫和NoSQL的定義有什麼分別。正如它們所說,有時候你真的持有一些十分特別的資料類型,並不適合向外擴展的分散式資料庫。
在這些理論中,最常見的就是分析資料,這些資料往往是被附加上的,但不會被修改。龐大的資料就是在這樣的情況下產生的。我不是一個資料科學家,所以不打算分析各種產品的相對優勢。鑒於存在很多的選擇,如果有這方面的需求的話,你應該深入調查一下。
或者,你在一個簡單的模式下會存儲使用者的對話,但會因為讀寫量會破壞關係型數據庫伺服器。在這個情況下,你應該查明緩存或者資料網絡的解決方案。
或者你需要一個能搜索Big Data,不常變動的資料庫。也許你需要一個方式是可以通過語言進行搜索,或者有更多你需要的搜索方法。
有時候,你可能有一個仍在使用關聯式資料庫中存儲着一些資料。關聯式資料庫並不支援較高交易量。在這種情況下,你應該調查圖形資料庫。也許你有一些很珍貴的資料,很快就會塞滿昂貴的SSD。對於較大的資料,更應該去優化。
因此,確實有一些特定資料類型必須使用NoSQL資料庫。但作者覺得這些往往是例外。作者在網上看了許多各種各樣的文章,例如有關文件資料庫是你應該關心的一件事、其他資料庫已經過時,所能做的就是事先了解。作者認為要瞭解資料庫和龐大數據庫的差異是十分重要的,老實說,作者並沒有真正搞清楚,它們的優點和缺點,這些差異看似微小但在規模和分佈方面卻十分重要。在技術上所有的東西都一樣,作者認為我們應該專注於真正重要的新技術屬性。
因此,作者最後的建議是:
不要因為一種資料庫有某種好處就使用NoSQL。
你可以根據可擴展的需求,或者真的需要一個並不適合關聯式資料庫的使用環境來使用它。
結論
最近,許多人有關於NoSQL的很多意見,當然作者也不例外。作者認為這篇文章與其它文章略有不同,它往往側重於資料模型和有趣的、無關大局的、具備其它功能的NoSQL產品。希望你們可以贊成作者的觀點。幾年前,在作者第一次開始調查NoSQL產品的時候,發現不少選擇、幾個標準,作已經將這些建議都寫在了這篇文章中。當然它説明作者一些早期的錯誤,作者希望你發現它同樣有的價值。
深入探討:NoSQL是否適合可用性和擴展性
https://www.facebook.com/hkitblog