独家锁定

时间:2014-02-23 19:11:30

标签: mongodb locking couchdb pessimistic-locking nosql

我想获得mongo或couch db的独家锁。

  1. 有可能吗? (API参考将有所帮助)
  2. 当客户突然死亡时,是否有可能释放独占锁?

1 个答案:

答案 0 :(得分:1)

关于MongoDB:

Mongo不支持它开箱即用,并且在并发性方面非常有限。要简要了解支持哪些内容以及哪些内容不受支持,请参阅mogo FAQ on concurrency。这对我来说非常有用。

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

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

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

希望它有所帮助!