【问题标题】:Properly assigning common id for each database entry为每个数据库条目正确分配公共 ID
【发布时间】: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。

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

【问题讨论】:

    标签: php sql 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

    【讨论】:

      猜你喜欢
      • 2023-04-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-15
      • 2014-01-24
      • 1970-01-01
      相关资源
      最近更新 更多