2

作成したWebアプリケーションに問題があります。Webサービスを介して顧客の注文を受け取り、処理します。

現在、MySQLをチェックして、この注文が以前に処理されていないことを確認していますが、最近、いくつかの重複が発生しています。これらの2つの注文の間の時間は1ミリ秒離れています。

私はこれが私のアプリケーションであることを知っています、そして私はこれを知っているべきです、しかしそれはもっと一般的な質問です:

1ミリ秒の違いが、MySQLがデータベースにレコードを書き込むことと、アプリケーションがそのレコードをチェックすることの違いである可能性はありますか?MySQLがそのレコードを書き込むためにこの時間を取っている場合、2つの重複する注文がこっそり通過する可能性があることがわかります。

注文がすでに存在するかどうかをチェックしており、存在しないと判断したため、重複を許可しているようです。

もしそうなら-重複が私のシステムに入るのを防ぐためのより良い方法はありますか?

4

1 に答える 1

1

注文が存在するかどうかを確認し、条件付きで1つのトランザクションに挿入する必要があります。

最初にSELECTを実行し、個別にINSERTを実行する場合は、同じINSERTが発生する可能性のあるウィンドウを開いたままにします。

注文を一意にするフィールド(注文IDなど)で一意のインデックスを使用する場合、同じデータを挿入する2回目の試行は、適切に処理できる方法で失敗します。

于 2012-08-30T04:45:19.963 に答える