为每个数据库条目正确分配公共 ID
Posted
技术标签:
【中文标题】为每个数据库条目正确分配公共 ID【英文标题】:Properly assigning common id for each database entry 【发布时间】:2011-01-12 16:39:46 【问题描述】:假设我有 10 个并行运行的 cron 作业,它们从数据库中获取条目并处理它们。
第一个 cron 作业从数据库中获取所有“commonId”字段为 1 的条目, 第二个从数据库中获取所有“commonId”字段为 2 的条目,依此类推,直到 10。
解决方案 - 当我从前端向数据库添加条目时,我有一个文件,其中保存了“最后一个”公共 ID。此 id 递增到 10,然后对于数据库中的每个条目再次设置为 1。
障碍 - 前端有很多用户,添加条目时,两个或三个连续条目使用相同的公共 id。这不应该发生。数据库中的每个条目都应具有从 1 到 10 的串行公共 ID。
有什么解决办法吗?要获取 latest of latest 通用 ID?
我正在使用 MongoDB。
如果这是不可能的。可以做些什么?
【问题讨论】:
【参考方案1】:您想要的是 ATOMIC 操作,而 MongoDB 有办法做到这一点。见http://www.mongodb.org/display/DOCS/Atomic+Operations
您有什么特别想像这样循环分配它们的原因吗?如果您允许任何 chron 作业消耗任何待处理的作业,它会不会处理得更快?
我建议简单地依赖生成的 MongoID(请参阅 http://www.mongodb.org/display/DOCS/Object+IDs#ObjectIDs-TheBSONObjectIdDatatype),将它们倒序并找到第一个未分配的工作项,使用提到的原子技术之一来获取它。如果没有找到工作,请睡觉并重试或退出(取决于您的 chron 工作重新安排这些工作人员的频率)。
【讨论】:
consume any pending job
【参考方案2】:
我建议查看findAndModify 命令和该页面上的示例。如果您只是在寻找一个快速的自动增量/串行计数器,我建议您查看这篇博文:http://shiflett.org/blog/2010/jul/auto-increment-with-mongodb。
【讨论】:
以上是关于为每个数据库条目正确分配公共 ID的主要内容,如果未能解决你的问题,请参考以下文章