【问题标题】:Fetch and Update large amount of data in postgresql在 postgresql 中获取和更新大量数据
【发布时间】:2021-03-18 22:56:23
【问题描述】:

我正在构建一个 Web 应用程序并使用 postgreSQL 作为数据库。我需要每 5-10 分钟获取和更新数千行。假设我的表中有 1M 行具有以下架构:

ServiceStatus {
 id: string,
 userid: string,
 status: string,
}

我将根据服务状态获取所有行(假设每 5 分钟获取 100,000 行)并根据状态我将在 db 中进行一些处理和更新状态。正如我所说,我将每 5-10 分钟执行一次。最有效的方法是什么?

【问题讨论】:

  • status 上面有索引吗?提供您打算运行的查询示例。每个 status 是否覆盖 100,000 行,还是要获取多个 status 值?
  • 状态可以是活动的或待定的。我将获取所有待处理的服务状态。 (从 servicestatus 表中获取所有数据)。例如,假设我们有 10 行,其中 6 行待处理,4 行处于活动状态,在这种情况下,我想获取所有 6 行并进行一些处理,然后根据结果更新状态。这并不复杂,我们可以简单地使用 select 和 where 语句来过滤数据、获取所有值而不是更新它,但问题是我们正在大规模且更频繁地执行此操作,因此需要进行一些优化。
  • 那么你真的看到减速了吗?如果是这样,EXPLAIN ANALYZE 的查询结果会有所帮助吗?
  • “一些处理”可以在数据库中完成,还是必须在外部完成?
  • @jjanes 在外面,我将使用状态 ID 与外部 api 交互并获取最新状态。

标签: sql node.js database postgresql batch-processing


【解决方案1】:

每 5 分钟获取 100,000 行并不费力。更新它们也不应该是,但可能不会仅仅为了将其设置回与它已经拥有的值相同的值而更新它们。

如果这被证明是一个问题,它会归结为您没有向我们描述的一些细节,我们无法猜测。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-12-29
    • 2011-03-07
    • 1970-01-01
    • 2021-08-01
    • 2021-08-02
    • 1970-01-01
    • 2021-10-07
    相关资源
    最近更新 更多