2011-01-12 28 views
0

假设我有10个并行运行的cron作业,它们从数据库获取条目并处理它们。正确地为每个数据库条目分配公共标识

第一计划作业获取所有从数据库具有“commonId”字段作为1的条目, 第二个获取所有从数据库具有“commonId”字段作为2等,直到10

条目

解决方案 - 当我从前端将条目添加到数据库时,我有一个文件保存了“最后”公用标识。此ID将递增至10,然后再次为数据库中的每个条目设置为1。

跨栏 - 前台有很多用户,当添加条目时,两个或三个连续条目使用相同的公共标识。这不应该发生。数据库中的每个条目都应具有1-10的串行公共标识。

有没有解决方案?要得到最新的最新的通用id?

我正在使用MongoDB。

如果这是不可能的。可以做什么?

回答

1

你想要的是一个ATOMIC操作,MongoDB有办法做到这些。请参阅http://www.mongodb.org/display/DOCS/Atomic+Operations

你有什么理由想特意分配它们吗?如果您允许任何时钟作业使用任何挂起的作业,它会不会更快处理?

我建议仅仅依靠生成的MongoID(请参阅http://www.mongodb.org/display/DOCS/Object+IDs#ObjectIDs-TheBSONObjectIdDatatype),按照它们的逆序排列并找到第一个未分配的工作项,然后使用提到的一种原子技术来抓取它。如果找不到工作,请重新睡眠并重试或退出(取决于您重新安排这些工作人员的时间长短)。

+0

`消耗任何未完成的作业`<---这给了我想法锁定条目本身,当它正在处理。谢谢 :) – kapeels 2011-01-14 05:43:22