MongoDB事务,防止在多服务器上进行多次更新

时间:2018-10-21 17:51:39

标签: node.js mongodb

在横向扩展服务器上,多台服务器将争夺多个数据的更新过程。

所以我想防止对同一数据进行多次更新。

=咖啡

CollectionRooms.find(isProcessed: false).forEach (room) ->
  if room.isProcessed then return
  #update something
  CollectionRooms.update _id: room._id,
    $set: isProcessed: true

两个具有相同MongoDB的服务器(SERVER1,SERVER2)之间的问题是

  • 在SERVER1执行查找操作之后,
  • 如果SERVER2将数据更新为isProcessed = true,
  • 那么SERVER1的forEach中的数据可以被处理为true吗?

我认为我需要使这个问题简单化。

  • find()将返回光标,
  • 然后在.forEach函数的循环内部,
  • 启动find()函数后,每个循环的实际数据是否不同?

抱歉表达丑陋,谢谢。

1 个答案:

答案 0 :(得分:1)

使用乐观锁定。

文档上有一个附加字段(时间戳或版本号),该字段在每次写入文档时都会更新。然后在更新查询中使用此版本。如果自阅读以来版本已更改,则更新将失败。