【问题标题】:Best way to store metric data used for graphs存储用于图表的指标数据的最佳方式
【发布时间】:2023-03-08 13:19:01
【问题描述】:

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

目前我有一张桌子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 是对应的数据点。

typedata_seriessummary。如果data series,该行表示用于绘制图形的数据,而summarysummary:json 字段填充有{total_number_of_X: 132, median_X: 320.. etc} 之类的对象

metric 只是对应图表所代表的指标,因此metric 的每个值都有一个单独的图表

由此可知,对于我显示的每个指标/图表,我有 9 个(3 个区间 * 3 个分组)。对于每个domain,我有一个类型为summary 的单行。

每隔几个小时,我就会将多个表中的大量数据汇总到分析表中。所以我不必执行昂贵的查询。

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

【问题讨论】:

    标签: postgresql database-design


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2014-07-28
      • 2014-06-20
      • 1970-01-01
      • 2013-09-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多