Php 收集大量访问统计数据的方法

Php 收集大量访问统计数据的方法,php,mysql,statistics,Php,Mysql,Statistics,我有一个网站,在那里用户可以发布他们的文章,我想给每一篇文章的访问和它的作者的参考完整的统计数字。这里的实现似乎很简单,只需为每次访问存储一个数据库记录,然后使用聚合函数绘制图形等等 问题是,文章在24小时和一个月内收到大约30万次浏览,统计表将获得大约900万条记录,这是一个非常大的数字,因为我的服务器不是很强大 这类任务有解决办法吗?是否有一种算法或缓存机制允许在不损失准确性的情况下存储长期统计数据 这里是我的原始统计表: visitid INT articleid INT ip INT d

我有一个网站,在那里用户可以发布他们的文章,我想给每一篇文章的访问和它的作者的参考完整的统计数字。这里的实现似乎很简单,只需为每次访问存储一个数据库记录,然后使用聚合函数绘制图形等等

问题是,文章在24小时和一个月内收到大约30万次浏览,统计表将获得大约900万条记录,这是一个非常大的数字,因为我的服务器不是很强大

这类任务有解决办法吗?是否有一种算法或缓存机制允许在不损失准确性的情况下存储长期统计数据

这里是我的原始统计表:

visitid INT
articleid INT
ip INT
datetime DATETIME

除非你特别热衷于自己存储你的统计数据,否则你可能会考虑使用或它的一个现代同行,这比90年代的远程托管命中计数器要好得多。您可以在

上找到Google Analytics PHP界面的API,假设是一个自制的使用情况跟踪解决方案(而不是其他回复中建议的GA),两个数据库设置可能就是您想要的:

  • 一个“实时”数据库,在vist事件发生时捕获它们
  • 一种“离线”数据库,其中定期收集“实时”数据库中的数据,以便[可选地]聚合和索引
此设置的目的主要由操作问题驱动。“实时”数据库没有索引(或最小索引),以便快速插入,并且它会定期清空,通常是每晚,当流量较小时,因为“离线”数据库会收集白天收集的事件

两个数据库可以具有完全相同的模式,或者“脱机”数据库可能会引入各种形式的聚合。应用于离线数据库的特定聚合详细信息可能会有很大的不同,这取决于保持数据库大小的愿望以及被视为重要的数据(大多数统计/聚合功能会导致一些信息丢失,需要确定哪些丢失是可接受的,哪些不可接受)

由于使用日志价值的“半衰期”性质,即详细信息的相对价值随时间衰减,一种常见的策略是在多个层次上聚合信息,即在最后(比如)X天收集的数据大部分保持不变,在X和Y天之间收集的数据部分聚合,最后,超过Y天的数据只保留最显著的信息(例如,点击次数)