分析系统 - 用于存储统计数据的数据库设计或模式

时间:2014-02-08 16:18:07

标签: sql database data-binding data-modeling bigdata

我有不同的模型生成关于它们的统计数据:

Model        Example stats
-----        -------------
User         qty_logins... qty_toys... qty_friends
Group        qty_users... qty_invites...
Section      qty_visits

因此所有统计数据都会转到具有此结构的MySQL stats 表中:

model_id    kind       name           value
-----       ----       ----           -----
123         user       qty_logins     5
123         user       qty_toys       14
456         group      qty_invites    21
789         section    qty_visits     23

目前我有100k行,性能还可以。

问题1)这是存储统计数据的好方法吗?或者我应该在不同的表格中分开(例如,每种模型类型一个)。

问题2)我正在尝试实施动态结果生成,例如 qty_logins + qty_visits 。问题是每次数据发生变化时都会自动更新。是否有任何类型的动态数据生成数据库或其他任何工具可以帮助实时实现这一目标?

1 个答案:

答案 0 :(得分:1)

您的架构很好,假设值都是数字(对于统计值来说是合理的)。

此结构称为实体值属性(EVA)模型。它们将每个值存储在单独的行中。通常,它们不是存储数据的最佳方式。但是,在这种情况下,您可以在各种表上获得灵活的统计数量。两者都可能随着时间而改变。所以,这似乎是一个合理的应用程序。

您可以使用适当的索引来提高查询的性能。没有看到查询,正确的方法是推测性的。

问题(2)相当困难。对于您的示例并不难,但如果您想支持分层表达式,它将变得复杂(即,基于其他表达式的表达式)。对于您的示例,您有三个基本选项:

  • 您可以使用触发器更新值。您必须有其他列或另一个表来指定关系。
  • 您可以使用视图检索值,并在获取结果时进行计算。
  • 您可以使用存储过程对数据进行所有更改,并将逻辑放在存储过程中。

第二种选择是我的第一种方法。第三个是我的偏好。