2012-04-27 62 views
4

從我可以做出來的NoSQL數據庫可能是高強度數據讀取應用程序的一個不錯的選擇,但是如果您還需要做大量的數據更新和事務處理對您來說非常重要,不符合ACID)。對?也許太簡單了。NoSQL數據庫:讀取一致性如何?

但無論如何,假設我至少有一部分是正確的,我現在關心的是NoSQL數據庫如何維護您讀取或寫入的數據的「讀一致」視圖。或者他們呢?如果他們不這樣做,這不是一個很大的問題嗎?

我的意思是,如果您正在閱讀(或更新)的數據在讀取時發生變化,那麼您可能會得到不一致/髒的結果集。來自Oracle rdbms背景的所有這些僅僅是爲您處理的,我發現它令人困惑的是缺乏讀取一致性是一個大問題。儘管我錯過了關於這一切的一些關鍵點。有人能讓我挺身而出嗎?

回答

2

MongoDB的允許應用程序選擇使用「寫關注」的讀取一致性所需的水平。這個概念允許您的應用程序阻塞,直到給定寫入滿足特定條件。

舉例來說,只要將操作傳遞給主服務器,就可以考慮任何寫入成功。或者,您可以阻止寫入傳播到副本集中的大多數節點。通過這種方式,您可以將性能/一致性與品味相結合。

+1

你能否詳細說明一下?就像,你能否提供一些這樣配置的文檔參考? – lcestari 2014-03-11 17:36:56

2

NoSQL數據庫可以讀取一致,但如果不嚴格,通常不是一個大問題,請查看CAP theorem。在這方面進行了很多研究,我推薦閱讀Amazon's Dynamo paper以便快速查看NoSQL數據庫等分佈式系統面臨的一些問題和解決方案。

1

它取決於您使用的NoSQL數據庫,因爲每個數據庫都實現了不同的策略。例如,您可以閱讀Riak's explanation其「最終一致性」模型或Lars Hofhansel的文章ACID in HBase

4

我是Oracle NoSQL數據庫的開發人員,將回答您關於該特定NoSQL系統的問題。

Oracle NoSQL數據庫API允許程序員通過每個API調用指定讀一致性級別。從最嚴格到最寬鬆的四個可能的值是絕對,時間,版本和無。 Absolute表示始終從複製主機讀取數據,以便返回最新的值。 「時間」表示系統可以從任何至少在主設備的特定時間增量內的副本返回一個值(例如,從主設備的2秒內的任何副本讀取值)。每次對系統的讀寫調用都會返回一個「版本句柄」。當指定Consistency.Version時,此版本句柄可以傳遞到任何讀取調用,並且它告訴系統從任何至少與該版本一樣的副本讀取。這對於讀取修改寫入(又名CAS)場景很有用。最後一個值Consistency.None表示可以使用任何副本(即沒有保證一致性)。

我希望這是有幫助的。

查爾斯蘭姆