存储用于图表的指标数据的最佳方式

时间:2016-08-27 08:14:35

标签: postgresql database-design

存储用于显示图表的指标数据的最佳方法是什么?

目前我有一张表analytics(domain::text, interval_in_days::int, grouping::text, metric::text, type::text, labels[], data[], summary::json)

domain是指标的总体类别。就像他们所处的应用程序的哪一部分一样。可以是salessupport等。

interval_in_daysgrouping是'查看选项'最终用户可以在接口级别指定具有不同的数据点视图。

grouping可以是dateday_of_weektime_of_day interval_in_days可以是7, 30 or 90

labels是x轴上的标签数组,data是相应的数据点。

type可以是data_seriessummary。如果data series,则行代表用于绘制图表的数据,而summary的{​​{1}}字段填充了summary:json

{total_number_of_X: 132, median_X: 320.. etc}只是相应图表所代表的指标,因此metric

的每个值都有一个单独的图表

由此可见,对于我显示的每个度量/图表,我有9个(3个间隔* 3个分组)。对于每个metric,我有一行类型为domain

我每隔几个小时就会将多个表中的大量数据聚合到分析表中。因此,我不必执行昂贵的查询。

我觉得这不是最佳方法,所以我真的很想看到其他人如何完成同样的任务或任何建议。

1 个答案:

答案 0 :(得分:0)

存储9行原始数据并稍后将它们聚合到更舒适的地方没有任何问题。这是一种常见方法,在某些情况下具有性能优势。

我在设计中真正重新思考的是数据类型。根据您的描述,您似乎可以将所有::text字段转换为::varchar(20)之类的字段。然后,您可以在这些列上使用STORAGE PLAIN,您的桌子将变得更有效率。

另外,请考虑添加外键来描述各个列中存储的内容。例如,您声明grouping可以是dateday_of_weektime_of_day,因此您可以使用groupings表来列出这些选项。但同样,外键必须由索引覆盖,因此出于性能原因,您可能希望跳过该外键。