Mysql 在流量大的网站上计算浏览量的最佳方法是什么?
我目前在mysql中的做法是Mysql 在流量大的网站上计算浏览量的最佳方法是什么?,mysql,Mysql,我目前在mysql中的做法是 UPDATE table SET hits=hits+1 WHERE id = 1; 这会在网站上保留实时数据,但据我所知,这并不是最好的方法 编辑: 让我澄清一下。。。这用于计算特定项目页面上的点击次数。我有一个电影列表,我想计算每个电影页面的浏览量。在+1s之后,它将电影ID添加到会话变量中,该会话变量记录用户查看的所有页面的ID。如果页面的ID在该数组中,它将不会+1它 如果你的流量足够大,你不应该每次请求都访问数据库。尝试将计数保留在内存中,并按计划同步数
UPDATE table SET hits=hits+1 WHERE id = 1;
这会在网站上保留实时数据,但据我所知,这并不是最好的方法
编辑:
让我澄清一下。。。这用于计算特定项目页面上的点击次数。我有一个电影列表,我想计算每个电影页面的浏览量。在+1s之后,它将电影ID添加到会话变量中,该会话变量记录用户查看的所有页面的ID。如果页面的ID在该数组中,它将不会+1它 如果你的流量足够大,你不应该每次请求都访问数据库。尝试将计数保留在内存中,并按计划同步数据库(例如,每1000个请求或每分钟更新一次数据库)。不确定您使用的是哪台web服务器 如果您的web服务器将请求记录到站点,请在文本文件中为每个请求写一行。然后,您可以只计算日志文件中的行数
您的解决方案存在一个主要问题,即它将锁定数据库中的行,因此您的站点一次只能提供一个请求 这取决于你想要点击还是观看 1个ip的1个视图=1个人查看页面 1人刷新同一页面=多次点击,但只有一个视图 我总是喜欢谷歌分析等类似的东西,你需要确保
此数据库更新只执行一次,否则您很容易被淹没。我不确定您在使用什么,但您可以在Google App Engine中设置一个cron作业,以每x分钟自动更新一次计数。我认为在运行cron作业之前,应该使用memcache保存计数。虽然。。。GAE确实有一些统计报告,但你可能也想有自己的数据。我认为您可以在其他系统上使用memcache,并使用日志软件在其上设置cron作业。Google Analytics非常漂亮,功能丰富(并且在服务器上生成零负载),但是它会错过非JavaScript的点击。如果每次点击都很重要,请使用webalizer或awstats之类的服务器日志分析器。一般来说,MySQL:
- 如果使用MyISAM表:表上有一个锁,因此最好在单独的表中进行插入。然后使用cron作业,更新电影表中的值
- 如果使用InnoDB表:行上有一个锁,因此可以直接更新值
希望这有帮助。:) 您可以采取类似的方法。这基本上会在加载图像时增加计数器。这有两个有用的方面:
- 机器人通常不下载图像,因此这些图像不会增加视图
- 浏览器缓存图像,因此当您返回页面时,不会导致服务器工作
- 可能较慢的代码从页面的其余部分异步运行。这不会降低页面的可视性
如果你不需要实时显示观看次数,那么你最好将电影id包含在你的URL中的某个位置,并在一天结束时使用日志删除来填充数据库。编辑了原始帖子,以澄清我想要的内容。