确保MongoDB中的数据持久性

时间:2013-08-07 18:27:20

标签: mongodb ruby-on-rails-3.2 mongoid

我想确定我的数据是否在MongoDB中成功保存。在某些情况下,MongoDB采用fire_andforfor策略,我想在驱动程序级别指定Write Concern {w:majority,j:1},在我的例子中是Mongoid。

用例:

我想确保我的用户拥有唯一的“昵称”,并且无法注册违反唯一性。

我已经在'昵称'字段上创建了一个唯一索引。

2 个答案:

答案 0 :(得分: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文档操作上设置它 - 这将是每个查询:

Band.with(safe: { w: 3 })

您也可以使用以下会话执行此操作:

Band.mongo_session.with(safe: { w: 3 }) do |session|
    session[:artists].find(...)
end

答案 1 :(得分:0)

简短的回答:你做不到。

答案很长:
考虑使用多个数据存储选项。当没有必要的时候,人们经常会跳过NoSQL的潮流。如果您需要保证写入,则应使用关系数据库,或考虑使用orientDB等混合。缺乏有保证的写入是MongoDB等解决方案可以很好地扩展的重要原因之一。