mysql布隆过滤器源码_布隆过滤器(Bloom Filter)的原理和实现

布隆过滤器是一种空间效率高的概率型数据结构,用于判断一个元素是否可能在一个集合中。适用于大规模数据集的成员资格查询,例如检查单词拼写、嫌疑人名单、网页访问历史等。它由一个位数组和多个哈希函数组成,通过哈希函数将元素映射到位数组中,可能存在误判但不会漏判。Guava库提供了BloomFilter的实现,便于实际应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

什么情况下需要布隆过滤器?

先来看几个比较常见的例子

字处理软件中,需要检查一个英语单词是否拼写正确

在 FBI,一个嫌疑人的名字是否已经在嫌疑名单上

在网络爬虫里,一个网址是否被访问过

yahoo, gmail等邮箱垃圾邮件过滤功能

这几个例子有一个共同的特点:如何判断一个元素是否存在一个集合中?

常规思路

数组

链表

树、平衡二叉树、Trie

Map (红黑树)

哈希表

虽然上面描述的这几种数据结构配合常见的排序、二分搜索可以快速高效的处理绝大部分判断元素是否存在集合中的需求。但是当集合里面的元素数量足够大,如果有500万条记录甚至1亿条记录呢?这个时候常规的数据结构的问题就凸显出来了。数组、链表、树等数据结构会存储元素的内容,一旦数据量过大,消耗的内存也会呈现线性增长,最终达到瓶颈。有的同学可能会问,哈希表不是效率很高吗?查询效率可以达到O(1)。但是哈希表需要消耗的内存依然很高。使用哈希表存储一亿 个垃圾 email 地址的消耗?哈希表的做法:首先,哈希函数将一个email地址映射成8字节信息指纹;考虑到哈希表存储效率通常小于50%(哈希冲突);因此消耗的内存:8 * 2 * 1亿 字节 = 1.6G 内存,普通计算机是无法提供如此大的内存。这个时候,布隆过滤器(Bloom Filter)就应运而生。在继续介绍布隆过滤器的原理时,先讲解下关于哈希函数的预备知识。

哈希函数

哈希函数的概念是:将任意大小的数据转换成特定大小的数据的函数,转换后的数据称为哈希值或哈希编码。下面是一幅示意图&#

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值