2014-02-23 106 views
0

我想要获得与mongo或沙发db的独家锁定。独家锁定

  1. 这可能吗? (API参考将有所帮助)
  2. 当客户端突然死亡时,排他锁可能被释放吗?

回答

1

关于MongoDB的:

蒙戈不支持开箱即用,是非常有限的,当它涉及到并发性的东西。要简要了解什么是支持和不支持的,请参阅mogo FAQ on concurrency。这对我来说很有帮助。

但你总是可以伪造它。用对象创建一个集合来管理你独占锁。然后使用findAndModify将isLocked字段设置为true。不要忘记添加查询选项以查找isLocked = false的对象。如果一个对象被返回,这意味着你有锁,如果没有,对象已经被锁定。

db.lockCollection.findAndModify({ 
    query: { isLocked: false }, 
    update: { $set: { isLocked: true } }, 
    upsert: true 
}); 

为了避免无限锁定因您可以创建一个TTL index一些任意时间段后,将删除该文档的失败。这种方法的主要缺点是它是一个自定义的,所以它可能有错误,锁实际上是在你的应用程序端,而不是在db上,所以其他任何代码都可以做任何事情。

希望它有帮助!