簡體   English   中英

如何防止兩個用戶對 web 應用程序中的數據記錄執行相同的操作?

[英]How to prevent two users from taking same action on a data record in a web application?

我們有一個由 spring 框架支持的 web 應用程序,該框架向用戶顯示記錄列表。 我們有一個要求,我們希望限制兩個用戶同時操作單個記錄。 即,如果多個用戶嘗試對同一記錄執行操作,則請求首先處理哪個操作的用戶 rest 都應該無法處理它。

我們已經研究了鎖定技術(樂觀鎖定),但不確定這是否是實現此功能的正確方法或唯一方法。

此外,如果樂觀鎖定是正確的方法,那么任何指向該方向的指針都會受到贊賞。

Optimistic Locking 確實是解決這個問題的常用技術,它完全符合您的要求:如果多個用戶想要同時執行沖突的操作,那么只有第一個這樣的操作成功,而其他所有操作都被拒絕。 將這一點與通知其他用戶他們的請求失敗,因為其他人更快,並讓他們選擇查看其他用戶所做的操作相結合,可以讓他們協調他們的更改,並在必要時重試。

樂觀鎖定的優點是它僅在發生實際沖突時才會生效。 如果沖突很少,這是最佳的,這就是為什么這種技術被稱為“樂觀”鎖定。

樂觀鎖定的缺點是它會在發生沖突時丟棄用戶工作。 如果沖突頻繁,並且提交的工作很重要,那么簡單地丟棄該工作可能太浪費了。 此外,有時這項工作除了更新必須只發生一次的數據庫之外,還會產生副作用。 例如,該工作可能涉及發送一封信或 email,在樂觀鎖定失敗的情況下無法召回。

在這些情況下,您需要防止用戶開始有沖突的工作,而不是等到他們希望保存他們的工作。 這通常是通過允許用戶在開始實際工作之前在應用程序級別獲得問題的所有權來實現的。 結合確保只有一個用戶可以同時擁有所有權(通過樂觀鎖定),這可以防止開始沖突的工作。 這種技術的缺點是即使結果沒有沖突,用戶也需要采取額外的行動,因此這優化了沖突代價高昂或頻繁發生的情況。

至於如何使用樂觀鎖,網上有很多不錯的教程。 我首先檢查您使用的 Spring 和 JPA 實現的參考手冊。

暫無
暫無

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

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