什么是在高流量网站上计算观看次数的最佳方式?

时间:2009-09-03 21:50:57

标签: mysql

我目前在mysql中的方式是

UPDATE table SET hits=hits+1 WHERE id = 1;

这会保留网站上的实时统计信息,但据我了解,这不是最好的方法。

修改

让我澄清......这是用于计算特定项目页面上的点击量。我有一个电影列表,我想计算每个电影页面有多少观看次数。在它+ 1s之后,它将电影ID添加到会话var,其中故事是用户查看的所有页面的ID。如果页面的ID在该数组中,它将不会+1。

7 个答案:

答案 0 :(得分:3)

如果您的流量足够高,则不应在每次请求时都访问数据库。尝试将计数保留在内存中并按计划同步数据库(例如,每1000个请求或每分钟更新一次数据库。)

答案 1 :(得分:3)

您可以采用与Stack Overflow's view count类似的方法。这基本上在加载图像时递增计数器。这有两个有用的方面:

  • 机器人通常不会下载图像,因此这些图像不会增加视图。
  • 浏览器缓存图片,因此当您返回页面时,您不会导致服务器工作。
  • 可能较慢的代码从页面的其余部分运行async。这不会减慢页面显示的速度。

优化更新: *将计数器保存在单个窄表中,并在密钥上使用聚簇索引。 *让表由不同的数据库服务器/主机提供。 *使用memcached和/或队列来允许写入延迟或运行异步。

如果您不需要实时显示视图计数,那么最好的办法是将电影ID包含在您的URL中,并使用日志报废在一天结束时填充数据库。

答案 2 :(得分:2)

不确定您使用的是哪个网络服务器。

如果您的Web服务器将请求记录到站点,请在文本文件中为每个请求说一行。然后你可以计算日志文件中的行。

您的解决方案存在一个主要问题,即它会锁定数据库中的行,因此您的网站一次只能提供一个请求。

答案 3 :(得分:1)

这取决于你是否想要点击或观看

从1 ip = 1个人查看页面的1个视图 1个人刷新同一页面=多次点击但只有一个视图

我总是喜欢谷歌分析等等,你需要确保这一点 这个数据库更新只进行一次,否则你很容易被淹没。

答案 4 :(得分:0)

我不确定您使用的是什么,但您可以设置一个cron作业,以便在Google App Engine中每x分钟自动更新一次计数。我想你会使用memcache来保存计数,直到你的cron作业运行。虽然...... GAE确实有一些统计报告,但您可能也希望拥有自己的数据。我认为您可以在其他系统上使用memcache,并在其上设置cron作业

答案 5 :(得分:0)

使用日志记录软件。谷歌分析功能非常丰富且功能齐全(并且在您的服务器上产生零负载),但它会错过非JavaScript命中。如果每次点击都很重要,请使用webalizer或awstats等服务器日志分析器。

答案 6 :(得分:0)

一般用MySQL:

  • 如果您使用MyISAM表:表上有锁,因此您最好在单独的表中执行INSERT。然后使用cron作业,更新影片表中的值。
  • 如果你使用InnoDB表:行上有一个锁,你可以直接更新该值。

也就是说,根据项目的“成熟度”和成功程度,您可能需要实施不同的解决方案,因此:

第一条建议:基准,基准,基准。

第二条建议:使用第一条建议中的数据,找出瓶颈并为您面临的问题选择解决方案,但不要选择您认为可能存在的未来问题。

以下是一个很棒的视频:http://www.youtube.com/watch?v=ZW5_eEKEC28

希望这会有所帮助。 :)