我正在构建一个网站分析工具并使用Postgresql作为数据库。我不会插入Postgres的每个用户的访问,但只有汇总数据分别5秒期间:带有postgres的网站分析架构
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的数据,我可以对不同的分辨率表进行多种查询,所以我从1分辨率获得1:59:2:00,从30分辨率获得2:00-2:30等等。 AFAIU我已经把一个查询交易到一个巨大的表(有许多相关的行要扫描),多个查询到中表+在客户端结合结果。
这听起来像是一个很好的优化? 对此有何其他考虑?
目前尚不清楚首先要解决的问题。什么推动你需要优化这个?顺便说一句,这听起来像是一个很好的用于PostgreSQL 9.4的minmax索引的用例。这是一段时间了,但最初的结果在大餐桌上很不错。 –
问题是,如果我只使用一个表格(5秒分辨率,因为它是我需要的最高分辨率),那么在几天时间内实际上对小时分辨率感兴趣的查询将需要做一个完整的表格扫描(可能有500M行)。我想通过使用具有相同数据但分辨率较低(5分钟,1小时等)的附加表格来缓解它的想法。 –