我想获得mongo或couch db的独家锁。
答案 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上,所以任何其他代码都可以做任何事情。
希望它有所帮助!