こんにちは。
まず、楽観的排他と悲観的排他については理解していらっしゃいますね?
悲観的排他=DBの機能として、テーブルロック、あるいは行ロックして、他者にデータ更新させない仕組み
楽観的排他=「プログラムで制御して」結果的に他者にデータ更新させない仕組み
です。
これらのメリット・デメリットはここではおいておきます。
で、楽観的排他の方法ですが、
(1)テーブルに、
・最終更新日時
・バージョンNO
のような楽観排他判定用カラムを用意します。
(2)データ更新時には、上記のカラムを常に更新するようにします。
ex)
・最終更新日時=常にシステム日時で上書き
・バージョンNo=更新のたびに、1づつアップ
(3)データ更新・削除時には、上記のカラムを条件節に含めるようにします。
このとき、
クエリの実行結果が0行だった=その条件に合うレコードがない=楽観排他カラムが更新されいている=他者が更新を行っている
ことになります。
こうすることで、「データ更新したい・削除したい」レコードが、その後変更されていないかどうか?を判断することができます。
O/Rマッパによってはこういった関数をあらかじめ用意してある場合もありますので、うまく利用してみてくださいね。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2015/01/18 15:17
2015/01/18 15:21
2015/01/19 10:32