【发布时间】:2020-12-08 06:40:36
【问题描述】:
我有一个具有这种结构的表:id、value、metric、timestamp,并且在(id、metric、timestamp)列上有一个主键索引。 我以每 10 秒 1M 的速率传入数据,因此您可以想象到一天结束时我最终会得到一个大型数据库。我需要使用以下简单算法对数据进行下采样:获取超过一小时的数据,并将每个指标的所有记录减少到每 10 分钟 1 条。为了做到这一点,我实现了 java 服务,它每小时获取一次特定指标的最后一小时的记录,选择要删除的记录,并批量生成 1000 个 DELETE 语句并将其发送到 postresql。
我生成每个删除语句的方式是:
DELETE FROM TABLE WHERE id = :id, metric = :metric, timestamp = :timestamp;
DELETE FROM TABLE WHERE id = :id, metric = :metric, timestamp = :timestamp;
DELETE FROM TABLE WHERE id = :id, metric = :metric, timestamp = :timestamp;
公元前3 列上的索引。当我尝试按 id 删除时(它只是一个序列字段,而不是主键),它很慢。
无论如何,我尝试执行我的解决方案,但它没有赶上。删除数据真的很慢。我不想使用 PostreSQL 存储过程,b.c。我希望代码更灵活:使用并行处理等。有什么建议可以提高性能吗?我正在使用 PostgreSQL 12。
【问题讨论】:
标签: database postgresql