素材牛VIP会员
SEO 统计算法
 Al***ay  分类:Java代码  人气:834  回帖:1  发布于6年前 收藏

我想知道 站长之家对网站 ip PV 的一个统计 使用什么样的算法呢。

大概思路 和方向是什么,我觉得 不通过使用sdk的方式统计的数据 相对准确性 不是很高呢,是我理解的额这样么,求大神告知。

 标签:c#golangjavaphp

讨论这个帖子(1)垃圾回帖将一律封号处理……

Lv3 码奴
懒***材 职业无 6年前#1

1)简单粗暴型的,这里不用去管浏览器的user-agent,不管cookie等信息,每产生一次PV,就直接计数,优点:简单,缺点:可能不真实,也可能有刷量数据
2)稍微细腻点的统计,会区分新老用户,楼主你可以研究下baidu统计的SDK,里面包含有用户的浏览器信息,操作系统信息、用户的地域信息等,也就是说,你通过浏览器的javascript以及和服务器数据的交互,对于后台服务器来说,是可以获取这些数据的,那么对于站长之家这样的网站,他可能想要统计到真实的用户访问情况,以便有些行为分析,这时会结合用户的IP信息、cookie信息(也就是session)和user-agent来统计分析,注意,这里的IP是映射后的IP地址,对于我们日常的家庭拨号上网,都是拿到的运营商的虚拟出来的内网地址,以便节省IPv4资源,所以说,一个user-agent、IP、cookie基本上能唯一标识一个用户信息。
3) 进一步说,有了这些数据之后,从设计角度来说,阅读量的这个信息在页面展现中不是优先级最高的(优先级最高的应该是业务内容本身),但阅读量的相关信息是有意义的,那么问题来了,对于阅读量这种信息是否在数据库的设计层面上要加写锁去互斥? 这里推荐了解下什么是CAP原理。
4) 所以解决方案,可能是缓存,也可能是有IP的判断、cookie的检测,这个要尝试之后才知道了,不过个人觉得可能性最大的是这个阅读量,汽车之家采用的是一个异步统计的办法,也就是说你产生真实的阅读之后,他是经过后台处理之后才给阅读量计数器+1的。
提供一下实现这种思路:

  • 一个IP最多只增加两次阅读类似的机制,或者还有更深一层次逻辑判断的,比如第二天IP清空,然后这个统计算法变成了每一天每一个IP都有两次阅读次数增加的机会

  • 一段固定时间内(比如30分钟),不管你用同一个浏览器内核访问多少次只增加一次阅读量。

  • 校验user-agent、cookie等信息;每一次浏览插入一条访客记录到A表

  • 微博实现:我是做微博的,我说说微博的做法。阅读量,点赞数,单访问限制。都是用redis实现的。然后每天夜里空闲时段同步数据库(按一定规则,分批等)。

  • 如果用户已经登录,只统计一次;如果是游客,则根据IP、timestamp、cookie等综合判断,相同就只统计一次。
    这样可以防止刷浏览量。

 文明上网,理性发言!   😉 阿里云幸运券,戳我领取