网站访问统计(网站访问统计分析报告主要内容有哪些)

问题:目前系统中常见的一个统计维度是日独立用户访问量和UV。一般来说,这种统计有几点需要考虑。第一,数据很多,如果不做合理的设计,后期汇总数据会很麻烦。第二,每

问题:

网站访问统计(网站访问统计分析报告主要内容有哪些)插图

目前系统中常见的一个统计维度是日独立用户访问量和UV。一般来说,这种统计有几点需要考虑。第一,数据很多,如果不做合理的设计,后期汇总数据会很麻烦。第二,每天积累的大量数据会对系统存储空和内存造成不小的负担。第三,应该清楚,对于这样的需求,最不合适的存储载体是数据库。

至于如何统计日独立访问量,如果从上面提到的三点来分析,数据存储载体的选择肯定是NoSQL。结合各个组件的特点,最好的选择是Redis。目前,redis提供了三种数据结构。

解决方案:

1.使用哈希

Hash是Redis的基本数据结构。Redis的底层维护一个开放散列,它将不同的键映射到散列表。如果有关键字冲突,就会拉出一个链表。

当用户访问时,如果用户已经登录,那么我们将使用用户的id。如果用户没有登录,那么我们可以在首页随机生成一个密钥来识别用户。当用户访问时,我们可以使用HSET命令。关键可以选择URI与相应的日期拼凑,字段可以使用用户的id或随机标识,值可以简单地设置为1。

当我们想统计某一天某个网站的访问量时,可以直接使用HLEN得到最终结果。

优点:简单,容易实现,查询非常方便,数据准确率非常高。

缺点:占用内存太多。随着key的增加,性能也会降低。小网站可以,但是像JD.COM、淘宝这种几亿PV的网站就受不了了。

2.使用位集

我们知道,对于一个32位的int,如果只记录id,只能记录一个用户,但是如果转换成二进制,每个用户用来表示一个用户,那么一口气就可以表示32个用户,在空之间节省了32倍!对于数据量较大的场景,如果使用bitset,可以节省大量内存。对于未登录的用户,我们也可以使用哈希算法将相应的用户id哈希为数字ID。Bitset非常节省内存。假设有1亿用户,只需要100,000,000/8/1024/1024,大概是12兆内存。

Redis为我们提供了SETBIT方法,使用起来非常方便。我们可以看一下下面的例子。我们可以在项目页面上不断使用SETBIT命令来设置用户是否访问过页面,也可以使用GETBIT方法来查询用户是否访问过页面。最后,我们可以通过BITCOUNT来统计这个网页的日访问量。

优点:占用内存少,查询方便。可以指定一个用户进行查询,数据可能会略有瑕疵。对于未登录的用户,不同的键可能被映射到同一个id,否则,您需要维护一个未登录用户的映射,这将有额外的开销。

缺点:如果用户非常稀疏,占用的内存可能会比第一种方法大。

其实这个数据结构是可以考虑的。

3.使用概率算法

对于UV等可能访问量很大的网站,如果需要的人数不是那么准确,可以使用概率算法。其实我们统计一个网站的UV,1亿和1.003亿其实差不多。在Redis中,封装了HyperLogLog算法,这是一种基数求值算法。一般这种算法的特点是没有具体的数值,而是用一些相关的数据来计算概率。

当用户访问一个网站时,我们可以使用PFADD命令来设置相应的命令。最后可以通过PFCOUNT顺利计算出最终结果。因为这只是概率算法,可能会有0.81%的误差。

优点:占用内存非常少。对于一个密钥,只需要12kb。特别适合品多多这种超级多用户。

缺点:查询指定用户时,可能会出现错误。毕竟没有存储具体的数据。总数也有一定误差。

对于这种独立用户的场景,我个人推荐最后一种概率算法。redis不仅可以帮助我们减肥,还可以节省记忆。

我个人强烈推荐你了解HyperLogLog内部的算法结构。

4.膨胀

redis中有许多数据类型可供选择。它的每一个数据结构都是经过精心设置的,可以覆盖我们大部分的应用场景。比如社交产品的功能,比如关注榜、热门榜、随机抽奖等等,都非常适合redis中相应的数据结构操作。稍后我们会拿出一篇文章专门介绍,欢迎大家继续关注。

以上就是全部。

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。

作者:美站资讯,如若转载,请注明出处:https://www.meizw.com/n/153300.html

发表回复

登录后才能评论