3

複数の同時ユーザーを処理する php/mysql アプリケーションを開発しています。現在閲覧中・編集中のレコードをロック・警告する際の最善策を考えています。

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

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

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

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

おそらく、私は解決策に関して間違ったツリーを吠えています-これを実装する人々の経験は何ですか(かなり一般的なものでなければなりません)要件?

4

3 に答える 3

7

私はこれを行います: 編集フォームに最後の変更の時刻を保存します。送信時のこの時間をデータベースに保存されている時間と比較します。それらが同じである場合は、テーブルをロックし、データを (変更時間と共に) 更新して、テーブルのロックを解除します。時間が異なる場合は、そのことをユーザーに通知し、次の手順を尋ねます。

于 2009-03-20T21:32:50.417 に答える
1

タイムスタンプの比較は良いアイデアです。実装するのに費用がかからず、運用環境で実行する操作も費用がかかりません。ロジックを記述して、誰かが書き込み/更新を行ったために書き込み/更新が行われなかったというステータス メッセージをユーザーに送り返すだけです。

おそらく、「LastUpdateBy」などと呼ばれるフィールドに更新ごとにユーザー名を保存し、更新をプリエンプトしたユーザーに戻すことを検討してください。ユーザーにとってはほんの少しの親切です。企業的な意味ではいいのですが、それが適切ではない環境ではおそらくそうではありません。

于 2009-03-20T21:29:22.220 に答える