将 table 中的数据计数存储到 "trending" table
Storing data counts from table into a "trending" table
我们有一个 table,我们必须为不同的字段组合提供许多计数。
这需要相当长的时间才能完成并且不提供历史数据,所以我正在考虑将这些计数存储在另一个 table 中的最佳方式,并带有时间戳,这样我们就可以快速查询它们获取历史趋势。
对于每个计数,我们需要 4 条信息来识别它,并且我们想要存储大约 1000 个不同的指标。
我正在考虑三种不同的策略,有一个计数和一个时间戳,但在如何识别检索计数方面有所不同。
- 1 table 有 4 个字段来标识计数,这 4 个字段不会被规范化,因为它们包含来自不同外部 tables 的数据。
- 1 table with 1 "tag" 字段,其中将包含4条信息作为标签。这个标签可以被丰富并保存在另一个 table 中,可能每个标签部分都有一个字段并将它们链接到外部 tables.
- 不同的 tables 用于不同的计数组能够在一个或多个字段上进行归一化,但这将需要 6 到数十个 tables。
我选择第一个,根本没有标准化,但想知道是否有人有更好或更简单的方法来存储所有这些计数。
值示例:
状态,已安装,全部,虚拟,1234,01/05/2015
- 第一个字段,状态,最多可以有 10 个值
- 第二个字段,已安装,每个不同的字段 1 最多可以有 10 个
- 第三个字段 all,最多可以有 10 个不同的值,但它们对所有类别都是相同的
- 第四个字段,虚拟,最多可以有 30 个值,并且对于之前的所有类别也是相同的。
- 最后两个字段将是一个数字和一个时间戳
谢谢,
艾萨克
当您有很多指标并且不需要使用它们进行指标内计算时,您可以选择 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
但在这些情况下,我更愿意(如果可能的话)提前进行计算以减少列数。
我们有一个 table,我们必须为不同的字段组合提供许多计数。 这需要相当长的时间才能完成并且不提供历史数据,所以我正在考虑将这些计数存储在另一个 table 中的最佳方式,并带有时间戳,这样我们就可以快速查询它们获取历史趋势。 对于每个计数,我们需要 4 条信息来识别它,并且我们想要存储大约 1000 个不同的指标。 我正在考虑三种不同的策略,有一个计数和一个时间戳,但在如何识别检索计数方面有所不同。
- 1 table 有 4 个字段来标识计数,这 4 个字段不会被规范化,因为它们包含来自不同外部 tables 的数据。
- 1 table with 1 "tag" 字段,其中将包含4条信息作为标签。这个标签可以被丰富并保存在另一个 table 中,可能每个标签部分都有一个字段并将它们链接到外部 tables.
- 不同的 tables 用于不同的计数组能够在一个或多个字段上进行归一化,但这将需要 6 到数十个 tables。
我选择第一个,根本没有标准化,但想知道是否有人有更好或更简单的方法来存储所有这些计数。
值示例: 状态,已安装,全部,虚拟,1234,01/05/2015
- 第一个字段,状态,最多可以有 10 个值
- 第二个字段,已安装,每个不同的字段 1 最多可以有 10 个
- 第三个字段 all,最多可以有 10 个不同的值,但它们对所有类别都是相同的
- 第四个字段,虚拟,最多可以有 30 个值,并且对于之前的所有类别也是相同的。
- 最后两个字段将是一个数字和一个时间戳
谢谢, 艾萨克
当您有很多指标并且不需要使用它们进行指标内计算时,您可以选择 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
但在这些情况下,我更愿意(如果可能的话)提前进行计算以减少列数。