我们有一个数据库,其中包含 70 多个表和超过 10k 的用户。数据库中的一个表是记录用户的最新动作/更改,以便在比赛周结束(足球比赛)之前保持它们处于未决状态,让我们将此表称为“替代”。
然而,每周我们在游戏周结束时推进系统(应用更改)时,我们会检查是否存储了有关用户更改的任何重复数据(我们不久前注意到了),并从数据库中手动删除它们。
行有主键(不重复),只有数据是重复的。这就像插入查询被触发了两次。(不确定这个或为什么)
示例:假设用户有一队足球运动员(场上 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
NB 每周只有大约 10-100 个用户会发生这种情况,尽管我们的数据库中注册的用户超过 10k。
那么您认为造成问题的原因是什么?我不想使用INSERT IGNORE
,我想找到问题的根源并停止它。
所以基本上,我的问题是:
1-可能是服务器端还是客户端问题?
2-在某些情况下可以调用/触发两次ajax代码吗?
3-执行相同查询两次的sql server中可能有错误吗?
非常感谢您的帮助。
更新:
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。将相互取消。