正确为每个数据库条目分配公共ID

时间:2011-01-12 16:39:47

标签: php sql mongodb

假设我有10个并行运行的cron作业,它们从数据库中获取条目并处理它们。

第一个cron作业从数据库获取所有条目,其中'commonId'字段为1, 第二个获取数据库中的所有条目,其中'commonId'字段为2,依此类推,直到10。

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

障碍 - 前端有很多用户,添加条目时,相同的公共ID用于两个或三个连续的条目。这不应该发生。数据库中的每个条目都应具有1-10的串行公共ID。

这有什么解决方案吗?获取最新的通用ID?

我正在使用MongoDB。

如果无法做到这一点。可以做些什么?

2 个答案:

答案 0 :(得分:1)

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

你有什么理由想要像他那样循环分配它们吗?如果您允许任何chron作业使用任何待处理作业,它会不会更快地处理?

我建议简单地依赖生成的MongoID(参见http://www.mongodb.org/display/DOCS/Object+IDs#ObjectIDs-TheBSONObjectIdDatatype),反向排序并查找第一个未分配的工作项,使用上面提到的一种原子技术来获取它。如果找不到工作,请睡觉并再试一次或退出(取决于您的chron工作重新安排这些工作人员的频率)。

答案 1 :(得分:0)

我建议您查看findAndModify命令和该页面上的示例。如果您只是在寻找快速自动增量/串行计数器,我建议您查看此博文:http://shiflett.org/blog/2010/jul/auto-increment-with-mongodb