Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/google-maps/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 在流量大的网站上计算浏览量的最佳方法是什么?_Mysql - Fatal编程技术网

Mysql 在流量大的网站上计算浏览量的最佳方法是什么?

Mysql 在流量大的网站上计算浏览量的最佳方法是什么?,mysql,Mysql,我目前在mysql中的做法是 UPDATE table SET hits=hits+1 WHERE id = 1; 这会在网站上保留实时数据,但据我所知,这并不是最好的方法 编辑: 让我澄清一下。。。这用于计算特定项目页面上的点击次数。我有一个电影列表,我想计算每个电影页面的浏览量。在+1s之后,它将电影ID添加到会话变量中,该会话变量记录用户查看的所有页面的ID。如果页面的ID在该数组中,它将不会+1它 如果你的流量足够大,你不应该每次请求都访问数据库。尝试将计数保留在内存中,并按计划同步数

我目前在mysql中的做法是

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表:行上有一个锁,因此可以直接更新值
也就是说,根据项目的“成熟度”和成功程度,您可能需要实施不同的解决方案,因此:

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

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

下面是一段关于这方面的精彩视频:


希望这有帮助。:)

您可以采取类似的方法。这基本上会在加载图像时增加计数器。这有两个有用的方面:

  • 机器人通常不下载图像,因此这些图像不会增加视图
  • 浏览器缓存图像,因此当您返回页面时,不会导致服务器工作
  • 可能较慢的代码从页面的其余部分异步运行。这不会降低页面的可视性
要优化更新,请执行以下操作: *将计数器放在一个狭窄的表中,表键上有聚集索引。 *让表由不同的数据库服务器/主机提供服务。 *使用memcached和/或队列允许延迟写入或异步运行写入


如果你不需要实时显示观看次数,那么你最好将电影id包含在你的URL中的某个位置,并在一天结束时使用日志删除来填充数据库。

编辑了原始帖子,以澄清我想要的内容。