【问题标题】:Create lock on a Mongoose object在 Mongoose 对象上创建锁
【发布时间】:2015-04-10 23:43:38
【问题描述】:

我有两个回调,它们经常用 mongoose 修改同一个 mongo 对象。修改很复杂,以至于我无法在一个update() 中轻松完成。结果,很多时候只应用了两个更新中的一个,我收到了[VersionError: No matching document found.] 错误。

有什么方法可以显式锁定文档,以便每次更新都可以等待另一个更新完成,并且可以在不担心竞争条件的情况下发生?

【问题讨论】:

  • 在架构上使用findAndUpdate 而不是doc.save()
  • 问题是我每次对对象进行多次操作无法用单个findAndModify进行封装

标签: mongodb mongoose locking


【解决方案1】:

Mongodb 不支持对象锁定,但是您可以自己实现它。

你必须选择

  • 乐观并发控制(当资源争用较少时) - 这可以使用 versionNumber 或 timeStamp 字段轻松实现。在读取时,您检索 versionNo/timeStamp 并将其提供给检查它的所有更新,如果匹配增加。

  • 悲观并发控制(当单个文档频繁更新时) - 这是一个更成问题的技术,因为当您的操作未成功完成时,您必须涵盖从各种失败场景中恢复。 (即进程死亡)

如果您决定遵循第二个选项here is interesting read,它涵盖了您在“单个”操作中更新数字对象时的情况

【讨论】:

  • 我读到对单个文档的操作总是原子的。您能否详细说明当您的数据分布在分片的 mongo 集群之间时的情况?这怎么能适用于那里。
  • 您能否为stackoverflow.com/questions/69237272/…提出任何编码解决方案
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-15
  • 2018-05-08
  • 2016-09-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多