2

私はアーティストのプロフィールのウェブサイトとそのデータベースコンテンツを管理するためのデスクトップソフトウェアを開発しています。承認と公開のために改訂される同じ量の保留中のレコードを受信トレイで受け取る多くのオペレーターがいます。問題は、2人以上のオペレーターが同じレコードを編集しようとした場合です。データベースサーバー(リモートmysql)がロックエラーを発生させるか、または単に最後にそれを保存したオペレーターのデータのみを維持します。

別のユーザーにこのレコードへのアクセスを許可する前に、誰かがすでにレコードを編集しているかどうか、またはレコードの所有者自身がレコードを再度更新しているかどうかを確認するための最良のアプローチ(より簡単で効率的な方法)は何でしょうか。 Webサイト?

ソフトウェアはまだラボにあります。しかし、私がそれをクライアントに届けるとき、私はそれが問題になることを知っています。

各レコードに「編集中」または「アイドル」のフラグを立てるテーブルを作成できるので、テーブルの構造を変更する必要はありません(人々はすでにサイトでそれらを使用しているため)。しかし、私はそれを行うためのよりエレガントでより速い方法があることを確認する必要があります。

4

1 に答える 1

5

問題を処理するために使用できるシステムレベルのアプローチはたくさんあります。排他的な編集のためにレコードをロックすることは1つだけであり、従来は古いシステムで選択されていました。

より現代的な方法論は、両方の編集をロックせずに続行できるようにすることです。これは、楽観的同時実行制御と呼ばれます。重複する編集がある場合は、それが自動的に解決できるかどうかを確認してください。実際、多くの同時編集は、特にレコードの無関係な部分を編集する場合は、論争の余地がありません。

競合がある場合は、最初の編集が単純に失われないようにすることが重要です。最初の編集者は、トランザクションが成功したことをすでに通知されています。責任は、編集が以前の編集と競合することを2番目の編集者に示すことです。通常、最善の方法は、提案された変更とその他の最近の変更を示して、何をすべきかを選択できるようにすることです。変更を破棄するか、前の変更を上書きするか(最初の編集者に指示する場合もあります)、手動で変更をマージします。 。

これは大したことではないかもしれません。システムの説明は、ユーザーが編集に値するイベントに密接に同期されていないことを示唆しています。各編集がランダムに発生する時間は、編集の競合がまれであることを示しています。このような場合、アイドル/編集の表示で十分かもしれません。

于 2012-07-15T21:14:16.520 に答える