當我們要對資料庫中的一條資料進行修改的時候,為了避免同時被其他人修改,最好的辦法就是直接對該資料進行加鎖以防止併發。這種借助資料庫鎖機制在修改資料之前鎖定,再修改的方式被稱為悲觀併發控制(pcc)。
之所以叫做悲觀鎖,是因為抱有悲觀的態度去修改資料的併發控制方式,認為資料併發修改的概率比較大,所以需要在修改之前先加鎖。
悲觀併發控制實際上是 「先取鎖,再訪問」 的保守策略,為資料處理的安全提供了保證。
在效率上,處理加鎖的機制會讓資料庫產生額外的開銷,還會有死鎖的可能性。降低並行性,乙個事務如果鎖定了某行資料,其他事務就必須等待該事務處理完才可以處理那行資料。
悲觀鎖的實現方式:悲觀鎖的實現,依靠資料庫提供的鎖機制。在資料庫中,悲觀鎖的流程如下:
樂觀鎖是相對悲觀鎖而言的,樂觀鎖假設資料一般情況下不會造成衝突,所以在資料進行提交更新的時候,才會正式對資料的衝突與否進行檢測。
相對於悲觀鎖,在資料庫進行處理的時候,樂觀鎖不會使用資料庫提供的鎖機制,一般是增加 version 引數,記錄資料版本
樂觀併發控制相信事務之間的資料競爭概率非常小,因此盡可能直接操作,提交的時候才去鎖定,不會產生任何鎖和死鎖。
悲觀鎖與樂觀鎖
悲觀鎖與樂觀鎖 悲觀鎖 pessimistic locking 顧名思義就是採用一種悲觀的態度來對待事務併發問題,我們認為系統中的併發更新會非常頻繁,並且事務失敗 了以後重來的開銷很大,這樣以來,我們就需要採用真正意義上的鎖來進行實現。悲觀鎖的基本思想就是每次一 個事務讀取某一條記錄後,就會把這條記...
樂觀鎖與悲觀鎖
悲觀鎖 pessimistic locking 顧名思義就是採用一種悲觀的態度來對待事務併發問題,我們認為系統中的併發更新會非常頻繁,並且事務失敗了以後重來的開銷很大,這樣以來,我們就需要採用真正意義上的鎖來進行實現。悲觀鎖的基本思想就是每次乙個事務讀取某一條記錄後,就會把這條記錄鎖住,這樣 其它的...
樂觀鎖與悲觀鎖
鎖 locking 這個概念在我們學習多執行緒的時候曾經接觸過,其實這裡的鎖和多執行緒裡面處理併發的鎖是乙個道理,都是暴力的把資源歸為自己所有。這裡我們用到鎖的目的就是通過一些機制來保證一些資料在某個操作過程中不會被外界修改,這樣的機制,在這裡,也就是所謂的 鎖 即給我們選定的目標資料上鎖,使其無法...