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 が再び繰り返されます。は互いにキャンセルします。