1

我们有一个数据库,其中包含 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。将相互取消。

4

2 回答 2

1

ajax mite 被多次调用,尝试使用你的萤火虫进行检查。您可能需要禁用替代方法,直到成功标志出现。

于 2012-10-01T10:22:29.653 回答
0

也许用户通过 UI 多次触发查询。由于 id 是 PK,因此会触发两次相同的查询。

另一个问题。

给定情况时:

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 回答