2009-09-11 67 views

回答

0

你是什麼意思「何時使用pess.lock」?

如果你正在處理DBMS管理的數據,你沒有選擇。 DBMS在每次更新時都使用它,因爲如果要確保數據完整性,DBMS本身也沒有選項。

基於MVCC-

即使系統(?如Oracle)沒有選擇,只能使用序列2相鎖定到與例如正確處理活動:

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的插入,數據庫將最終違反密鑰。

應用程序控制的鎖最好只是悲觀,如果您可以確保它們不會處於等待狀態,而用戶需要鍵入某些輸入內容(或者正在執行任何可能導致長時間活動的活動延遲)。但這是對相反問題的回答,「何時不使用它」。

編輯

的指示爲「當使用它」可能是在高競爭的情況下,你要「快速失敗」爲取其交易「排第二」。這可以確保您無法完成的事務不會佔用太多資源,並且這些資源可用於更快完成(因此更快的鎖定釋放)的「先到先得」的事務並獲得鎖定。然而,要意識到你也越來越容易陷入死鎖,並且由於鎖是應用程序控制的,所以解決任何死鎖都是由你決定的。

0

是的,當你絕對不能有兩個人同時改變同一個記錄。銀行做這件事最多。

+0

你知道嗎?大多數其他評論家似乎認爲這是一個神話,因爲銀行系統的速度已經過優化,無論如何都需要錯誤處理和交易撤銷。 – 2009-09-11 08:56:55

+0

並非所有的系統都以這種方式工作,但你會注意到一些。例如,當您的個人詳細信息的一部分在一臺機器上打開時,在另一臺同時訪問您的數據的機器上完成禁用。我猜這也取決於銀行的基礎設施和軟件。 – 2009-09-11 09:21:50

1

悲觀併發性應該可能用於頻繁發生併發編輯的情況,而不是特例。樂觀併發可能會在用戶被通知他們的編輯不會被保存時給用戶帶來令人震驚的結果,所以當這是正常情況時應該避免。