在我们的应用程序中,我们支持用户编写的插件。
这些插件生成各种类型的数据(int、float、str 或 datetime),这些数据标有元数据束(用户、当前目录等)以及三个自由文本字段 (指标名称、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 指标,我们希望我们的分析工具能够“正常工作”于该新指标。
更新:
考虑到许多 MetricName 是事先众所周知的,如果我可以启用对这些指标的分析并简单地存储其他用户添加的指标,我就可以满足我的要求。我们可以接受这样一个事实,即如果不对模式进行编辑,新指标将无法用于重型分析。
你们觉得这个解决方案怎么样?
我将我们的指标分为三个事实表,一个用于不需要 MetricTopic 的事实,一个用于需要的事实,一个用于所有其他指标,包括意外指标。
对于赏金:
我会接受任何表明如何使该系统更实用或使其更符合行业最佳实践的批评。引用文献会增加权重。
最佳答案
如果我理解正确的话,您正在寻找一种模式来支持在 DW 中即时创建度量。在经典数据仓库中,每个度量都是一个列,因此在 Kimball 星中,您需要为每个新度量添加一个列——更改模式。
您拥有的是一个 EAV 模型,对 EAV 的分析既不简单也不快速——看看 this discussion .
我建议您查看像 splunk 这样的工具,适用于这类问题。
关于mysql - 数据仓库任意字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3722660/