我正在编写一个应用程序,它可以运行在多个服务器上。
假设我有2个集X
和Y
。
X
包含以下文档:{ _id : 123, name : "something"}
Y
包含以下文档:{ _id : 456, parent_id : 123, name : "anything"}
当我从X
删除文档时,我想删除Y
中的所有子项,并且我想以某种方式锁定集合Y
,以便服务器n 可以不要使用完全相同的parent_id将任何新文档写入Y
。
我的理解MongoDB没有集合级锁定,那么我究竟应该如何解决这个问题?
另外请记住,将两个集合合并为一个不是我的选择。
谢谢!
答案 0 :(得分:0)
MongoDB锁定不是问题,因为MongoDB实际上锁定了数据库级别,这意味着如果您可以使用单个查询影响多个集合,那么这很容易实现,但是,因为它很难实现不使用eval
ed JavaScript;我不会这样做有多种原因: - 一个是触及x
和/或y
的所有查询都需要在JS中才能使全局JS锁具有所需的效果。
我能想到以合适的方式解决这个问题的唯一真正方法是应用某种lock
集合,其他查询必须首先查询,或者您可以添加locked
字段集合中的文档并使用原子操作来设置它,以便其他任何查询都不能触及那些locked
文档。这是必需的,因为由于并发功能,当没有为其他操作分页时,MongoDB实际上可以平息非原子操作。
这两种方法目前是我能想到的最好方法。