【发布时间】: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