我们有一个从客户端接收事件并将它们存储在数据库中的系统。
每个事件都保存为一个 atomic INSERT,并且有id_event一个自动递增的主键。
我们的客户可以执行一个特定的动作,导致 2 个事件被快速连续触发:
name: 'board-added', boardId: 12344 name: 'board-switched', boardId: 12344两个事件都以正确的顺序到达我们的服务器。
但是,出于某种原因,我们不断发现某些board-switched事件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之前完成INSERT?
如果它们是不在同一数据库事务中的单独请求,则无法保证。鉴于现代 Web 应用程序的架构,如果它们是单独的请求,我几乎可以保证它们不在同一个事务中,因此绝不会相互依赖。
连接池应用程序可能会接受具有不同线程的两个请求,因此即使请求是由客户端按顺序发出的,如果第一个请求的insert执行速度较慢,第二个请求也可以在第一个请求之前进入数据库。
| 归档时间: |
|
| 查看次数: |
75 次 |
| 最近记录: |