私は、MySQL または Postgres のいずれかの SQL バックエンドで Ruby On Rails を使用しています (ただし、実際には問題ではありません)。
Web アプリケーションはマルチプロセスであり、アプリ サーバー プロセスのクラスターが実行され、同じ DB で動作します。
私は疑問に思っていました: レース状況を処理するための適切で一般的な戦略はありますか?
これは DB 集約型のアプリケーションになるため、2 つのクライアントが同じデータを同時に変更しようとする様子が容易にわかります。
状況を単純化しましょう:
- 2 つのクライアント/ユーザーが同じデータを取得します。これが同時に発生しても問題ありません。
- これらは、同じデータを表す 2 つの Web ページで提供されます。
- その後、両者は互換性のない変更を同じレコードに書き込もうとします。
このような状況を処理する簡単な方法はありますか?
各レコードに関連付けられた ID トークンを使用することを考えていました。このトークンはレコードの更新時に変更されるため、古いデータ (期限切れの古いトークン) に基づく後続の更新試行は無効になります。
より良い方法はありますか?たぶん、MySQL に既に組み込まれているものでしょうか? この場合に使用されるコーディング パターンにも興味があります。
ありがとう