ソリューションの管理を集中的にする詳細は、クラッシュまたは接続障害の後にロックを解除することです。楽観的ロックと悲観的ロックの間のトレードオフが実際にあるのはここです。楽観的ロックが失敗したときに手動で編集をマージまたはやり直すのは苦痛ですが、悲観的および永続的ロック モデルでクラッシュした後に修正することは、それ自体が頭痛の種になります (90 年代に Pervasive に裏打ちされた会計システムのユーザーをサポートした人なら誰でも、与えられた詳細を教えてくれるでしょう)。チャンス)
1 つの答えは、トランザクションと同時実行性を管理するために RDBMS のメカニズムを使用することです。SELECT FOR UPDATE または環境と分離レベルに適した構文を使用してレコードを取得します。クライアントのいずれかがクラッシュまたは切断された場合、トランザクションはロールバックされ、ロックが解除されます。
Web のようなコネクションレス環境や、接続が頻繁に失われて回復する環境では、セッション タイムアウトを使用したセッション ベースのモデルも機能します。
- 有効期限が切れたセッションの場合は、レコードの既存のロックをクリアしようとします
- レコードを sessionid にロックしようとします (前のステップが失敗した場合は失敗します)
- ロックされたレコードを選択します (前のステップが失敗した場合、レコードは返されません)
したがって、セッションの有効期限が切れるとロックが解除されます。クラッシュ後にロックを手動で削除する必要がなく、クライアント/接続の問題に対するある程度の耐性。ただし、コーディングにはもう少し手間がかかります。