设为首页 加入收藏

TOP

Bit-map法处理大数据问题(二)
2015-08-31 21:23:23 来源: 作者: 【 】 浏览:59
Tags:Bit-map 处理 数据 问题
那只需接近O(1)的代价就可以查到一个URL是否被访问过;


  3. URL经过MD5或SHA-1等单向哈希后再保存到HashSet或数据库


  4. Bit-Map方法。建立一个BitSet,将每个URL经过一个哈希函数映射到某一位。


  方法1~3都是将访问过的URL完整保存,方法4则只标记URL的一个映射位。


  以上方法在数据量较小的情况下都能完美解决问题,但是当数据量变得非常庞大时问题就来了。


  方法1:数据量变得非常庞大后关系型数据库查询的效率会变得很低。而且每来一个URL就启动一次数据库查询是不是太小题大做了?


  方法2:太消耗内存。随着URL的增多,占用的内存会越来越多。就算只有1亿个URL,每个URL只算50个字符,就需要5GB内存。


  方法3:由于字符串经过MD5处理后的信息摘要长度只有128Bit,SHA-1处理后也只有160Bit,因此方法3比方法2节省了好几倍的内存。


  方法4:消耗内存是相对较少的,但缺点是单一哈希函数发生冲突的概率太高。还记得数据结构课上学过的Hash表冲突的各种解决方法么?若要降低冲突发生的概率到1%,就要将BitSet的长度设置为URL个数的100倍。


  但是我们可以考虑如果在一定程度上忽略误判的情况,那么是不是可以通过改进方法4实现这一功能?其实这就是Bloom Filter的算法 的思想:Bloom Filter是由Bloom在1970年提出的一种多哈希函数映射的快速查找算法。通常应用在一些需要快速判断某个元素是否属于集合,但是并不严格要求100%正确的场合。其思想就是在方法4基础上做了一些改进,不是映射到一位,而是通过K个哈希函数映射到K位上,这样只有当新的URL计算得到的K位都为1时才判断为该URL已经访问过(有误判的可能性,不过有相关研究证明,取得合适的K值和bitmap位数时可以让误判率很小以至于可以忽略,参见细节)


  当然,还可以通过map-reduce来处理,毕竟人家mapreduce可是行家,专业的大数据处理技术嘛!


首页 上一页 1 2 下一页 尾页 2/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇二分查找真的有你想象中那么简单.. 下一篇for(int a:i)在Java 编程中的使用

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: