knex.js有多个更新优化

时间:2017-09-06 08:02:08

标签: node.js postgresql knex.js

现在,我正在进行工作流的方式如下:

  1. 从postgres数据库中获取行列表(假设为10.000)
  2. 对于我需要调用API端点并获取值的每一行,因此从API
  3. 返回10.000个值
  4. 对于我返回值的每一行,我需要更新数据库中的字段。更新了10.000行
  5. 现在我在每次API提取后都在进行update,但您可以想象这不是最优化的方式。

    我还有其他选择吗?

1 个答案:

答案 0 :(得分:0)

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

要在单个查询中执行多个更新,您可以使用公用表表达式并将多个小查询打包到单个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)实现有一个错误。