3


3

私は複数の同時ユーザーを処理するphp / mysqlアプリケーションを開発しています。 現在表示中または編集中のレコードに対するロックまたは警告に関しては、最適な方法を考えています。

避けるべきシナリオは、2人のユーザーがレコードを表示し、一方が変更を行い、もう一方が同様に行うことです。1つの変更が前の変更を上書きする可能性があります。

WordPressの最新バージョンでは、これを検出するために何らかの方法を使用していますが、完全に信頼できるようには見えません - 少なくとも私の経験では、誤検知を返すことがよくあります。

私は、何らかの形のajaxがアプリケーションを「ping」して、レコードがまだ表示/編集されていることを知らせる必要があると仮定します(そうでなければ、ユーザーは単にブラウザウィンドウを閉じ、その後アプリケーションはどのようにそれを知るでしょう)。

もう1つの解決策は、レコードが更新のために送信された最終更新時刻を確認し、その間に別の場所で更新されたかどうかを確認してから、ユーザーに続行または自分の変更を破棄する選択を提供することです。

たぶん、私は解決策に関して間違った木を吠えています - これを実装することの人々の経験は何ですか(これはかなり一般的であるはずです)?

3 Answer


6


私はこうするでしょう:最後の修正の時間を編集フォームに保存します。 提出時のこの時間とデータベースに格納されている時間を比較してください。 それらが同じであれば、テーブルをロックし、データを(修正時間とともに)更新し、そしてテーブルのロックを解除します。 時間が異なる場合は、それをユーザーに通知して、次のステップに進みます。


1


タイムスタンプの比較をするとよいでしょう。 それは実行するのが安価であり、そしてそれは本番で実行するのが安価な操作です。 あなたはただ誰かがそれに打ち勝ったので彼らの書き込み/更新が起こらなかったというステータスメッセージをユーザーに送り返すためにロジックを書く必要があります。

おそらく、各更新のユーザー名を 'LastUpdateBy’のような名前のフィールドに保存し、それを更新を横取りしたユーザーに返すことを検討してください。 ユーザーにとってほんの少しの機嫌です。 企業的にはいいが、おそらくそれが適切ではないかもしれない環境ではない。