Sequelize 使用每个事务命令的新查询命中数据库

Sequelize hits database with new query for every transaction command

我已经按照本教程进行续集交易:

https://sequelize.org/master/manual/transactions.html

它确实有效,但我注意到对于该代码中的每个命令,sequelize 都会向数据库服务器发送一个查询并等待响应。

这是一个问题的原因是因为我的数据库服务器离我的节点服务器不是很近,所以每次往返都可能很昂贵。

这看起来非常浪费。由于 sequelize 实际上所做的只是将 js 代码转换为 MySQL 语法,那么仅构造查询然后将其全部发送到数据库不是更高效吗?或者至少,避免在调用 sequelize.transaction() 时发送查询,并在后续命令中发送“开始交易”。 那么基本上有没有一种方法可以用多行查询代码创建一个事务,然后一次将其全部发送到数据库?

不幸的是,你想做的似乎是 ORM 的反模式,其中包括 sequelize.js。 ORM 是管理数据库连接而不是查询本身的功能性方式。 您可能想改用 query builer。看一下这个。 http://knexjs.org/

查询构建器和 ORM 之间的区别

  • ORM 为您提供与数据库的连接,您可以使用 APIs 运行 查询。在大多数情况下,查询对用户是黑盒化的。

  • 查询生成器 API 不会 运行 查询,直到用户将生成的查询放入数据库连接。


此外,transaction 将用于回滚和提交以保持相同的上下文(google atomicity)并且可以' t 将查询放在一起以减轻网络工作量。