knex.js多个更新optmised

现在我正在做我的工作stream的方式是这样的:

  1. 从一个postgres数据库获取行列表(比如说10.000)
  2. 对于每一行我需要调用一个API端点并获得一个值,所以从API返回的10.000值
  3. 对于每一行我有一个值返回我需要更新数据库中的字段。 10.000行更新

现在我正在做每个API获取后的update ,但你可以想象这不是最优化的方式。

我还有什么其他的select?

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

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