【问题标题】:Race conditions in Mongo and most efficient patterns?Mongo 中的竞争条件和最有效的模式?
【发布时间】:2011-10-16 06:04:39
【问题描述】:

我刚开始使用 Mongo,我想知道:在 Mongo 中处理竞争条件的最佳方法是什么?

例如,如果我有一个名为 version 的字段设置为 1 的文档,并且用户 A 将其更新到版本 2,当用户 B 尝试从版本 1(用户 B 收到的版本)更新它时,它应该通知用户 B 表示记录已更新。

一种解决方案是使用findAndModify,使用版本字段作为查询条件。

例如:

db.things.findAndModify({query: { version: "1"}, update: { $set: {Title: "New Title"}}})

然而,这里的问题是如果版本已经增加了,这将返回null。问题是这与已删除的记录无法区分,因此必须使用第二个查询来检查文档是否仍然存在以确认它只是已更新的版本。

所以这是我天真的方法。我想知道:在 Mongo 中是否有更合适的模式来提高效率?

【问题讨论】:

    标签: concurrency mongodb


    【解决方案1】:

    这种并发必须从客户端处理。所以你正在做的是,AFAIK,正确的事情。

    我认为任何数据库都会出现这种情况,而不仅仅是 Mongo。

    【讨论】:

    • 请看,在 SQL Server 中,它可以在存储过程中很容易地处理,只需检查传递给存储过程的版本号是否与当前记录的版本号相同。如果是,请更新记录。如果不是,则返回错误代码。 Mongo 中是否有类似这种方法的方法?
    猜你喜欢
    • 2015-03-19
    • 1970-01-01
    • 2022-01-23
    • 1970-01-01
    • 1970-01-01
    • 2020-07-12
    • 2023-01-30
    • 2019-03-21
    • 2017-09-17
    相关资源
    最近更新 更多