2013-08-07 78 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