我们有一个拥有超过70个表的数据库,用户数超过10k。数据库中的一个表是记录用户的最新动作/变化,以便在游戏周结束前将其保持待定(足球比赛),让我们称这个表为'替补'。
然而,每周我们在游戏周结束时推进系统(应用更改),我们检查是否存在关于用户更改的任何重复数据(我们已经注意到了一段时间),并从中手动删除它们数据库。
这些行具有主键(不重复),只有数据重复。就像插入查询被触发两次一样。 (不确定这个或为什么)
示例:假设用户拥有一支足球运动员队伍(场上11名,替补队员4名) 当用户选择球员并点击替补时,该球员(场上)将与替补席上的球员交换(替补)。此过程将立即发生,无需用户保存(JavaScript)。但是,它不会保存在团队详细信息中,而是会保存在跟踪更改的替换表中。
用户想要移除玩家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
N.B即使在我们的数据库中注册的用户超过10k,但每周只有大约10-100个用户。
那么您认为导致问题的是什么?
我不想使用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 Status = P1返回该字段。 P12回到替补席上。
请注意,s2不会被录制,但是,s1将被删除。它就像A * -1,然后再次-A * -1。意志相互抵消。
答案 0 :(得分:1)
答案 1 :(得分: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?