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