我的用例如下 - 我有一个mongoDB中的文档集合,我必须发送它进行分析。 文件的格式是如下 -在MongoDB中批量FindAndModify的解决方案
{_id:物件( “517e769164702dacea7c40d8”), 日期: “1359911127494”, 状态: “可用”, other_fields ...}
我有一个阅读器过程,挑选前状态的前100个文档:可用排序方式日期并修改它们与状态:处理。 ReaderProcess发送文档进行分析。一旦分析完成,将状态更改为处理。
目前阅读器过程首先获取由日期分类100个文档,然后更新状态到处理在一个循环中的各个文件。这种情况下是否有更好的/有效的解决方案?
此外,在未来的可扩展性方面,我们可能会使用多个读取器进程。 在这种情况下,我希望一个阅读器进程拾取的100个文档不应该被另一个阅读器进程挑选。但现在读取和更新是单独的查询,所以很可能多个读取器进程选择相同的文档。
Bulk findAndModify(限制)将解决所有这些问题。但不幸的是,它在MongoDB中尚未提供。有没有解决这个问题的方法?
您已写入的写入是原子的,我假设为单个文档写入,因为使用多标志true的第二步更新将不会是原子的,除非与隔离一起使用(仅适用于未分发的设置)。纠正我,如果我错了。除了那个伟大的答案。 – ameykpatil 2013-05-02 13:02:01
没有整个写操作是原子的。所以如果你更新了100个文件,我建议整个操作都是原子的。它是安全的。 – 2013-05-02 13:31:07
你确定MongoDB的原子多文档更新吗?它是安全分割的,但这是因为分片以特定的方式工作,并且mongos将路由操作传送到集合中合适的mongod。 – Sammaye 2013-05-02 13:41:20