【问题标题】:php - Unique High Traffic Visitor Counter [closed]php - 独特的高流量访客计数器 [关闭]
【发布时间】:2016-05-08 22:42:38
【问题描述】:

我想在我的网站上添加访客计数器。

最大统计数据:

每分钟 100 万次观看

每页加载 6 个查询

所以我问你, MYSQL 和 PHP 是唯一的访客计数器的最佳解决方案吗?

或者我应该使用不同的东西吗?

【问题讨论】:

  • 答案部分取决于您如何使用 PHP 和 MySQL 来跟踪计数器。我很好奇为什么单个访客计数器每页会有 6 个查询。
  • 这个问题完全是题外话,没有提及正在使用的硬件或如何您使用 MySQL 和 PHP(它们非常强大,但 99% 的开发人员不知道如何使用它来实现性能)。最简单的解决方案是没有柜台,这个数字对除了你之外的任何人都没有任何意义,这很愚蠢。这也是最快的解决方案。
  • 你说的查询指的是什么?
  • 一个查询我的意思是如果我执行一个 Mysql 查询

标签: php mysql unique counter visitor-statistic


【解决方案1】:

对于每分钟 100 万次观看,您可以像点击计数器一样计算观看次数(此外还有重复检查)...... php / mysql 不会很好地工作(除非您有大量服务器)。

如果你需要实时命中计算,我会使用 nginx + redis http://redis4you.com/code.php?id=009 + javascript 的组合来实现,根本不使用 php 和 mysql。

1 - Jquery(或javascript)可以检查用户是否有cookie,如果没有,为每个(用户+页面)保存一个“唯一随机哈希cookie”(不要只使用ip,因为后面有多个用户代理可以使用相同的 IP,例如:拥有互联网代理、大学、公共 wifi 等的大公司。

2 - 生成哈希后,或者如果存在 cookie,Jquery 可以决定使用哈希作为标识符向 nginx 服务器发出异步请求。

3 - Nginx 可以通过上游直接与 redis 通信(非常快)(https://github.com/openresty/redis2-nginx-module),如果需要,它还可以检查 cookie。

4 - Redis 非常快,可以根据键值(例如:页面 id)自动增加值(命中),在重新启动后仍然存在(与内存缓存不同)。

5 - 您可以轻松地从 php 中查询 redis,(如 memcache)以显示任何页面上的命中数。

===

另一种可能的方式(但不是实时的)是使用 nginx 设置一个盒子并启用访问日志。

1 - 在您的网站上,包含一个调用该 nginx 服务器中的文件的 javascript,如下所示:http://stats.server.com/hit.js?page=12345&userhash=some_md5_hash_here

2 - 在 nginx 服务器上设置一个 cron 作业来解析这些日志以获得唯一视图。

3 - Nginx 可以轻松地在 E3 1230v2 机器上每秒处理 20K 请求。

【讨论】:

  • 好的,谢谢你的提示
  • 如果您对我的回答感到满意,请接受 :)
  • 真正的答案是 PHP 和 MySQL 可以完美运行,如果你知道如何使用 MySQL,它不会比 redis 慢。对于这样一个愚蠢的功能,做一个简单的INSERT INTO ... ON DUPLICATE KEY UPDATE set counter = counter + 1 是愚蠢的微不足道。鉴于 ipv4 地址数量较少的事实,可以轻松构建一个在大量访问者中表现良好的计数器。您可以排队和批量更新/插入等等。但是,该功能本身是愚蠢的,并且通过获得这样一个愚蠢的指标的过程并不能证明努力是合理的。
  • 也许使用 MySQL 5.7 + HHVM 或 PHP 7 可以做到……但每分钟 1M 的浏览量是每秒 16.6K。我不认为这种负载的 PHP 将是最有效的方式。您需要一个强大的专用功能,并且负载会很高。当然 MySQL 5.7 可以很快,但是在中间添加 php 肯定不会比 redis 快。带有 redis 的 Nginx 将使负载保持低得多。 [链接]percona.com/blog/2009/08/27/looking-at-redis/[/link]
猜你喜欢
  • 1970-01-01
  • 2012-11-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多