我在当前项目中遇到了mongo更新问题。我们在MongoDB中维护了一个文档池。阅读器进程从该池中提取一批文档。为了确保来自DB的文档不被再次提取,与每个文档相关联的状态被改变(例如,从已到达到正在处理)。是否有可能在MongoDB中进行原子批量更新?
我们正在考虑扩大规模,并有多个读取器进程捡起不同的批次。但是,根据我的理解,mongo更新在批处理中不是原子的。是否有任何方法可以实现这一目标?我需要以确保文档在被前一个文档更新之前不会被另一个读取器从池中提取出来。我基本上是在查看原子批处理更新。 谢谢!
感谢您的答案,但我不认为这将解决问题。我的问题是,我希望批处理中的所有文档的状态可以自动更改并添加readerId似乎不处理该问题。 – Tazo 2013-05-02 05:07:06
随着更新的全部或部分行为,标记时批量大小为1,或者所有新文档都将发送给一个阅读器。 – grogers 2013-05-02 14:55:59
在http://docs.mongodb.org/manual/faq/concurrency/的第二次阅读中,我想说当多个线程使用相同的查询发出更新语句时,结果将不甚明了。这些线程将争夺文档,并且这将取决于什么线程在yield之后获得写入锁定。 mongo上有一个开放的问题来支持限制更新:https://jira.mongodb.org/browse/SERVER-1599。 – grogers 2013-05-02 15:23:04