我使用PHP开发网站,特别是使用 YII 2 framewor k。 Web服务器正在使用Nginx
,PHP engine
是php-fpm。问题是我想跟踪哪个用户访问了带有参数的webpage
URL地址。 Yii2
本身有一个日志记录系统,但主要用于错误和调试目的。我知道nginx有日志记录系统可以记录访问日志,但我需要记录我的数据库中的确切用户名,用户名,我认为nginx
无法记录这一点。
我想在每次用户访问页面时将这些信息记录到另一个Mysql表中,但我担心表可能会很快增长,看起来使用关系数据库可能不是一个好主意。
我应该使用 Hadoop 吗?还是其他常见的做法来解决这类问题?谢谢你的任何建议。
答案 0 :(得分:1)
如果你想
跟踪哪个用户使用参数访问了哪个网页网址
nginx访问日志是一个更好的选择,因为mysql会严重损害你的性能。
假设用户ID是查询字符串中的参数uid
,您可以通过添加字段$arg_uid
来自定义nginx的访问日志。如果用户标识是uri的一部分,则可能需要使用正则表达式的配置位置来捕获它。
如果无法直接从请求获取用户ID,则必须有一个与一个且只有一个用户相关的令牌,可以从mysql或redis中重新获得。在这种情况下,有两种方法:
$upstream_http_X_UID
。如果您不想将此标头返回给客户端,请添加一个指令proxy_hide_header X-UID;
以从php响应中删除此标头。log_by_lua
指令编写一段lua脚本,其中根据该令牌从mysql或redis查询用户id。然后通过添加用户id变量来自定义nginx的访问日志。根据您的具体情况,选择最佳解决方案。 我希望这会对你有所帮助。
答案 1 :(得分:0)
我没有Hadoop的经验,但由于在MySQL表格中存储了数百万的综合浏览量(40GB),我在过去遇到了问题。
但基本上问题不在于存储,而是如何实际使用该数据。
MySQL可以处理我认为的大量数据但是根据你需要显示它的方式,你可能要么有一些cronjob做一些优化,并以不同的格式保存到另一个表,所以很容易显示它,或者要么学习一些可能有帮助的NoSQL数据库。
顺便说一下,我听说GetClicky Analytics的人正在使用纯文本文件存储数据,所以我想你也可以选择这个选项。
如果您选择使用MySQL,还有其他一些想法: