将 table 中的数据计数存储到 "trending" table

Storing data counts from table into a "trending" table

我们有一个 table,我们必须为不同的字段组合提供许多计数。 这需要相当长的时间才能完成并且不提供历史数据,所以我正在考虑将这些计数存储在另一个 table 中的最佳方式,并带有时间戳,这样我们就可以快速查询它们获取历史趋势。 对于每个计数,我们需要 4 条信息来识别它,并且我们想要存储大约 1000 个不同的指标。 我正在考虑三种不同的策略,有一个计数和一个时间戳,但在如何识别检索计数方面有所不同。

  1. 1 table 有 4 个字段来标识计数,这 4 个字段不会被规范化,因为它们包含来自不同外部 tables 的数据。
  2. 1 table with 1 "tag" 字段,其中将包含4条信息作为标签。这个标签可以被丰富并保存在另一个 table 中,可能每个标签部分都有一个字段并将它们链接到外部 tables.
  3. 不同的 tables 用于不同的计数组能够在一个或多个字段上进行归一化,但这将需要 6 到数十个 tables。

我选择第一个,根本没有标准化,但想知道是否有人有更好或更简单的方法来存储所有这些计数。

值示例: 状态,已安装,全部,虚拟,1234,01/05/2015

谢谢, 艾萨克

当您有很多指标并且不需要使用它们进行指标内计算时,您可以选择 1. 解决方案。

我可能会像这样构建一个 table

Satus_id | Installed_id | All_id | Virtual_id | Date | Value

或者如果前四列的组合有一个合适的名称,我可能会创建两个 table(我认为你将这种可能性称为带有 2 的第二种解决方案):

Metric Table
Satus_id | Installed_id | All_id | Virtual_id | Metric_id | Metric_Name 

Values Table 
Metric_id | Date | Value

如果您有指标名称或其他详细信息,这很好,否则您将需要使用第一种方法为每个组合复制。

在这两种情况下,使用不同的指标进行行内操作会有点复杂,因此仅建议将此方法用于高级 KPI。

最后,由于最后两个字段的所有可能组合始终存在于您 table 您可以考虑将它们转换为列:

Satus_id | Installed_id | Date | All1_Virtual1 | All1_Virtual2 | ... | All10_Virtua30

All 有 10 个值,Virtual 有 30 个值,您将有 300 列,这不是很容易处理,但是如果您必须执行以下操作,它们将是值得的:

(All1_Virtual2 - All5_Virtual23) * All6_Virtual12

但在这些情况下,我更愿意(如果可能的话)提前进行计算以减少列数。