如何保持多个进程不读取相同的文档

时间:2015-11-25 23:51:39

标签: mongodb

,我的情况是我有一个包含许多要处理的文档的集合 - 一次一个文档。处理文档需要相对较长的时间,处理整个集合需要花费数小时。因此,我将有多个同时“工人”处理相同的集合。每个人都需要做类似的事情,

(A)获取下一个未处理的文档,

(B)处理它,

(C)将文档标记为已处理,然后继续。

如何确保同时进程不读取相同的文档?我不知道关键值是什么,所以我不能说像process_A应该从1开始,process_B从100万开始。此外,我想添加尽可能多的可管理流程,因此说一个前进而另一个前进是不切实际的。

我问MongoDB,因为我正在使用它。我想可以询问有关SQL数据库的相同问题。

我恳请任何想要帮助的人,而不是专注于改变场景,无论出于何种外部原因,这种场景都是给定的。

谢谢

1 个答案:

答案 0 :(得分:0)

我建议使用一些线程安全资源来维护一组读取文档。当您的工作人员阅读文档时,他们会尝试删除该资源中的_id文档。如果它不存在,工作人员应该处理文档,如果存在,则工作人员应该移动到下一个文档。

至于这个线程安全的资源是什么,Mongo实际上是一个不错的选择。它具有文档级原子性,因此您只需创建一个新的“已解析文档”集合即可。每次尝试解析文档时,都会将其_id插入到该集合中,如果写入结果显示您插入了1个文档,那么您就知道它是新的。