0

マルチユーザーの扱い

要件: ユーザーが次のことができるアプリケーション (mysql php jquery) があります。

  1. レコードを確認し、特定のフィールドを更新します。
  2. 注文を選択して請求書を発行します。

問題: 問題は、同じ期間に請求書を 2 回発行してはならないことです。また、1 つのフィールドを 2 人以上のユーザーが同時に更新することはできません。

可能な解決策:

  1. テーブルが更新されたときにテーブルをロックし、ユーザーがアクションを実行した場合は、通知してリロードします。
  2. ユーザーが特定のアクションを実行すると、他のユーザーが実行できるようにそれらのアクションをロックするロック システムを実装します。
  3. ...
4

3 に答える 3

2

Lookup 'optimistic locking' - basically means adding a version attribute and passing it back and incrementing it with updates to make sure nobody else got there first. If N users try same operation based on same version, one wins, others loose. It's fast simple easy for a wide variety of cases.

于 2009-08-18T15:30:16.723 に答える
1

これが役立つかどうかはわかりませんが、.Net の DataTable Adapter のコンテキストでこれについて最初に読んで、データ行を読んでから変更を追跡し、変更後に db に送り返します。変更されたフィールドだけでなく、すべてのフィールドを送信します。

行にタイムスタンプを使用できます。タイム スタンプを他の情報と共に読み取り、保存する前に現在のタイム スタンプ (行の) が現在のものよりも新しいかどうかを確認します。このようにして、タイムスタンプを比較し、そこに最初に到達した場合は更新して、この部分だけにロックを最小限に抑えることができます。

于 2009-08-18T15:33:48.527 に答える
0

あなたがた両方に感謝します。1つの楽観的ロック(http://cwiki.apache.org/CAY/optimistic-locking-explained.html)とタイムスタンプアプローチの両方のオプションを検討します。

于 2009-08-18T17:57:34.803 に答える