C ++ MongoDB如何“锁定”集合,以便其他进程无法编写它

时间:2013-03-26 15:56:49

标签: c++ mongodb locking

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

假设我有2个集XY

X包含以下文档:{ _id : 123, name : "something"}

Y包含以下文档:{ _id : 456, parent_id : 123, name : "anything"}

当我从X删除文档时,我想删除Y中的所有子项,并且我想以某种方式锁定集合Y,以便服务器n 可以不要使用完全相同的parent_id将任何新文档写入Y

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

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

谢谢!

1 个答案:

答案 0 :(得分:0)

MongoDB锁定不是问题,因为MongoDB实际上锁定了数据库级别,这意味着如果您可以使用单个查询影响多个集合,那么这很容易实现,但是,因为它很难实现不使用eval ed JavaScript;我不会这样做有多种原因: - 一个是触及x和/或y的所有查询都需要在JS中才能使全局JS锁具有所需的效果。

我能想到以合适的方式解决这个问题的唯一真正方法是应用某种lock集合,其他查询必须首先查询,或者您可以添加locked字段集合中的文档并使用原子操作来设置它,以便其他任何查询都不能触及那些locked文档。这是必需的,因为由于并发功能,当没有为其他操作分页时,MongoDB实际上可以平息非原子操作。

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