将集合拆分为n个块

时间:2015-03-04 10:13:11

标签: mongodb mongoose queue distributed-computing

我目前正在编写一个应用程序,用于将x主应用程序实例中的任务分发到y工作人员应用程序实例。

任务数据存储在MongoDB集合中,任务在Redis列表中排队(rpush + lshift)。

我们的想法是让逻辑遵循这个循环:

  1. 从集合中查找k个新文档
  2. 将它们推入队列
  3. 转移从队列处理的项目
  4. 根据结果,在集合中重新创建新文档
  5. 返回1.
  6. 此处的问题在步骤1中。如果主应用程序有多个实例,find()操作有时会返回相同的结果,因此重复的任务将在Redis中排队。

    我考虑过标记排队的文档,以便在下一个查询中忽略它们,但问题是因为MongoDB没有事务。这两个操作find() + update()将不是原子的,在某些情况下,在find()操作完成之前,另一个实例可能会update()相同的文档。

    我知道可以将这两个操作合并到findAndModify(),但问题是你只能将它应用于一个效率非常低的单个文档。排队100个任务将意味着100次操作似乎并不理想。

    所以我的问题基本上如下:

    • 有没有办法将集合拆分为n块(每个主应用程序一个)或至少阻止来自后续find()操作的文档,如果另一个主应用程序返回并排队等待它们?

    提前致谢!

0 个答案:

没有答案