アリスとボブが両方とも商品リストを編集しているeコマースサイトを考えてみましょう。アリスは説明を改善し、ボブは価格を更新しています。同時にAcme Wonderウィジェットの編集を開始します。ボブは最初に終了し、製品を新しい価格で保存します。アリスは説明を更新するのに少し時間がかかり、完了すると、新しい説明で製品を保存します。残念ながら、彼女は価格を古い価格で上書きしますが、これは意図していませんでした。
私の経験では、これらの問題はWebアプリでは非常に一般的です。一部のソフトウェア(Wikiソフトウェアなど)にはこれに対する保護があります-通常、2番目の保存は「編集中にページが更新されました」で失敗します。しかし、ほとんどのWebサイトにはこの保護がありません。
コントローラーメソッド自体がスレッドセーフであることに注意してください。通常、データベーストランザクションを使用します。これにより、アリスとボブがまったく同じ瞬間に保存しようとしても、破損を引き起こさないという意味で安全になります。競合状態は、アリスまたはボブがブラウザに古いデータを持っていることから生じます。
このような競合状態をどのように防ぐことができますか?特に、私は知りたい:
- 使用できるテクニックは何ですか?たとえば、最終変更時刻の追跡。それぞれの長所と短所は何ですか。
- 役立つユーザーエクスペリエンスとは何ですか?
- この保護はどのフレームワークに組み込まれていますか?