2014-02-23 50 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上,所以其他任何代碼都可以做任何事情。

希望它有幫助!