[PHP-users 12118] Re: ページをまたいで、 DB のデータをロックする方法について

Kazunori Ito php-users@php.gr.jp
Tue, 10 Dec 2002 10:34:25 +0900


伊藤です。


> 商品データをSELECTすると同時に
> /hoge/lock/(商品コード)
> というファイルがないか確認し、無ければユーザ自身で
> /hoge/lock/(商品コード)を作成して確認画面→UPDATE処理へ進む。
> もしあればファイルの作成日時を確認して
> ファイル作成日時が現在より(例えば)5分以内であれば「ロック中」とみなして
> 編集不可(エラー表示)、5分以上たっていればファイルを自動削除して
> 確認画面→UPDATE処理へ進むといった具合です。
ご意見ありがとうございます。
ファイル作成日でロックをかけるなら、デッドロックの危険性も減りそうですね。
ただ、5分なら5分と編集時間が決まってしまうのがネックになってしまいそうで
す。
入力項目が多いため、少なくとも2,30分はかかると思うのです。
そうなると、途中で他のページに移動した時の30分ロックが厳しいかもしれませ
ん。



> 1. 各レコードに最終更新時刻を持たせる
> 2. 商品情報編集ページ(あるいは確認ページ)で最終更新時刻を取得
> 3. SQL発行ページで再度最終更新時刻を取得し、変化してなければ書き込み、そ
> うでなければ書き込みできない、などの処理
>
>  ポイントはロックをかけるならSQL発行ページだけで、というところです。
ご意見ありがとうございます。
確かにそうですね。やはり、複数ページでロックをかけるという処理は
途中でどのページにも逃げれてしまうWebでは、
どうしても危険な処理になりそうです。


とりあえず、ページをまたがってロックをかける事はあまり良くない
という事ですね。
実現するとしても、SQL発行ページでのみロックをかけるという処理で
対応してみようと思います。


もし、他にもいい方法がありましたら、引き続きお願いします。