「データベース - 排他制御」の版間の差分

ナビゲーションに移動 検索に移動
14行目: 14行目:
<br>
<br>
楽観ロックを使用する場合は、更新対象のデータがデータ取得時と同じ状態であることを判断するために、<br>
楽観ロックを使用する場合は、更新対象のデータがデータ取得時と同じ状態であることを判断するために、<br>
Versionを管理するためのカラム(Versionカラム)を用意する。<br>
バージョンを管理するためのカラム(Versionカラム)を用意する。<br>
更新時の条件として、データ取得時のVersionとデータ更新時のVersionを同じとすることで、データの整合性を保証することができる。<br>
<br>
<br>
楽観ロック.png
更新時の条件として、データ取得時のバージョンとデータ更新時のバージョンを同じとすることで、データの整合性を保証することができる。<br>
<br>
[[ファイル:Database Lock 1.png|フレームなし|中央]]
<br>
<br>
更新対象のデータがデータ取得時と同じ状態であることを判断するためのカラムを、ロックキーと呼ぶ。<br>
更新対象のデータがデータ取得時と同じ状態であることを判断するためのカラムを、ロックキーと呼ぶ。<br>
ロックキーは、Versionカラム以外にも更新日時等のタイムスタンプを用いることもできる。<br>
ロックキーは、バージョンカラム以外にも更新日時等のタイムスタンプを用いることもできる。<br>
ただし、タイムスタンプを秒単位までしか保有していない場合、同一秒に複数の操作を行われた時に楽観ロックの判定ができなくなる。<br>
ただし、タイムスタンプを秒単位までしか保有していない場合、同一秒に複数の操作を行われた時に楽観ロックの判定ができなくなる。<br>
<br>
また、より精度の高いミリ秒まで保有していたとしても同様のことが言える。<br>
また、より精度の高いミリ秒まで保有していたとしても同様のことが言える。<br>
つまり、タイムスタンプではこの懸念は払拭できないため、ロックキーはVersionカラムを利用した方が無難である。<br>
つまり、タイムスタンプではこの懸念は払拭できないため、ロックキーはバージョンカラムを利用した方が無難である。<br>
<br>
また、検知のタイミングが業務終了時での検知となるため、画面入力に時間がかかる業務の場合は最初からやり直しになってしまい、<br>
また、検知のタイミングが業務終了時での検知となるため、画面入力に時間がかかる業務の場合は最初からやり直しになってしまい、<br>
結果として時間のロスとなってしまう。<br>
結果として時間のロスとなってしまう。<br>
36行目: 39行目:
データの整合性を保証することができる。<br>
データの整合性を保証することができる。<br>
<br>
<br>
asdada.png
[[ファイル:Database Lock 2.png|フレームなし|中央]]
<br>
<br>
データのロックは、SELECT ... FOR UPDATE文を利用して実現されるのが一般的である。<br>
データのロックは、SELECT ... FOR UPDATE文を利用して実現されるのが一般的である。<br>

案内メニュー