我们有一个系统可以从客户端接收事件并将它们存储在数据库中。
每个事件都保存为 atomic INSERT
,并且有id_event
一个自动递增的主键。
我们的客户可以执行导致 2 个事件快速连续触发的特定操作:
- 1)
name: 'board-added', boardId: 12344
- 2)
name: 'board-switched', boardId: 12344
这两个事件都以正确的顺序到达我们的服务器。
然而,出于某种原因,我们不断发现一些事件在其对应事件之前board-switched
有一个that 。id_event
board-added
正如您在下面的结果集中看到的那样,board-added
有一个高于id_event
哪个board-switched
是错误的。
{name: "board-switched", boardId: 313994, id_event: 48041136}
{name: "board-added", boardId: 313994, id_event: 48041137}
我的问题是:
INSERT
顺序执行的2 个事件是否可能导致第 2 个事件INSERT
在第 1 个事件之前完成INSERT
?
如果它们是不在同一数据库事务中的单独请求,则无法保证。考虑到现代网络应用程序的架构,如果它们是单独的请求,我几乎可以保证它们不在同一个事务中,因此绝不会相互依赖。
连接池应用程序可能会接受具有不同线程的两个请求,因此即使客户端按顺序发出请求,如果第一个请求的
insert
执行速度较慢,第二个请求也可能先于第一个请求进入数据库。