您的位置:首页 > 其它

实现:判断某个元素是否在集合中,统计一段时间内的点击UV数(亿级别)

2017-04-01 10:00 881 查看
OK,这个是需要统计首页KV图的一段时间内的点击UV数(亿级别),每个KV图拥有一个唯一的ID。

UV是unique visitor的简写,是指通过互联网访问、浏览这个网页的自然人。

独立IP:是指独立用户/独立访客。指访问某个站点或点击某条新闻的不同IP地址的人数,独立IP只记录第一次进入网站的具有独立IP的访问者,假如一台电脑关机了,30分钟后重启,再次访问这个站那就再计算一次ip,在同一天内再次访问该网站则不计数。独立IP访问者提供了一定时间内不同观众数量的统计指标,而没有反应出网站的全面活动。比如你是ADSL拨号上网的,你拨一次号都自动分配一个ip,这样你进入了本站,那就算一个ip,当你断线了而没清理cookie,之后又拨 了一次号,又自动分配到一个ip,你再进来了本站,那么又统计到一个ip,但是UV(独立访客)没有变,因为2次都是你进入了本站。

PV(访问量):即Page View, 即页面浏览量或点击量,用户每1次对网站中的每个网页访问均被记录1次。用户对同一页面的多次访问,访问量累计。

现在大多数的统计工具只统计到IP和PV的层面上,因为在大多情况下IP与UV数相差不大。但由于校园网络、企业机关等一些部门的特殊性,IP已经很难真实的反映网站的实际情况,所以就引入了更加精确的UV这个概念。

对于使用真实IP上网的用户,UV和IP的数值是相同的。

1.使用数组(哈希表)



这种数据结构,优点在于简单易于理解,且可以使用简单的hash table进行存储。缺点在于,当用户量非常大的时候,会占用比较大的内存空间。如果1亿来计算,就需要1亿*unique cookie占用字节的空间。假设unique cookie占用20个字节,就需要1.8G的内存空间。然而,为了解决hash冲突,还需要一定的空间冗余,假设空间利用率为50%,需要3.6GB空间



2.使用布隆过滤器

布隆过滤器(Bloom Filter)是1970年由布隆提出的。它实际上是一个很长的二进制向量和一系列随机映射函数。布隆过滤器可以用于检索一个元素是否在一个集合中。它的优点是空间效率和查询时间都远远超过一般的算法,缺点是有一定的误识别率和删除困难。
适用范围:可以用来实现数据字典,进行数据的判重,或者集合求交集。

初始状态时,布隆过滤器是一个m位的位数组,每一位都置为0
为了表达S={x1, x2,…,xn}这样一个n个元素的集合,Bloom Filter使用k个相互独立的哈希函数(Hash Function),它们分别将集合中的每个元素映射到{1,…,m}的范围中。对任意一个元素x,第i个哈希函数映射的位置hi(x)就会被置为1(1≤i≤k)。注意,如果一个位置多次被置为1,那么只有第一次会起作用,后面几次将没有任何效果。在下图中,k=3,且有两个哈希函数选中同一个位置(从左边数第五位)。



在判断y是否属于这个集合时,我们对y应用k次哈希函数,如果所有hi(y)的位置都是1(1≤i≤k),那么我们就认为y是集合中的元素,否则就认为y不是集合中的元素。下图中y1就不是集合中的元素。y2或者属于这个集合,或者刚好是一个false positive。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐