2014-02-08 128 views
0

我有不同的模型生成有关其统计数据:分析系统 - 数据库设计或架构存储统计

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

因此,所有的统计数据都将一个MySQL 统计表,这种结构:

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

您的模式很好,假设值都是数值(这对于统计值是合理的)。

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

您或许可以通过适当的索引提高查询的性能。没有看到这些疑问,正确的方法是推测性的。

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

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

第二种方法是我的第一种方法。第三将是我的首选。

+0

谢谢,这些选项看起来不错。 – user3175226

+0

是用于存储数百万行这样的行的不错选择吗?我正在考虑mongodb或hbase,也许 – user3175226

+0

@ user3175226。 。 。所有这些都是几百万行的合理选项。我偏爱基于SQL的解决方案,所以我会选择MySQL。 –