存储用于显示图表的指标数据的最佳方法是什么?
目前我有一张表analytics(domain::text, interval_in_days::int, grouping::text, metric::text, type::text, labels[], data[], summary::json)
domain
是指标的总体类别。就像他们所处的应用程序的哪一部分一样。可以是sales
或support
等。
interval_in_days
和grouping
是'查看选项'最终用户可以在接口级别指定具有不同的数据点视图。
grouping
可以是date
,day_of_week
或time_of_day
interval_in_days
可以是7, 30 or 90
labels
是x轴上的标签数组,data
是相应的数据点。
type
可以是data_series
或summary
。如果data series
,则行代表用于绘制图表的数据,而summary
的{{1}}字段填充了summary:json
{total_number_of_X: 132, median_X: 320.. etc}
只是相应图表所代表的指标,因此metric
由此可见,对于我显示的每个度量/图表,我有9个(3个间隔* 3个分组)。对于每个metric
,我有一行类型为domain
。
我每隔几个小时就会将多个表中的大量数据聚合到分析表中。因此,我不必执行昂贵的查询。
我觉得这不是最佳方法,所以我真的很想看到其他人如何完成同样的任务或任何建议。
答案 0 :(得分:0)
存储9行原始数据并稍后将它们聚合到更舒适的地方没有任何问题。这是一种常见方法,在某些情况下具有性能优势。
我在设计中真正重新思考的是数据类型。根据您的描述,您似乎可以将所有::text
字段转换为::varchar(20)
之类的字段。然后,您可以在这些列上使用STORAGE PLAIN,您的桌子将变得更有效率。
另外,请考虑添加外键来描述各个列中存储的内容。例如,您声明grouping
可以是date
,day_of_week
或time_of_day
,因此您可以使用groupings
表来列出这些选项。但同样,外键必须由索引覆盖,因此出于性能原因,您可能希望跳过该外键。