排他制御とは
1つの共有資産(DBとかCSV)を、複数人で同時操作しても大丈夫にする仕組み
排他制御をしない状態で同時に使用してしまうと、共有資産の整合性が取れなくなってしまう。
(例)1つのレコードを2人が同時編集(UPDATE)した場合に、後に編集した方が優先されてしまう
アプリケーション開発において重要なロックを掘り下げ、ORM における楽観的ロックの実現例を紹介する - Qiita 様より引用
次に、排他制御の代表的な方式2つを記載していく。
楽観ロック
「1つの共有資産を同時に操作することはあまりないだろう」という楽観的な考え方の制御方式
更新対象のデータがデータ取得時と同じ状態であることを確認してから更新することで、データの整合性を保証する方式。
取得したデータと更新対象のデータが同じであるかを確かめるために、テーブルにVersionカラムなどを追加する。
Versionカラムは、更新があるたびに +1 されるような仕組みにしておく
- データ取得
- データ更新前にバージョンカラム(もしくはタイムスタンプ)を、1で取得したデータと比較して同じだったら更新
アプリケーション開発において重要なロックを掘り下げ、ORM における楽観的ロックの実現例を紹介する - Qiita 様より引用
悲観ロック
「1つの共有資産を同時に操作することは頻繁に起こり得るだろう」という悲観的な考え方の制御方式
更新対象のデータを取得時にロックしてしまうことで、他者からの操作を一切出来なくする方式
======================
- データ取得とともにロック
- データ更新
- ロック解放
======================ここまで誰もデータにアクセスできない
A,Bさんがが同じデータを編集しようとした場合、
Aさんが先に編集している場合には、Bさんはそのデータにアクセスすることはできません。
【イメージ】
排他制御(楽観ロック・悲観ロック)の基礎 様より引用