当用户查看页面时,我想在页面视图的数据库表中添加一个新行。
这可以通过增加页面表中某个页面的查看次数来轻松完成。
但是,我想对点击垃圾邮件发送者有更多的控制;D。我的意思是,我想在我的表中添加一个名为例如page_views_all的新行,前提是没有具有相同 IP 的先前记录或相同 page_id 的先前记录的时间且相同 IP 不少于 5 分钟。因此,相同的文章视图只能每 5 分钟添加一次,如果具有相同 IP 的用户多次点击相同的文章(例如查看新评论和刷新页面),那么这不算为点击,也不是作为新行添加到数据库中。
我正在考虑创建 3 个表,我想听听您对我的想法有何看法,以及我该如何改进。
所以,我想要3张桌子:
1)page_views_all(用于存储每个page_view;除了我上面所说的每5分钟限制相同的IP)
2) page_views_grouped_by_page_id (CRON 将每 30 或 60 分钟运行一个脚本来检查 page_views_all 表,并按 id 将所有行分组并计算它们并存储每个页面 id 的页面浏览量;这样我们可以多次减少表大小,因为我们不只将用户计入页面)
3) page_views_by_day一个简单的表,每天只有一条记录(每天午夜通过 CRON 运行;将对这一天的所有页面浏览量和唯一访问者数量等进行排序;预计一年只有 365 条记录)
也许是第 4 个表 ;) page_views_domain(再次通过 cron 并存储从网站开始的所有时间的 page_views 总量。
您如何看待这种方法?MySQL有没有更简单的解决方案?重要的是我想保存访问者的 IP、用户代理、访问时间、page_id,也许还有 previous_page_id(referrer)。我正在使用 Disqus 并且我的系统中没有登录用户,因此在我的情况下不会存储 user_id,只是 IP 地址。
如此多的用于存储 page_views 的表背后的理念是,我希望网站速度更快,并通过表 2 (page_views_grouped_by_page_id) 或表 3 (page_views_by_day) 而不是来自大表 1 的结果为用户提供服务,我可以加快网站速度有点,至少我是这么认为的。
我不确定的一件事是,如果通过 CRON 对盯着每个 page_view 的第一个也是最大的表进行查询不会减慢网站的速度?如果我会这样做,例如每 30 分钟或每 1 小时一次?你怎么认为?将限制设置为最后 10000 行(取决于人们在 30 或 60 分钟内观看的次数)并对其进行计数和分组会有所帮助。因为,一段时间后可能会有数百万行,如果不是十亿。谁知道页面会变得多受欢迎;)。如果这可以帮助我考虑在单独的表中创建一个动态变量,该表将包含 cron 应检查的页面数量,具体取决于以前的结果。但是,我认为我在这里变得太复杂了,我现在不应该担心;)。
PHP 和设置 CRON 不是问题我可以编程所有功能。我唯一关心的是如何构造用于存储数据的表。
更新: 我想使用 db 检查,因为如果我要使用 cookie 或会话,如果用户使用其他浏览器(例如第一次使用 Firefox,一分钟后使用 Chrome),如果我只检查会话和 cookie,他将被计算两次。但是使用db check我看到了他的IP,那个页面的时间只有2分钟,所以他需要等待。
我的另一个大问题:
插入新行之前的检查过程让我有点困扰。因为我需要从存储所有这些 page_views 的最大表中检查至少 1000 或更多最新行。而且我不确定这是否会减慢我的页面速度,因为在重新加载每个页面时,我都会访问该表,如果我有 200 人或更多人在线,我不知道会发生什么?会好吗?页面被缓存为 html,因此视图被缓存,但在页面输出之前检查数据库仍然会命中数据库。
一件好事;)
我只需要为我的文章(文章详细信息页面)进行数据库检查/插入。我不需要计算主页、类别或关于我们的页面访问量。如果我以后想的话,我可以从 Google Analytics 获取这些信息。无需每 30 或 60 分钟为用户提供准确的信息。
获取“点击”UTC 时间并将其转换为具有 5 分钟分辨率的 INT(例如,自 1970 年 1 月 1 日以来的秒数除以 60*5)。将此值和 IP 设为复合唯一键。使用您的数据库平台语法插入并优雅地处理重复键违规(MERGE、INSERT ... ON DUPLICATE KEY)。在应用服务器中缓存带有时间戳的 IP 以获得额外的信用(正确性不需要,但避免无操作 DB 往返总是好的)。
这样插入就是支票。无需额外检查。
至于每页/每天的内容,那不属于 OLTP 数据库。将其视为 DW 并将其视为 DW。有许多工具可以提供帮助(例如列存储)。
这可以通过增加页面表中某个页面的查看次数来轻松完成
不,绝对不是。由于更新争用,这是灾难的必经之路。看到它做了 100 万次,只是在访问率达到足以注意到这是一场灾难的时候才被拉回来(它非常适合每分钟 1 次查看的网站......)。在高负载下保持准确和高性能的页面查看计数器实际上非常棘手。
作为一般性评论,使用 IP 总是一个坏主意。许多用户坐在公司接入点后面,该公司中的所有用户共享一些出口 IP。您将把它们全部视为一个(或几个)。
最后一点:现在大多数人通过处理access_logHadoop 或类似的所有前端来获取此类信息。
| 归档时间: |
|
| 查看次数: |
6295 次 |
| 最近记录: |