MVCC

        爲了實現操作可串行化,同時避免鎖機制存在的各種問題,我們可以採用基於多版本併發控制(Multiversion concurrency control,MVCC)思想的無鎖併發機制。人們一般把基於鎖的併發控制機稱成爲悲觀機制,而把MVCC等機制稱爲樂觀機制。這是因爲鎖機制是一種預防性的,讀會阻塞寫,寫也會阻塞讀,當鎖定粒度較大,時間較長是併發性能就不會太好;而MVCC是一種後驗性的,讀不阻塞寫,寫也不阻塞讀,等到提交的時候才檢驗是否有衝突,由於沒有鎖,所以讀寫不會相互阻塞,從而大大提升了併發性能。

        MVCC的一種簡單實現是基於CAS(Compare-and-swap)思想的有條件更新(Conditional Update)。普通的update參數只包含了一個keyValueSet,Conditional Update在此基礎上加上了一組更新條件conditionSet { ... data[keyx]=valuex, ... },即只有在D滿足更新條件的情況下才將數據更新爲keyValueSet;否則,返回錯誤信息。因此,對於單個更新操作可能會失敗,這需要重試以提高成功率。

        如果一組更新條件conditionSet的數據量比較大,會導致網絡傳輸量大而影響性能,可考慮版本號來代替一組更新條件來降低網絡傳輸,例如memcache的cas操作。

發佈了43 篇原創文章 · 獲贊 138 · 訪問量 70萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章