【发布时间】:2020-05-08 21:15:37
【问题描述】:
我有一个如下的已发送警报表:
id | user_id | sent_at
1 | 123 | 01/01/2020 12:09:39
2 | 452 | 04/01/2020 02:39:50
3 | 264 | 11/01/2020 05:09:39
4 | 123 | 16/01/2020 11:09:39
5 | 452 | 22/01/2020 16:09:39
警报很少,我有大约 1 亿个 user_id。该表总共有约 5 亿条条目(过去 2 个月)。
我想查询每个用户在过去 X 小时/天/周/月内的 1000 万个用户 ID(保存在另一个表中)的警报。我不能使用任何外部时间序列数据库,只能在 postgres 中完成。
我尝试为每个用户保留每小时的存储桶。但是数据非常稀疏,以至于我的行太多(userIds*hours)。例如。从该表中获取过去 10 小时内 1000 万用户的警报计数需要很长时间。
user_id | hour | count
123 | 01/01/2020 12:00:00 | 2
123 | 01/01/2020 10:00:00 | 1
234 | 11/01/2020 12:00:00 | 1
【问题讨论】:
标签: sql postgresql time-series rollup