2013-08-07 108 views
0

我想確定我的數據是否在MongoDB中成功保存。在某些情況下,MongoDB採用fire_and_forget策略,我想在驅動程序級別指定Write Concern {w:majority,j:1},這在我的例子中是Mongoid。確保MongoDB中的數據持久性

用例:

我想確保我的用戶有獨特的「暱稱」,不能立即登記違反唯一性。

我已經在「暱稱」字段上創建了唯一索引。

+0

和我提到我想將它設置在司機的水平。我知道'w'可以通過#with – arpanchaudhury

+0

設置你有沒有試過'session.command(j:1)' – WiredPrairie

+0

是的,但沒有運氣。找到一個配置文件名稱mongoid.yml(/config/mongoid.yml),我可以在其中配置Moped驅動程序。 – arpanchaudhury

回答

0

簡答:你不行。

長答案:
考慮使用多個數據存儲選項。在沒有必要的時候,人們常常會跳上NoSQL的潮流。如果你需要保證寫入,你應該使用關係數據庫,或者考慮一個像orientDB這樣的混合。缺乏保證的寫入是諸如MongoDB等解決方案如此好的原因之一。

+2

有些驅動程序(比如PyMongo)不僅可以讓Mongo服務器確認我的寫入,而且還確保寫入磁盤日誌時寫入寫入以確保寫入持久性(日記是他們使用的術語)。所以數據丟失的機會非常少。 – arpanchaudhury

+1

再次,你有機會丟失數據,這是我的答案的關鍵 – Woot4Moo

+0

是的,我明白這一點。但在某些情況下,例如當您有容忍限制時,您可以接受該限制。假設你沒有堅持對博客文章發表評論,並且它發生在一百萬次。 Okey不會進入關於SQL和NoSQL的爭論。我只是想知道是否可以在mongoid中設置'j'參數 – arpanchaudhury

2

對於副本集,您可以使用下面的配置,如在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 
+0

雅,感謝Derick的幫助。像指定w參數我們是否也可以指定j參數以確保我的寫入實際上是持久的? – arpanchaudhury

+0

我不知道,他們的文檔沒有提到它。但是這個想法是用''w:「多數」'''這個不需要的。 – Derick