【发布时间】:2015-01-12 02:03:00
【问题描述】:
我有一个包含超过 50 万个文档的大型集合,我需要不断更新这些文档。为了实现这一点,我的第一个方法是使用w=1 来确保写入结果,这会导致很多延迟。
collection.update(
{'_id': _id},
{'$set': data},
w=1
)
所以我决定在我的更新方法中使用w=0,现在性能明显提高了。
由于我过去对 mongodb 的痛苦经历,我不确定在w=0 时是否保证所有更新。我的问题是,是否保证使用w=0 进行更新?
编辑:另外,我想知道它是如何工作的?它是否会创建一个内部队列并一一异步执行更新?我看到使用mongostat,即使在 python 脚本退出后,也正在处理一些更新。还是即时更新?
编辑 2:根据 Sammaye 的回答 link,任何错误都可能导致静默失败。但是,如果提供大量更新会发生什么?那么有些更新会失败吗?
【问题讨论】:
-
如果这是多线程数据摄取,您不应该看到一点差异。请注意,当您看到 mongostat 中不再发生插入时,插入就完成了,而不是当您的客户端返回时。
标签: mongodb pymongo mongodb-query