【问题标题】:knex.js multiple updates optmisedknex.js 多次更新优化
【发布时间】:2017-09-07 04:28:34
【问题描述】:

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

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

现在我在每次获取 API 后都执行update,但您可以想象这不是最优化的方式。

我还有什么其他选择?

【问题讨论】:

  • 如果你能适配你在2中使用的API,创建一个可以取超过1个值的请求,以尽量减少请求数。
  • 然后尝试计算某些数据是否相等,如果相等,则无需执行会为您提供相同结果的请求
  • 感谢您的意见,但我的问题与更新 postgres 数据库有关
  • 哦抱歉,误会了 :) Here 也许你会感兴趣

标签: node.js postgresql knex.js


【解决方案1】:

该代码中的瓶颈可能是从 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) 实现有一个错误。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多