【问题标题】:Concurrent control for NodeJS and MongoDB stackNodeJS 和 MongoDB 堆栈的并发控制
【发布时间】:2016-05-29 23:50:05
【问题描述】:

我有这些“任务”,这些“任务”由用户提交,它们访问我的 NodeJS 服务器并作为文档存储在 MongoDB 数据库中。然后这些任务也会被用户获取并一次处理一个。

  • 任务具有以下状态:待处理、工作中、已完成
  • 最初提交任务时,它们处于“待处理”状态。
  • 当用户想要处理一项任务时,他们会以 FIFO 方式查询一个“待处理”任务。
  • 向用户提供任务后,该任务会更新为“工作中”状态

我的问题是,当两个用户同时要求处理一项任务时,由于竞争条件,他们可能会获得相同的任务。虽然第一个查询尝试将任务的状态更新为“正在工作”,但第二个查询也可以获取该状态。有人可以建议我如何使用 NodeJS 和 MongoDB 来解决这个问题,其中一切都是异步的吗?也欢迎任何框架或库。

【问题讨论】:

    标签: node.js mongodb


    【解决方案1】:

    MongoDB 有一个 findAndModify 方法正是为此目的。

    使用 MongoDB 驱动程序,您将运行以下代码,

    collection.findAndModify({
      // Query
    }, [
      // Sort
    ], {
      $set: {
        state: 'working'
      }
    }, {
      new: true
    }).then((task) => {
      // This is your "working" task
    })
    

    【讨论】:

      猜你喜欢
      • 2013-01-18
      • 1970-01-01
      • 1970-01-01
      • 2015-06-03
      • 1970-01-01
      • 2017-09-02
      • 2011-04-29
      • 2019-03-08
      • 1970-01-01
      相关资源
      最近更新 更多