数据库设计 - 保持25 000个用户的用户历史平均值

时间:2014-01-30 21:16:50

标签: mysql database

我有一个数据库,在1个表中有大约25 000个用户。该表汇总了用户名和其他几个列,这些列中包含了他们当前速度(加密散列速度),平衡等相关信息。该数据库每7.5分钟就会使用新的快照数据进行更新。目前我只保留最新数据(最新更新/插入数据库)。这很好用。现在我想继续发布它并保留每个用户的统计数据,并能够显示每个用户的平均速度。他们的averange散列速度,一周和一个月的平衡等等。这怎么可能?任何开始的建议?我没有自己提出任何解决方案,所以这就是我要问的原因。统计周和月的平均值不必非常精确。谢谢!

1 个答案:

答案 0 :(得分:0)

我会使用RRD concept 这样,您可以预测DB的增长,这与仅与用户数量成正比。 任何类型的报告都将非常快速和简单。您可以放大数字,但随着时间的推移精度越来越低。

将时间分成桶:1米,5米,1小时,1天,1周 假设你每隔10分钟就有一个新的快照。 分配空间(列)以保持:

  1. 最后6次实际测量(覆盖1分钟)
  2. 5列,用于保存平均超过1分钟的数据
  3. 20列,用于保存平均超过5分钟的数据
  4. 24列,用于保存平均超过1小时的数据
  5. 7列,用于保存平均超过24小时的数据
  6. etc
  7. 如果有新快照,请以循环方式将其写入#1类列。一旦你要覆盖第一个 - 计算平均值并将数据写入列类型#2。以相同的循环方式写出#2类型。上述所有类型都相同。在平均每个步骤(或使用任何其他聚合函数)并向上移动数据。这一举动引发了另一次平均并向上移动。

    在任何给定时间,您都可以查看基于1m,5m,1h,1day,1周时间范围的平均值。

    您甚至不需要在MySQL或您选择的任何数据库中实现它 - 使用可用的RRD工具。