为每个数据库条目正确分配公共 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的主要内容,如果未能解决你的问题,请参考以下文章

仅使用CloudFormation分配专用IP

使用 SP 克隆数据库记录的最佳方法

CSV为每个条目留下一个空白行[重复]

codeigniter foreach 具有相同 ID 的多个条目,对元素求和并显示为一个

另一个表的条目的数据库表?

Python:使用上限重新分配权重