0

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

假设我有 2 个集合XY.

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

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

当我从中删除一个文档时,X我想从中删除所有子级,Y并且我想以某种方式锁定集合Y,因此服务器 n无法Y使用该确切的 parent_id 写入任何新文档。

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

还要记住,将两个集合合并为一个对我来说不是一个选择。

谢谢!

4

1 回答 1

0

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

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

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

于 2013-03-26T16:04:53.553 回答