node.js - knex.js 多个更新优化

标签 node.js postgresql knex.js

现在我的工作流程是这样的:

  1. 从 postgres 数据库中获取行列表(假设 10.000)
  2. 对于每一行,我需要调用一个 API 端点并获取一个值,因此从 API 返回 10.000 个值
  3. 对于返回值的每一行,我需要更新数据库中的一个字段。 10.000 行已更新

现在我在每次获取 API 后执行 update,但正如您想象的那样,这不是最优化的方式。

我还有什么其他选择?

最佳答案

该代码的瓶颈可能是从 API 获取数据。这个技巧只允许更快地向数据库发送许多小查询,而不必在每次更新之间等待往返时间。

要在单个查询中执行多个更新,您可以使用通用表表达式并将多个小查询打包为单个 CTE 查询:

https://runkit.com/embed/uyx5f6vumxfy

knex
  .with('firstUpdate', knex.raw('?', [knex('table').update({ colName: 'foo' }).where('id', 1)]))
  .with('secondUpdate', knex.raw('?', [knex('table').update({ colName: 'bar' }).where('id', 2)]))
  .select(1)

knex.raw 技巧有一个解决方法,因为 .with(string, function) 实现有一个错误。

关于node.js - knex.js 多个更新优化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46069822/

相关文章:

java - 如何使用 maven 部署 node.js 应用程序?

node.js - 使用 playwright 抓取本地 html 文件

postgresql - 创建创建新序列的过程/函数

sql - 如何在同一列中加入不同的 FK 值?

sql - 在 Knex 中为表别名

node.js - 如何调用socket.io中的函数?

javascript - 使用没有任何 token 进行用户身份验证的快速 session 是否安全?

node.js - 使用 pg-promise 的嵌套事务

postgresql - 使用唯一整数更新现有记录

javascript - 如何用 Knex.js 查询多对多关系?