mysql數據庫悲觀鎖與樂觀鎖

鎖:主要是爲了解決共享數據併發訪問的一致性、有效性問題。

悲觀鎖與樂觀鎖是兩種常見的資源併發鎖設計思路

1、悲觀鎖(Pessimistic Lock)
特點:先獲取鎖,再進行業務操作,即“悲觀”的認爲獲取鎖是非常有可能失敗的,因此要先確保獲取鎖成功再進行業務操作
通常所說的“一鎖二查三更新”即指的是使用悲觀鎖。數據庫上的悲觀鎖需要數據庫本身提供支持。
2、樂觀鎖(Optimistic Lock)
特點:先進行業務操作,最後一步獲取鎖。在完成業務操作後需要實際更新數據的最後一步再去拿鎖。
樂觀鎖在數據庫上的實現完全是邏輯的,不需要數據庫提供特殊的支持。

樂觀鎖優缺點:
優點:
從上面的例子可以看出,樂觀鎖機制避免了長事務中的數據庫加鎖開銷,大大提升了大併發量下的系統整體性能表現。

缺點:
樂觀鎖機制往往基於系統中的數據存儲邏輯,因此也具備一定的侷限性,如在上例中,由於樂觀鎖機制是在我們的系統中實現,來自外部系統的更新操作不受我們系統的控制,因此可能會造成髒數據被更新到數據庫中。在系統設計階段,應該充分考慮到這些情況出現的可能性,並進行相應調整(如將樂觀鎖策略在數據庫存儲過程中實現,對外只開放基於此存儲過程的數據更新途徑,而不是將數據庫表直接對
外公開)。

總結:
樂觀鎖( Optimistic Locking ) 相對悲觀鎖而言,樂觀鎖機制採取了更加寬鬆的加鎖機制。悲觀鎖大多數情況下依靠數據庫的鎖機制實現,以保證操作最大程度的獨佔性。但隨之而來的就是數據庫性能的大量開銷,特別是對長事務而言,這樣的開銷往往無法承受。而樂觀鎖機制在一定程度上解決了這個問題。樂觀鎖,大多是基於數據版本( Version )記錄機制實現。
樂觀鎖在不發生取鎖失敗的情況下開銷比悲觀鎖小,但是一旦發生失敗回滾開銷則比較大,因此適合用在取鎖失敗概率比較小的場景,可以提升系統併發性能

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章