【问题标题】:C++ MongoDB how to "lock" collection so other processes can't write itC ++ MongoDB如何“锁定”集合,以便其他进程无法编写它
【发布时间】:2013-03-16 12:24:04
【问题描述】:

我正在编写一个应用程序,它将在多个服务器上运行。

假设我有 2 个集合 XY

X 有这样的文件:{ _id : 123, name : "something"}

Y 有这样的文件:{ _id : 456, parent_id : 123, name : "anything"}

当我从X 中删除一个文档时,我想从Y 中删除所有子项,并且我想以某种方式锁定集合Y,因此server n 无法编写任何新文档到 Y 与确切的 parent_id。

我理解的MongoDB是没有集合级锁的,那么究竟应该如何解决这个问题呢?

另外请记住,将两个集合合并为一个不是我的选择。

谢谢!

【问题讨论】:

    标签: c++ mongodb locking


    【解决方案1】:

    这里的 MongoDB 锁不是问题,因为 MongoDB 实际上是在数据库级别上锁的,这意味着如果您可以通过单个查询影响多个集合,那么这很容易实现,但是,就目前而言,这并不容易不使用evaled JavaScript;出于多种原因,我不会这样做:- 一个是所有涉及 x 和/或 y 的查询都需要在 JS 中才能使全局 JS 锁产生所需的效果。

    我能想到的以体面的方式解决此问题的唯一真正方法是应用某种 lock 集合,其他查询必须首先查询该集合,或者您可以将 locked 字段添加到收集并使用原子操作对其进行设置,以便其他查询无法触及那些locked 文档。这是必需的,因为由于并发特性,当没有为其他操作分页数据时,MongoDB 实际上可以消除非原子操作。

    这两种方法是目前我能想到的最好的方法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-03-14
      • 2014-10-31
      • 2014-11-10
      • 2019-08-21
      • 2023-03-20
      • 1970-01-01
      • 1970-01-01
      • 2011-10-01
      相关资源
      最近更新 更多