2 INSERT 语句是否保证按顺序完成?

nic*_*min 2 postgresql

我们有一个从客户端接收事件并将它们存储在数据库中的系统。

每个事件都保存为一个 atomic INSERT,并且有id_event一个自动递增的主键。

我们的客户可以执行一个特定的动作,导致 2 个事件被快速连续触发:

  • 1) name: 'board-added', boardId: 12344
  • 2) name: 'board-switched', boardId: 12344

两个事件都以正确的顺序到达我们的服务器。

但是,出于某种原因,我们不断发现某些board-switched事件id_event在其对应board-added事件之前具有。

正如你可以在下面的一组结果看,board-added具有较高的id_eventboard-switched这是错误的。

{name: "board-switched", boardId: 313994, id_event: 48041136} {name: "board-added", boardId: 313994, id_event: 48041137}

我的问题是:

是否有可能INSERT顺序执行的2 个事件会导致第2 个事件在第一个事件INSERT之前完成INSERT

Phi*_*lᵀᴹ 5

如果它们是不在同一数据库事务中的单独请求,则无法保证。鉴于现代 Web 应用程序的架构,如果它们是单独的请求,我几乎可以保证它们不在同一个事务中,因此绝不会相互依赖。

连接池应用程序可能会接受具有不同线程的两个请求,因此即使请求是由客户端按顺序发出的,如果第一个请求的insert执行速度较慢,第二个请求也可以在第一个请求之前进入数据库。