1

1 万人を超えるユーザーを持つ 70 を超えるテーブルを持つデータベースがあります。データベース内のテーブルの 1 つは、ユーザーの最新のアクション/変更の記録を保持し、ゲームウィーク (サッカーの試合) が終了するまでそれらを保留にしておくためのものです。このテーブルを「代用」と呼びましょう。

ただし、毎週ゲームウィークの終了時にシステムを進める (変更を適用する) 際に、ユーザーの変更に関して重複したデータが保存されていないかどうかを確認し (少し前に気付いていました)、手動でデータベースから削除します。

行には (複製されない) 主キーがあり、データのみが複製されます。挿入クエリが 2 回起動されているようです。(これについて、または理由についてはわかりません)

例: ユーザーがサッカー選手 (フィールドに 11 人、補欠が 4 人) のチームを持っているとします。ユーザーがプレーヤーを選択して [補欠] をクリックすると、そのプレーヤー (フィールドにいる) がベンチにいる選手 (補欠) と入れ替わります。 )。このプロセスは、ユーザーが保存 (JavaScript) する必要なく、すぐに行われます。ただし、チームの詳細には保存されず、変更を追跡する Substitute テーブルに保存されます。

ユーザーはプレーヤー 1 を削除し、プレーヤー 12 を入力したいと考えています (1->12)。最初のステップでは、システムが記録します

id   Team   from_player  to_player
0       x         1           12

そして、ユーザーが別の置換を行う場合

id   Team   from_player  to_player
0      x        1           12
1      x        2           13

そして、ユーザーが選手を交代させると (12->1)、その記録は削除されます (1->12)。

id   Team   from_player  to_player
1     x         2           13

ただし、その行を複数回記録する場合があります

id   Team   from_player  to_player
0       x      1            12
1       x      1            12
2       x      1            12
3       x      2            13

または、重複が間にある可能性があります

id   Team   from_player  to_player
0      x         1          2
1      x         2          13
2      x         1          2
3      x         1          2

注意: これは、データベースに 1 万人以上のユーザーが登録されているにもかかわらず、毎週約 10 ~ 100 人のユーザーにのみ発生します。

では、何が問題を引き起こしていると思いますか? 使いたくないINSERT IGNORE、問題の根本を突き止めて止めたい。

基本的に、私の質問は次のとおりです。

1- サーバーまたはクライアント側の問題である可能性がありますか?

2- 特定の状況下で ajax コードが 2 回呼び出されたり起動されたりする可能性はありますか?

3-同じクエリを2回実行するSQLサーバーでエラーが発生する可能性はありますか?

本当にありがとうございました。

アップデート:

4- 問題がクライアント側にある場合、どのように検査しますか? 提案された方法はありますか?

尋ねる人のために、ユーザーが同じプレーヤーをサブスクバックするとどうなりますか? これが元のプレーヤーのステッティングの一部であるとしましょう。

                       | Original Status | After First Subs|After Second Subs|
                       |                 |                 |                 |
    On the field       |      p1         |        P12      |       P1        |
-----------------------|-----------------|-----------------|-----------------|
                       |                 |                 |                 |
    Subs(at the bench) |      p12        |        P1       |       P12       |
                       |                 |                 |                 |

元のステータス p1 はフィールド上、p12 はベンチ上 (代替) アクションの記録: s1- P1->P12 ステータス = フィールド上の P12。ベンチのP1

s2- P12->P1 ステータス= P1 がフィールドに戻る。P12 ベンチに戻る。

s2 は記録されませんが、s1 は削除されることに注意してください。それは A * -1 のようなもので、それから -A * -1 が再び繰り返されます。は互いにキャンセルします。

4

2 に答える 2

1

ajaxダニは複数回呼び出され、ファイアバグを使用して検査してみました。成功フラグが立てられるまで、代替メソッドを無効にする必要がある場合があります。

于 2012-10-01T10:22:29.653 に答える
0

ユーザーが UI を介してクエリを複数回実行した可能性があります。ID は PK であるため、同じクエリを 2 回実行します。

別の質問です。

与えられた状況:

id   Team   from_player  to_player
0       x      1            12
1       x      1            12
2       x      1            12
3       x      2            13

ユーザーが 12->1 に戻すと、関数は「すべて」の以前のレコードを削除しますか、それとも 1 つだけを削除しますか?

于 2012-10-01T09:39:28.713 に答える