1

同時実行では、オプティミスティック同時実行で同時実行を制御する方法は、タイムスタンプ フィールドを使用することです。ただし、私の特定のケースでは、同時実行に関してすべてのフィールドを制御する必要はありません。

たとえば、在庫量を保持する製品テーブルがあります。このテーブルには、説明、コードなどのフィールドがあります。私にとっては、1 人のユーザーがこれらのフィールドを変更することは問題ではありませんが、他のユーザーが在庫を変更するかどうかを制御する必要があります。

したがって、タイムスタンプを使用していて、あるユーザーが説明を変更し、別のユーザーが在庫量を変更した場合、2 番目のユーザーは例外を受け取ります。

ただし、同時実行例外の代わりに在庫フィールドを使用すると、最初のユーザーが情報を更新し、2 番目のユーザーが問題なく在庫を更新できます。

在庫フィールドを使用して同時実行を制御するのは良い解決策ですか、それとも常にタイムスタンプ フィールドを使用する方が良いですか?

また、将来、新しい重要なフィールドを追加する必要がある場合は、在庫と新しいフィールドの同時実行を制御するために 2 つのフィールドを使用する必要がありますか? 性能面でのコストは高いですか?

4

1 に答える 1

2

楽観的同時実行の定義を考えてみましょう:

リレーショナル データベース管理システムの分野では、オプティミスティック同時実行制御 (OCC) は、複数のトランザクションが相互に影響を与えることなく完了できること、およびトランザクションが影響を与えるデータ リソースをロックすることなく続行できることを前提とする同時実行制御方法です。(ウィキペディア)

明らかに、この定義は抽象的であり、特定の実装に多くの余地を残しています。

例を挙げましょう。数年前、私は多くの同僚と同じことを評価しましたが、私たちのアプリケーションでは、一部のテーブルで、ユーザーが更新しているフィールドに基づいて同時実行を行うだけで問題ないことに気付きました。

つまり、行を収集してから更新しているフィールドが変更されていない限り、残りのフィールドは実際には問題はなく、行が取得されるため、行を更新できるようにします。とにかく更新時に更新されるため、他のユーザーによる最新の変更を取得できます。

要するに、私はあなたがやっていることは問題なく厳格で厳格なルールは何もないということです. それは本当にあなたが必要とするものに依存します. あなたが話しているように、より柔軟にする必要がある場合は、より柔軟に、つまりシンプルにします。

于 2012-12-08T12:38:22.980 に答える