mysql:连接访客的平均时间-优化

mysql:连接访客的平均时间-优化,mysql,database,database-design,Mysql,Database,Database Design,我工作的系统在这里要解释的稍微复杂一点,但我可以把它简化为更简单的东西 假设我有一个简单的聊天服务器,我计算每个客户端保持连接的秒数,并将其保存在一个表中(我使用的是mysql)。 因此,每次客户端连接时,我都会将其保持连接的时间以秒为单位(int) 如果他断开连接并再次连接,我会将此信息保存在另一行,因为这是我想要的方式。客户端一天连接到服务器的次数在50k-500k之间,甚至更多(我知道,我知道,但这与我复杂的系统有关,但与我这里的问题无关) 我的问题是,我想向每一位客户展示一些关于他的访问

我工作的系统在这里要解释的稍微复杂一点,但我可以把它简化为更简单的东西

假设我有一个简单的聊天服务器,我计算每个客户端保持连接的秒数,并将其保存在一个表中(我使用的是mysql)。 因此,每次客户端连接时,我都会将其保持连接的时间以秒为单位(int) 如果他断开连接并再次连接,我会将此信息保存在另一行,因为这是我想要的方式。客户端一天连接到服务器的次数在50k-500k之间,甚至更多(我知道,我知道,但这与我复杂的系统有关,但与我这里的问题无关)

我的问题是,我想向每一位客户展示一些关于他的访问的统计数据,类似于谷歌分析(按天计算),更具体地说,我想展示他在某一天花费的平均时间

我正在寻找一种优化的方法来实现这一点。到目前为止,我考虑了以下解决方案:

  • 使用从表中选择平均值(时间),其中日期=。。。。但速度问题可能会出现

  • 将每天和用户的平均时间保存在单独的表格中。这个解决方案是可以的,但提出了另一个问题:如何节省平均时间?以下是我所想的情况:

  • a) 每次客户端连接时使用mysql触发器更新统计数据(使用INSERT AFTER…)这个解决方案不错,但是就像我说的,客户端每天可以连接500k次,这意味着500k次mysql需要计算平均时间

    b) 制作一个单独的应用程序,类似于cron作业或计时器任务,每X小时更新一次统计数据,这样我就知道mysql服务器只会在几个小时内使用一次,具体取决于我拥有的客户端数量

    到目前为止,我正在考虑实施2.b解决方案,但我说过在继续之前先问你。如果你有更好的想法,请分享


    谢谢

    您可以使用解决方案a,但不要反复计算平均值。您可以通过存储当前平均值和用于计算平均值的项目数量来完成此操作。您的公式如下:

    (当前平均*旧项目数量+新项目价值)/(旧项目数量+1)

    我认为:

    可能会出现速度问题

    这还不足以避免最简单、最不容易出错的解决方案,尤其是当确实发生速度问题时,很容易更改

    也就是说,如果出现速度问题,我同意你的评估:使用一个计算平均值的计划作业,比添加一个触发器(每次插入都会受到惩罚)要好