簡體   English   中英

Hibernate和並發

[英]Hibernate and Concurrency

我已經閱讀了有關並發hibernate文檔 ,我認為,我已經了解了可用的鎖定方法 ,但我不確定如何實現以下方案。

兩個客戶端F(快速)和S(慢速)訪問數據庫並可以修改相同的對象。

現在,還有一個要求:客戶端F盡可能快地執行應用程序至關重要。

你會如何解決這個問題?

樂觀鎖定的問題:假設F嘗試更新其更改但無法成功執行此操作,因為S已更新其數據。 將從hibernate拋出異常(StaleObjectStateException)。 我將捕獲此異常並合並更改並再次嘗試完全相同的事務,對吧? 然后我不喜歡F重試其事務直到它成功的情況,因此F理論上可以阻塞很長時間。 我是否應該忽略這一點並希望這種情況在實踐中很少見? 或者我可以給我的客戶端像數據庫鎖定優先級?

其他用戶可以忍受這個問題:

StaleObjectStateException(樂觀鎖定)...我們每10000次調用獲得3個例外。

捕獲StaleObjectException:s並增加應該更快的線程的優先級。 StaleObjectException:s應該很少見。 如果這不適合您,請查看悲觀鎖定。

跳出來的第一件事是,如果你要求A + B盡可能快地執行,那么在捕獲和處理異常時你將會大幅減速。 這個過程非常緩慢。

我必須閱讀你的帖子很多次,才能完全掌握你所說的內容並提供更好的解決方案,但對於初學者,我會立即考慮在這種情況下不使用例外。

暫無
暫無

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

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