BloomFilter应用与D-Lelft BloomFilter实现

本文介绍了BloomFilter及其应用场景,特别是在处理大量数据时的优势。文章深入讲解了BloomFilter的工作原理,以及其在Hadoop和Hbase中的应用。接着,文章探讨了Counting BloomFilter的优缺点,并引出了D-Left BloomFilter,这是一种在减少空间占用和降低错误率的同时,提供删除操作的改进方案。作者分享了D-Left BloomFilter的实现细节,包括位操作和置换函数的使用,以及在实际项目中的性能表现和效果。
摘要由CSDN通过智能技术生成

此篇文章是开发过程中对BloomFilter应用场景的一些介绍,另外项目中实现了D-Left BloomFilter,相关实现时一些注意的地方,简单介绍下!

首先看一些应用场景:

1.海量的黑白名单。

2.爬虫抓取时重复的URL处理。

3.数据key是否存在检测

4.(一些面试题几十亿不重复整数中判断其中一个整数是否存在的问题,BitMap/BloomFilter能很好的解决)

。。。。

对于以上提出的三种场景,如果数据量相对较少,可以将数据存储在数据库,或者加载内存中判断对应的黑白名单是否存在判断即可。

可是当数据量达到很大时,比如1亿条的黑白名单,假如每个名单占用空间为10byte,对于查询中将遇到两种问题,如果数据都在数据库中且并发量很大,每次查询将给DB带来的压力不可想象的。 另外如果所有名单加载到缓存中,将占据的内存空间是:1G,如果数据量更大,所占空间更多。

对于以上问题,如果通过BloomFilter,通过牺牲一定的准确率,使用1G/80 和内存空间,就能解决此问题。

一.什么是BloomFilter?

BloomFilter是一种高效的随机数据结构,被用于检测一个元素是否是一个集合中的一个元素,这种检测只会对在集合内的数据错判,而不会对不是集合内的数据进行错判,这样每个检测请求返回有“在集合内(可能错误)”和“不在集合内(绝对不在集合内)”两种情况,即如果它判断元素不在集合里,此元素一定不是集合中的元素,如果判断元素在集合里,有可能存在一定的错误率,可见 Bloom filter 是牺牲了正确率换取时间和空间。(因此需要注意使用时应用场景)

二.BloomFilter实现:

Bloom filter 采用的是哈希函数(hash fucnction)的方法,将一个元素映射到一个 m 长度的阵列上的一个点,当这个点是 1 时,那么这个元素在集合内,反之则不在集合内。这个方法的缺点就是当检测的元素很多的时候可能有冲突,解决方

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值