在我们的应用程序中,我们支持用户编写的插件。
这些插件生成各种类型的数据(int,float,str或datetime),这些数据用一串元数据(用户,当前目录等)以及三个自由文本字段标记( MetricName,Var1,Var2)。
现在我们有几年的这些数据,我正在尝试设计一个模式,允许以分析方式(图表和东西)非常快速地访问这些指标。只要我们感兴趣的指标很少,但这很容易,但我们有不同粒度的大量不同指标,我们希望存储用户添加的数据,以便以后分析(可能在之后)架构更改)。
示例数据:(请记住这是非常简化的)
=========================================================================================================
| BaseDir | User | TrialNo | Project | ... | MetricValue | MetricName | Var1 | Var2 |
=========================================================================================================
| /path/to/me | me | 0 | domino | ... | 20 | Errors | core | dumb |
| /path/to/me | me | 0 | domino | ... | 98.6 | Tempuratur | body | |
| /some/other/pwd | oneguy | 223 | farq | ... | 443 | ManMonths | waste | Mythical |
| /some/other/pwd | oneguy | 224 | farq | ... | 0 | Albedo | nose | PolarBear |
| /path/to/me | me | 0 | domino | ... | 70.2 | Tempuratur | room | |
| /path/to/me2 | me | 2 | domino | ... | 2020 | Errors | misc | filtered |
任何人都可以添加解析器插件来开始测量AirSpeed指标,我们希望我们的analisys工具能够“正常工作”这个新指标。
更新
考虑到许多MetricName事先都是众所周知的,如果我能够对这些指标进行分析,并且只是存储其他用户添加的指标,我就可以满足我的要求。我们可以接受这样一个事实:如果没有对架构进行编辑,新指标将无法用于重型分析。
你们怎么看待这个解决方案?
我将我们的指标分为三个事实表,一个用于不需要MetricTopic的事实,一个用于那些事实,一个用于所有其他指标,包括意外的指标。
赏金:
我会接受任何批评,展示如何使这个系统更具功能性,或者使其与行业最佳实践更加一致。对文献的参考增加了重量。
答案 0 :(得分:5)
如果我理解正确,您正在寻找一种模式来支持在DW中动态创建度量。在经典数据仓库中,每个度量都是一列,因此在Kimball星中,您需要为每个新度量添加一列 - 更改架构。
您拥有的是EAV模型,对EAV的分析并不容易且不快 - 请查看this discussion。
我建议你看一下像splunk这样适合这类问题的工具。
答案 1 :(得分:2)
我可以为我们关心的每个指标添加另一个列,但这可能会达到数百甚至数千。我只是为了更新架构而编写一个脚本,这听起来像是糟糕的设计。
你没有那么多事实。没有那么多单位。
事实有单位。秒,磅,字节,美元。
您需要查看“Star Schema”设计。你有维度(可能很多)和可衡量的事实(可能很少)。
您可以在事实和所有相关维度之间进行联接。你可以总结,依靠事实,并按尺寸分组。
你不可能有成千上万的独立事实。这几乎是不可能的。但是你可以拥有数以千计的维度组合,这很常见。
从维度(定义品质)中分离出事实(可测量的数量令人愉快),你应该在一些事实上有很多维度。
购买一份Kimball。