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

时间:2011-07-03 14:30:20

标签: php mysql statistics

我有网站,用户可以发布他们的文章,我想提供有关每篇文章访问和推荐人的完整统计数据。这里的实现看起来很简单,只需为每次访问存储数据库记录,然后使用聚合函数绘制图形等等。

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

这种任务有解决方案吗?是否存在允许存储长期统计数据而不会丢失准确性的算法或缓存机制?

P.S。这是我原来的统计表:

visitid INT
articleid INT
ip INT
datetime DATETIME

2 个答案:

答案 0 :(得分:6)

假设使用自制的使用跟踪解决方案(与其他响应中建议的GA相反),您可能正在寻找两个数据库设置:

  • 一个“实时”数据库,可以捕获vist事件。
  • “离线”数据库,定期收集“实时”数据库中的数据,以便[可选]进行汇总和索引。

此设置的目的主要是由操作问题驱动。对于快速插入,“实时”数据库没有索引(或最低索引),并且当流量较轻时,通常每晚都会定期清空,因为“离线”数据库会收集当天收集的事件。 / p>

两个数据库可以具有完全相同的模式,或者“离线”数据库可以引入各种形式的聚合。应用于脱机数据库的特定聚合详细信息可能会有很大差异,具体取决于保持数据库大小的检查和依赖于被认为重要的数据(大多数统计/聚合函数引入一些信息丢失,并且需要确定哪些丢失是可以接受的,但不是。)

由于使用日志值的“半衰期”性质,细节的相对价值随时间衰减,一个常见的策略是在多个层中聚合信息,从而收集最后一个数据,比如X天数基本保持不变,在X天和Y天之间收集的数据部分汇总,最后,比Y天更早的数据仅保留最显着的信息(例如,点击次数)。

答案 1 :(得分:1)

除非您特别热衷于自己存储统计数据,否则您可以考虑使用Google Analytics或其中一个现代版本,这比90年代的旧远程托管计数器要好得多。您可以在http://code.google.com/p/gapi-google-analytics-php-interface/

找到Google Analytics PHP界面的API