簡體   English   中英

何時使用悲觀並發?

[英]When to use pessimistic concurrency?

在哪些情況下使用悲觀並發?

悲觀並發應該用於經常進行並發編輯的情況下,而不是在例外情況下使用。 當告知用戶將不保存其編輯內容時,樂觀並發可能會給用戶帶來震撼的結果,因此在正常情況下應避免這樣做。

是的,當您絕對不能有兩個人同時更改同一條記錄時。 銀行最常這樣做。

“何時使用pess。鎖定”到底是什么意思?

如果要處理DBMS管理的數據,則別無選擇。 DBMS在每次更新和停止時都使用它,因為DBMS本身也無法選擇以確保數據完整性。

甚至基於MVCC的系統(例如Oracle?)也別無選擇,只能使用兩階段鎖定來序列化活動以正確處理以下情況:

TX A啟動,TX B啟動; TX A插入ID 1; TX B插入ID 1; TX A檢查約束; TX B檢查約束; TX A提交; TX B提交。

如果允許A / B的約束檢查忽略B / A完成的相同ID的插入,則數據庫最終將違反密鑰。

應用程序控制的鎖最好僅是悲觀的,前提是您可以確保在預期用戶輸入某些輸入時(或正在執行任何可能導致長時間延遲的活動)不會使它們處於待處理狀態。 但這是對相反問題“何時不使用它”的答案。

編輯

對於“何時使用它”的指示可能是,在競爭激烈的情況下,無論哪個事務“第二次發生”,您都希望“快速失敗”。 這樣可以確保您無法完成的事務不會占用過多的資源,並且這些資源可用於更快地完成“先到來”並獲得鎖定的事務(從而也可以更快地釋放鎖)。 但是,請務必意識到,您也增加了陷入死鎖的可能性,並且由於鎖是由應用程序控制的,因此您必須解決所有死鎖。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM