布隆过滤器

网上有关“布隆过滤器”话题很是火热,小编也是针对布隆过滤器寻找了一些与之相关的一些信息进行分析,如果能碰巧解决你现在面临的问题,希望能够帮助到您。

布隆过滤器 (英语:Bloom Filter)是 1970 年由布隆提出的。它实际上是一个很长的二进制向量和一系列随机映射函数。主要用于判断一个元素是否在一个集合中。

通常我们会遇到很多要判断一个元素是否在某个集合中的业务场景,一般想到的是将集合中所有元素保存起来,然后通过比较确定。链表、树、散列表(又叫哈希表,Hash table)等等数据结构都是这种思路。但是随着集合中元素的增加,我们需要的存储空间也会呈现线性增长,最终达到瓶颈。同时检索速度也越来越慢,上述三种结构的检索时间复杂度分别为,,。

这个时候,布隆过滤器(Bloom Filter)就应运而生。

了解布隆过滤器原理之前,先回顾下 Hash 函数原理。

哈希函数的概念是:将任意大小的输入数据转换成特定大小的输出数据的函数,转换后的数据称为哈希值或哈希编码,也叫散列值。下面是一幅示意图:

所有散列函数都有如下基本特性:

但是用 hash表存储大数据量时,空间效率还是很低,当只有一个 hash 函数时,还很容易发生哈希碰撞。

BloomFilter 是由一个固定大小的二进制向量或者位图(bitmap)和一系列映射函数组成的。

在初始状态时,对于长度为 m 的位数组,它的所有位都被置为0,如下图所示:

[上传失败...(image-303c04-1595324887187)]

当有变量被加入集合时,通过 K 个映射函数将这个变量映射成位图中的 K 个点,把它们置为 1(假定有两个变量都通过 3 个映射函数)。

查询某个变量的时候我们只要看看这些点是不是都是 1 就可以大概率知道集合中有没有它了

为什么说是可能存在,而不是一定存在呢?那是因为映射函数本身就是散列函数,散列函数是会有碰撞的。

布隆过滤器的误判是指多个输入经过哈希之后在相同的bit位置1了,这样就无法判断究竟是哪个输入产生的,因此误判的根源在于相同的 bit 位被多次映射且置 1。

这种情况也造成了布隆过滤器的删除问题,因为布隆过滤器的每一个 bit 并不是独占的,很有可能多个元素共享了某一位。如果我们直接删除这一位的话,会影响其他的元素。(比如上图中的第 3 位)

相比于其它的数据结构,布隆过滤器在空间和时间方面都有巨大的优势。布隆过滤器存储空间和插入/查询时间都是常数 ,另外,散列函数相互之间没有关系,方便由硬件并行实现。布隆过滤器不需要存储元素本身,在某些对保密要求非常严格的场合有优势。

布隆过滤器可以表示全集,其它任何数据结构都不能;

但是布隆过滤器的缺点和优点一样明显。误算率是其中之一。随着存入的元素数量增加,误算率随之增加。但是如果元素数量太少,则使用散列表足矣。

另外,一般情况下不能从布隆过滤器中删除元素。我们很容易想到把位数组变成整数数组,每插入一个元素相应的计数器加 1, 这样删除元素时将计数器减掉就可以了。然而要保证安全地删除元素并非如此简单。首先我们必须保证删除的元素的确在布隆过滤器里面。这一点单凭这个过滤器是无法保证的。另外计数器回绕也会造成问题。

在降低误算率方面,有不少工作,使得出现了很多布隆过滤器的变种。

在程序的世界中,布隆过滤器是程序员的一把利器,利用它可以快速地解决项目中一些比较棘手的问题。

如网页 URL 去重、垃圾邮件识别、大集合中重复元素的判断和缓存穿透等问题。

布隆过滤器的典型应用有:

知道了布隆过滤器的原理和使用场景,我们可以自己实现一个简单的布隆过滤器

分布式环境中,布隆过滤器肯定还需要考虑是可以共享的资源,这时候我们会想到 Redis,是的,Redis 也实现了布隆过滤器。

当然我们也可以把布隆过滤器通过 bloomFilter.writeTo() 写入一个文件,放入OSS、S3这类对象存储中。

Redis 提供的 bitMap 可以实现布隆过滤器,但是需要自己设计映射函数和一些细节,这和我们自定义没啥区别。

Redis 官方提供的布隆过滤器到了 Redis 4.0 提供了插件功能之后才正式登场。布隆过滤器作为一个插件加载到 Redis Server 中,给 Redis 提供了强大的布隆去重功能。

在已安装 Redis 的前提下,安装 RedisBloom,有两种方式

直接编译进行安装

使用Docker进行安装

使用

布隆过滤器基本指令:

我们只有这几个参数,肯定不会有误判,当元素逐渐增多时,就会有一定的误判了,这里就不做这个实验了。

上面使用的布隆过滤器只是默认参数的布隆过滤器,它在我们第一次 add 的时候自动创建。

Redis 还提供了自定义参数的布隆过滤器,bf.reserve 过滤器名 error_rate initial_size

但是这个操作需要在 add 之前显式创建。如果对应的 key 已经存在,bf.reserve 会报错

我是一名 Javaer,肯定还要用 Java 来实现的,Java 的 Redis 客户端比较多,有些还没有提供指令扩展机制,笔者已知的 Redisson 和 lettuce 是可以使用布隆过滤器的,我们这里用 Redisson

为了解决布隆过滤器不能删除元素的问题,布谷鸟过滤器横空出世。论文《Cuckoo Filter:Better Than Bloom》作者将布谷鸟过滤器和布隆过滤器进行了深入的对比。相比布谷鸟过滤器而言布隆过滤器有以下不足:查询性能弱、空间利用效率低、不支持反向操作(删除)以及不支持计数。

关于“布隆过滤器”这个话题的介绍,今天小编就给大家分享完了,如果对你有所帮助请保持对本站的关注!

本文来自作者[南城旧梦]投稿,不代表盛龙号立场,如若转载,请注明出处:https://snlon.net/sn/1983.html

(140)

文章推荐

  • 鬼吹灯里的阴谋:后几部是一个坏老头布的局

    网上有关“鬼吹灯里的阴谋:后几部是一个坏老头布的局”话题很是火热,小编也是针对鬼吹灯里的阴谋:后几部是一个坏老头布的局寻找了一些与之相关的一些信息进行分析,如果能碰巧解决你现在面临的问题,希望能够帮助到您。鬼吹灯前几部讲述胡八一等人,被扎格拉玛鬼洞诅咒后,四处寻找雮尘珠来解除诅咒的故事,而后几部讲述

    2025年10月16日
    126317
  • 南京的医保卡可以省内使用吗

    网上有关“南京的医保卡可以省内使用吗”话题很是火热,小编也是针对南京的医保卡可以省内使用吗寻找了一些与之相关的一些信息进行分析,如果能碰巧解决你现在面临的问题,希望能够帮助到您。法律分析:形式上已经可以了。从2015年2月1日起,江苏省已经统一发放江苏省社会保障卡,新的社保卡打破了江苏省内的区域限制

    2025年10月22日
    130310
  • 建议谨慎使用汽油添加剂

    网上有关“建议谨慎使用汽油添加剂”话题很是火热,小编也是针对建议谨慎使用汽油添加剂寻找了一些与之相关的一些信息进行分析,如果能碰巧解决你现在面临的问题,希望能够帮助到您。建议谨慎使用汽油添加剂“老板,要不要帮你加支汽油添加剂?”最近一段时间,刘先生开车去油站加油时,总是会遇到加油站的店员向自己推荐使

    2025年11月01日
    119307
  • 地源热泵使用效果如何 地源热泵详细介绍【详解】

    网上有关“地源热泵使用效果如何地源热泵详细介绍【详解】”话题很是火热,小编也是针对地源热泵使用效果如何地源热泵详细介绍【详解】寻找了一些与之相关的一些信息进行分析,如果能碰巧解决你现在面临的问题,希望能够帮助到您。地源热泵效果如何,与常规中央空调相比,地源热泵的使用效果非常好,被称为?绿色空

    2025年11月02日
    107309
  • 玩家辅助神器:“微乐麻将挂多少钱”其实确实有挂

    亲,微乐麻将挂多少钱这款游戏可以开挂的,确实是有挂的,很多玩家在这款游戏中打牌都会发现很多用户的牌特别好,总是好牌,而且好像能看到其他人的牌一样。所以很多小伙伴就怀疑这款游戏是不是有挂,实际上这款游戏确实是有挂的通过添加客服微:本司针对手游进行匹配,选择我们的四大理由:1、软件是一款

    2025年11月13日
    88320
  • 开挂辅助工具“微乐安徽麻将开挂神器下载”其实确实有挂

    >亲,微乐安徽麻将开挂神器下载这款游戏原来确实可以开挂,详细开挂教程1、起手看牌2、随意选牌3、控制牌型4、注明,就是全场,公司软件防封号、防检测、 正版软件、非诚勿扰。2022首推。全网独家,诚信可靠,无效果全额退款,本司推出的多功能作 弊辅助软件

    2025年11月14日
    87304
  • 玩家辅助神器:“手机十三水怎么拿好牌”开挂(透视)辅助教程

    >亲,手机十三水怎么拿好牌这款游戏原来确实可以开挂,详细开挂教程1、起手看牌2、随意选牌3、控制牌型4、注明,就是全场,公司软件防封号、防检测、 正版软件、非诚勿扰。2022首推。全网独家,诚信可靠,无效果全额退款,本司推出的多功能作 弊辅助软件。软

    2025年11月28日
    82311
  • 推荐一款“手机微乐麻将可以开挂吗?”附开挂脚本详细步骤

    亲,手机微乐麻将可以开挂吗?这款游戏可以开挂的,确实是有挂的,很多玩家在这款游戏中打牌都会发现很多用户的牌特别好,总是好牌,而且好像能看到其他人的牌一样。所以很多小伙伴就怀疑这款游戏是不是有挂,实际上这款游戏确实是有挂的通过添加客服微:本司针对手游进行匹配,选择我们的四大理由:1、软

    2025年12月12日
    130305
  • 作家最好的写作方式脑筋急转弯

    网上有关“作家最好的写作方式脑筋急转弯”话题很是火热,小编也是针对作家最好的写作方式脑筋急转弯寻找了一些与之相关的一些信息进行分析,如果能碰巧解决你现在面临的问题,希望能够帮助到您。1.因为没有“猪”路2.他们都拿了刀,在打架之前,都兴奋的用手拍胸脯,结果被自己的刀给刺死了。3.不是2吗?要不就是王

    2025年12月17日
    83313
  • 车讯 - 本田思域Type R限量版 打破铃鹿赛道前驱车圈速纪录

    网上有关“车讯|本田思域TypeR限量版打破铃鹿赛道前驱车圈速纪录”话题很是火热,小编也是针对车讯|本田思域TypeR限量版打破铃鹿赛道前驱车圈速纪录寻找了一些与之相关的一些信息进行分析,如果能碰巧解决你现在面临的问题,希望能够帮助到您。近年来,全球车企在性能车领域的头衔争夺战异常激

    2025年12月21日
    75315
  • 黄豆酱拌面条的做法

    网上有关“黄豆酱拌面条的做法”话题很是火热,小编也是针对黄豆酱拌面条的做法寻找了一些与之相关的一些信息进行分析,如果能碰巧解决你现在面临的问题,希望能够帮助到您。 黄豆酱是我们厨房中常见的调味品,它可以给食物增加鲜美度,也可以增色增咸。黄豆酱是由黄豆发酵制作而成的,也有一定的营养成分。有的人喜欢拿黄

    2025年12月28日
    45300
  • 清道夫的养殖方法是什么?

    网上有关“清道夫的养殖方法是什么?”话题很是火热,小编也是针对清道夫的养殖方法是什么?寻找了一些与之相关的一些信息进行分析,如果能碰巧解决你现在面临的问题,希望能够帮助到您。清道夫虽然容易养殖,也容易成活,但也需要注意以下养护方法:1、注意水质,应该尽量选择弱酸性的软水或者中性的水。另外,因为它是无

    2026年01月16日
    40315

发表回复

本站作者才能评论

评论列表(3条)

  • 南城旧梦的头像
    南城旧梦 2025年09月20日

    我是盛龙号的签约作者“南城旧梦”

  • 南城旧梦
    南城旧梦 2025年09月20日

    本文概览:网上有关“布隆过滤器”话题很是火热,小编也是针对布隆过滤器寻找了一些与之相关的一些信息进行分析,如果能碰巧解决你现在面临的问题,希望能够帮助到您。 布隆过滤器 (英语:Blo...

  • 南城旧梦
    用户092010 2025年09月20日

    文章不错《布隆过滤器》内容很有帮助