我想确定我的数据是否在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