我正在构建一个网络分析工具并使用 Postgresql 作为数据库。我不会在每次用户访问时插入 postgres,而只会每 5 秒聚合一次数据:
time country browser num_visits
========================================
0 USA Chrome 12
0 USA IE 7
5 France IE 5
正如您所看到的,我每 5 秒插入多行(每个维度组合一个)。
为了减少查询中需要扫描的行数,我想根据它们的分辨率有多个具有上述模式的表:5SecondResolution、30SecondResolution、5MinResolution、...、1HourResolution。现在,当用户询问最后一天的情况时,我将转到小于 5 秒分辨率表的小时分辨率表(尽管我也可以使用那个 - 它只是要扫描更多的行)。
现在,如果小时分辨率表包含 0、1、2、3 小时的数据,... 但用户要求查看从 1:59 到 8:59 的每小时趋势,该怎么办。为了获取 1:59-2:59 期间的数据,我可以对不同的分辨率表进行多次查询,因此我从 1MinResolution 获得 1:59:2:00,从 30MinResolution 获得 2:00-2:30 等等。 AFAIU 我已经将一个查询交易到一个巨大的表(有许多相关的行要扫描),多个查询到中型表+在客户端合并结果。
这听起来像是一个很好的优化吗?对此还有其他考虑吗?