美文网首页
布隆过滤器的原理及应用场景

布隆过滤器的原理及应用场景

作者: overflowedstack | 来源:发表于2021-06-12 14:13 被阅读0次

1. 什么是布隆过滤器

布隆过滤器(Bloom Filter)由布隆于 1970 年提出,它实际上由一个很长的二进制向量和一系列随机映射函数组成。布隆过滤器可以用于查询一个元素是否在一个集合中,它的优点是空间和时间效率都远超一般的算法,缺点是会有一定的误判和删除困难。

  • 它并不存储数据本身,因此不能从布隆过滤器中取出原数据。
  • 它判断数据存在时,有一定误差:某数据不存在其中,但是它可能说数据存在。
  • 如果它判断出数据不在其中,那么就一定是的。
  • 只能往里添加数据,不能移除数据。

2. 布隆过滤器的原理 (参考文章)

先了解下哈希函数的概念是:将任意大小的数据转换成特定大小的数据的函数,转换后的数据称为哈希值或哈希编码。

布隆过滤器的底层是一个比特数组,将某个数据A放入时,通过若干个哈希函数计算出若干个值,假设通过3个哈希函数,算出3个哈希值x,y,z。x,y,z对应到比特数组的相应位置,将该位置上的比特位设置为1. 那么该数据就被放进来了。

在下面的图中,蓝/红/紫色表示有3个数据被放入了比特数组,各自相应的比特位被设置为1.
此时,数据w并没有被放入比特数组,但它相应的哈希值对应的比特位都为1,那么布隆过滤器就会认为w存在。这就会造成误判。

布隆过滤器底层

3. 应用场景

布隆过滤器适用于大数据量,但又能允许一定程度的误差,这样的场景。例如:

  • 爬虫url判断重复
    将要爬一个url时,用布隆过滤器判断是否存在,不存在则放入,存在则不处理。误判就是此url没爬过,但布隆过滤器说爬过了,那么爬虫过程中会缺失一些url,这个不影响。

  • 缓存穿透
    通过布隆过滤器将所有数据都放入比特数组。当有请求过来,如果请求的是存在的数据,那么肯定会放行;如果是不存在的数据,可能会被挡住,小概率可能被放行。那么,大部分的恶意请求就能被挡下来。

4. 布隆过滤器的Java实现

Guava包中提供了BloomFilter的实现。

import com.google.common.base.Charsets;
import com.google.common.hash.BloomFilter;
import com.google.common.hash.Funnels;

public class BloomFilterTest {

    public static void main(String[] args) {
        BloomFilter<CharSequence> bloomFilter = BloomFilter.create(Funnels.stringFunnel(Charsets.UTF_8), 200000, 1E-7);
                
        bloomFilter.put("test");
        
        boolean contain = bloomFilter.mightContain("test");
        
        if (contain)
            System.out.println("contain test");
    }

}

相关文章

  • redis 的bloomfilter

    详解布隆过滤器的原理、使用场景和注意事项 布隆过滤计算器 布隆过滤器(Bloom Filter)详解 java实现...

  • Guava - 布隆过滤器的使用

    布隆过滤器简单介绍 布隆过滤器介绍 maven引入 布隆过滤器的使用 参考及拓展 Guava的布隆过滤器 布隆过滤...

  • 布隆过滤器的原理及应用场景

    1. 什么是布隆过滤器 布隆过滤器(Bloom Filter)由布隆于 1970 年提出,它实际上由一个很长的二进...

  • 面试题 延伸 之 布隆去重的原理及实现

    什么情况下需要布隆过滤器? 布隆过滤器原理 布隆过滤器(Bloom Filter)的核心实现是一个超大的位数组和几...

  • 布隆过滤器原理及应用

    01背景 假如需要过滤某些不安全网页,现有100亿个黑名单页面,每个网页的URL最多占用64字节。现要设计一种网页...

  • 布隆过滤器(Bloom Filter)的原理和实现

    布隆过滤器使用场景 之前在《数学之美》里面看到过布隆过滤器的介绍。那么什么场景下面需要使用布隆过滤器呢? 看下下面...

  • 布隆过滤器

    详解布隆过滤器的原理,使用场景和注意事项 概念理解 本质上布隆过滤器是一种数据结构,比较巧妙的概率型数据结构(pr...

  • 布隆过滤器

    布隆过滤器 1、原理 布隆过滤器的巨大用处就是,能够迅速判断一个元素是否在一个集合中。因此他有如下三个使用场景: ...

  • 认识布隆过滤器

    为了准备后天的阿里二面,现在开始学习海量数据的处理第一个要学的就是布隆过滤器,我们先看一下布隆过滤器的应用场景**...

  • 布隆过滤器

    布隆过滤器起源 为什么我们要用布隆过滤器? 布隆过滤器是在海量数据找到想要的结果,经常应用于redis的缓存穿透(...

网友评论

      本文标题:布隆过滤器的原理及应用场景

      本文链接:https://www.haomeiwen.com/subject/exoweltx.html