我正在开发一个对网页访问敏感的网站。例如,它有一些部分将向用户显示网站的哪些部分(哪些项目)访问次数最多。为了实现这个功能,我想到了两个策略:
如果选择了第一个策略,我需要一个非常快速和准确的点击计数器,能够区分唯一的IP(或用户)。我相信使用MySQL不是一个好的选择,因为大量的页面访问,意味着很多数据库锁和性能问题。我认为快速记录类会很好。
当第一个选项的所有问题出现时,第二个选项似乎非常有趣,但我不知道Google Analytics是否有办法(如API)让我能够访问我想要的信息。如果有的话,它足够快吗?
您建议我采取哪种方法(甚至是替代方法)?哪一个更快?表现是我的首要任务。感谢。
更新: 谢谢。看到不同的答案很有意思。这些答案提醒了我一个重要因素。我的网站每8分钟更新一次“访问量最大”的项目,因此我不需要实时数据,但我需要每8分钟左右准确一次。我的想法是:
那就是说,我不想重新发明轮子。如果第三方服务能够满足我的要求,我会很乐意使用它。
答案 0 :(得分:0)
Google Analytics(分析)有一个延迟时间,它会将返回到API的一些数据进行采样,这样就可以了。
您可以尝试API from Clicky。请记住:
免费帐户仅限于过去30天的历史记录,每次请求可获得100个结果。
有许多点击计数器的例子,但听起来你找不到满足你需求的计数器。
答案 1 :(得分:0)
我假设您不需要实时数据。如果是这种情况,我可能只是从Web服务器日志文件中读取数据。
您的网络服务器可以区分IP地址。没有完全可靠的方法来区分用户。我住在一个大学城;一半的宿舍学生拥有相同的大学IP地址。我认为谷歌分析依赖于cookie来识别用户,但共享计算机的可靠性低于100%。 (但这可能不是什么大问题。)
“访问最多”也有点模糊。简单的方法是将特定页面上的每个匹配计为访问。但是300毫秒的“访问”值得怀疑。 (可能是他们点击了错误的链接,然后在页面呈现之前点击“后退”按钮。)除非有我不知道的要求,否则我可能首先使用awk将时间戳,IP地址和页面名称提取到CSV文件中,然后将CSV文件加载到数据库中。
答案 2 :(得分:0)
鉴于您计划使用页面点击数据来确定您网站上显示的数据,我建议您自己记录页面信息。您不希望依赖于为了创建页面而必须询问的某些第三方服务。如果您实时加载该数据,则尤其如此,因为您必须为每个传入的站点请求询问该服务。
我倾向于将数据保存在数据库中。如果您真的关心插入的性能,那么您可以调查拦截请求(我不确定您如何在PHP中进行此操作,但我假设它是可能的。)然后将请求数据传递给一个单独的线程来存储请求信息。通过让一个单独的线程处理日志记录,您就不会中断对最终用户的响应。
另外,鉴于您计划使用收集的数据“...向用户显示网站的哪些部分(哪些项目)访问次数最多”,那么您需要考虑访问此数据以构建你的动态页面。也许为每个资源存储合并计数是件好事。例如,不是有30000行显示请求index.php,而是可能有一行显示index.php被请求了30000次。这肯定比必须对可能变成一个大型表的查询执行更快。