knex.js多个更新optmised
现在我正在做我的工作stream的方式是这样的:
- 从一个postgres数据库获取行列表(比如说10.000)
- 对于每一行我需要调用一个API端点并获得一个值,所以从API返回的10.000值
- 对于每一行我有一个值返回我需要更新数据库中的字段。 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)
实现有一个错误。