【问题标题】:MongoDB: snapshot read concern does not lock read documentsMongoDB:快照读取关注不锁定读取文档
【发布时间】:2020-12-30 00:18:55
【问题描述】:

首先,我与分片和集群以及副本集节点无关,... 我的用例是 mongo db 的单个实例,其中 1 个节点副本集仅用于启用事务

所以我开始了一个关注快照的事务。 Mongo 为我冻结了世界,并为我提供了一个世界的快照。 然后我找到(读取、查询)一些文档,并根据它们的结果更新一些其他文档。 我有权确保我第一次阅读的文件不会受到影响,如果我自己没有接触过它们并且我只是用它们来判断某事。所以虽然 mongo db 会检查文件是将在更新之前更新,看看是否没有其他人接触过它们,我还需要它来检查那些我只阅读但未更新的文档是否保持不变。

但它不会。它只检查将要更新的文档。

所以说我的域名设计得很糟糕,为了让某人减少某些东西,我首先检查这个人是否有权这样做。所以我开始一个交易,我检查这个人是否有权这样做,然后我允许他更新另一个文件并减少一些东西。但是在我提交我的交易之间和之前,其他一些交易,取消了第一个未提交的人的资格交易递减,第一笔交易愉快地进行,并在不知道他已被取消资格的情况下提交他的交易。

长话短说:我希望 mongo 锁定我已阅读的文档或检查我已阅读的文档是否保持不变

【问题讨论】:

    标签: mongodb mongodb-query


    【解决方案1】:

    快照读取关注(以及一般的MVCC,它是它的一个实现)是一种并发机制,但不是锁定机制。您遇到的行为是预期的。

    如果你想要一个锁,你需要实现锁。您可以使用唯一索引、条件更新以及其他机制进行锁定。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-23
      • 1970-01-01
      • 2018-04-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-13
      相关资源
      最近更新 更多