1

私はクライアント向けのショッピングカートアプリケーションを開発しており、購入中に衝突が発生しないようにするための戦略を見つけようとしています。

たとえば、在庫に5つのアイテムが残っていて、2人のクライアントがたまたま同時に購入した場合。在庫は4つではなく3つ残っている必要があります。購入直前に、現在の在庫が何であるかを知る必要があるようです。また、まだ購入していなくても、誰かが最後のアイテムを手にしたかどうかを知る方法が必要です。

これらの条件を確実に満たすために、どのような戦略/パターンを使用する必要がありますか?SQLServerを使用して.netmvcアプリケーションを開発しています。

4

1 に答える 1

2

ああ同時進行。ここで考慮すべきことがいくつかあります。

  1. 在庫を保存し、そこから差し引いて、別の更新で再度書き込むと、在庫数が問題になる可能性があります。
  2. 更新が単一のトランザクションで在庫を現在の量だけ減らす場合、在庫がマイナスになる可能性があります

更新は次の条件を満たしている必要があります。

  1. 取引を開始する
  2. 選択を実行してインベントリを読み取ることにより、問題の行をロックします。手元に足りない場合も対応。
  3. 十分なインベントリが行 3a を更新する場合、テスト中にインベントリをチェックします。
  4. トランザクションをコミットまたはロールバックする

これを行うにはさまざまな方法がありますが、ここでは上記の方法で問題なく動作するはずです。新しい transactionscope オブジェクトを介してコード内でトランザクションを開始するか、begin transaction を介して proc 内のサーバー側でトランザクションを開始できます。

于 2012-12-30T22:44:59.680 に答える