我想確定我的數據是否在MongoDB中成功保存。在某些情況下,MongoDB採用fire_and_forget策略,我想在驅動程序級別指定Write Concern {w:majority,j:1},這在我的例子中是Mongoid。確保MongoDB中的數據持久性
用例:
我想確保我的用戶有獨特的「暱稱」,不能立即登記違反唯一性。
我已經在「暱稱」字段上創建了唯一索引。
我想確定我的數據是否在MongoDB中成功保存。在某些情況下,MongoDB採用fire_and_forget策略,我想在驅動程序級別指定Write Concern {w:majority,j:1},這在我的例子中是Mongoid。確保MongoDB中的數據持久性
用例:
我想確保我的用戶有獨特的「暱稱」,不能立即登記違反唯一性。
我已經在「暱稱」字段上創建了唯一索引。
簡答:你不行。
長答案:
考慮使用多個數據存儲選項。在沒有必要的時候,人們常常會跳上NoSQL的潮流。如果你需要保證寫入,你應該使用關係數據庫,或者考慮一個像orientDB這樣的混合。缺乏保證的寫入是諸如MongoDB等解決方案如此好的原因之一。
有些驅動程序(比如PyMongo)不僅可以讓Mongo服務器確認我的寫入,而且還確保寫入磁盤日誌時寫入寫入以確保寫入持久性(日記是他們使用的術語)。所以數據丟失的機會非常少。 – arpanchaudhury
再次,你有機會丟失數據,這是我的答案的關鍵 – Woot4Moo
是的,我明白這一點。但在某些情況下,例如當您有容忍限制時,您可以接受該限制。假設你沒有堅持對博客文章發表評論,並且它發生在一百萬次。 Okey不會進入關於SQL和NoSQL的爭論。我只是想知道是否可以在mongoid中設置'j'參數 – arpanchaudhury
對於副本集,您可以使用下面的配置,如在http://mongoid.org/en/mongoid/docs/installation.html#replica描述:
consistency: :strong
一起,你會希望有安全模式,如http://mongoid.org/en/mongoid/docs/tips.html#safe_mode描述:
safe: true
它看起來並不像您可以設置MongoDB的w
參數是這樣,但你可以把它放在一個波段的文件操作,那將是每個查詢,但:
Band.with(safe: { w: 3 })
您也可以做到每節:
Band.mongo_session.with(safe: { w: 3 }) do |session|
session[:artists].find(...)
end
雅,感謝Derick的幫助。像指定w參數我們是否也可以指定j參數以確保我的寫入實際上是持久的? – arpanchaudhury
我不知道,他們的文檔沒有提到它。但是這個想法是用''w:「多數」'''這個不需要的。 – Derick
和我提到我想將它設置在司機的水平。我知道'w'可以通過#with – arpanchaudhury
設置你有沒有試過'session.command(j:1)' – WiredPrairie
是的,但沒有運氣。找到一個配置文件名稱mongoid.yml(/config/mongoid.yml),我可以在其中配置Moped驅動程序。 – arpanchaudhury