我的用例如下 -
我有一个存储在mongoDB中的文档集合,我需要将它们发送进行分析。
这些文档的格式如下 -
{ _id:ObjectId("517e769164702dacea7c40d8") , date:"1359911127494", status:"available", other_fields... }
我有一个读取器进程,它会选择状态为available 的前100个文档,并按日期排序并使用处理中修改它们。 ReaderProcess会将文档发送进行分析。分析完成后,将更改状态为已处理。
目前读取器进程首先按日期获取100个文档,然后在循环中为每个文档更新状态为处理中。是否有更好/更有效的解决方案?
此外,为了可扩展性,我们可能会采用多个阅读器进程。 在这种情况下,我希望一个读取器进程选取的100个文档不应由另一个读取器进程选取。 但是,获取和更新是分开的查询,因此很有可能多个读取器进程选择相同的文档。
如果MongoDB提供了限制的批量findAndModify,则可以解决所有这些问题。但不幸的是,MongoDB还没有提供此功能。是否有解决此问题的其他解决方案?
{ _id:ObjectId("517e769164702dacea7c40d8") , date:"1359911127494", status:"available", other_fields... }
我有一个读取器进程,它会选择状态为available 的前100个文档,并按日期排序并使用处理中修改它们。 ReaderProcess会将文档发送进行分析。分析完成后,将更改状态为已处理。
目前读取器进程首先按日期获取100个文档,然后在循环中为每个文档更新状态为处理中。是否有更好/更有效的解决方案?
此外,为了可扩展性,我们可能会采用多个阅读器进程。 在这种情况下,我希望一个读取器进程选取的100个文档不应由另一个读取器进程选取。 但是,获取和更新是分开的查询,因此很有可能多个读取器进程选择相同的文档。
如果MongoDB提供了限制的批量findAndModify,则可以解决所有这些问题。但不幸的是,MongoDB还没有提供此功能。是否有解决此问题的其他解决方案?
$isolated
操作符来确保多更新不会与其他写操作交错执行。 - JohnnyHK