我正在使用大约20,000个用户和四个应用程序服务器的rails应用程序。在对无关问题进行故障排除的过程中,我发现了数据库中的一些(大多数)重复行。这是一个例子
select transaction_uid,created_at,data from my_table where user_uid=23;
返回类似于此的内容:
|9004 | 2015-01-19 21:17:05 | "data"
|12052 | 2015-01-21 14:11:27 | "abc"
|12053 | 2015-01-21 14:11:27 | "abc"
问题在于最后两行 - uid是顺序的,时间戳是相同的(或者一个不同,最多),并且数据是相同的。
起初我认为这是一个前端问题 - 也许用户双击提交按钮,处理此插入的用例被调用两次 - 毕竟它不是真的< / em>副本,因为uid(由mysql生成)是唯一的。
许多&#39;放置&#39;陈述和堆栈跟踪之后,我相当肯定情况并非如此。我最好的猜测是,拥有多个应用程序服务器是一个问题,而且由于它并没有以负面的方式对应用程序产生重大影响,我会留下这个解释并继续前进 - 但是那里&#39这是一件有趣的事情。以下是受此影响的用户:
user_uid duplicate transaction uid
1893 3884
2015 1332, 1592
2328 1736, 1759
2484 12499
2941 5728
368 1318
3897 2924, 3032, 4340
4581 4390, 4437, 6462, 13485
5199 5047, 7955, 13609
5639 6113, 6130, 13450, 14927
6082 11878, 13213, 14324
6673 6421
6760 12359
7761 12053, 13261
在一个应用程序中有14个用户,大约20k。客观上不是一个大问题 - 但如果这只是源自多个应用程序服务器的问题,我希望它会随机影响用户。然而,受影响的用户中,只有一半以上受到影响不止一次,其中许多受到多次影响。在看到这个之后,它让我重新思考通过前端引入这个的可能性 - 也许用户4581和5639是专业的星际争霸玩家?
奇怪的是,我感觉不舒服,只需将其粉碎到多个应用服务器。有没有人遇到过这个?
修改
在与领先的前端开发人员交谈后,我了解到所有交互式元素都使用AJAX,并且在收到来自服务器的消息之前一直处于锁定状态。因此,这实际上不可能来自前端的用户。