当前位置: 首页 > 面试题库 >

使用布隆过滤器的好处是什么?

宗乐池
2023-03-14
问题内容

我正在阅读绽放过滤器,它们看起来很傻。使用Bloom
Bloom过滤器可以完成的任何事情,都可以使用单个哈希函数而不是多个哈希函数在更少的空间内更有效地完成,或者就是这样。为什么要使用布隆过滤器,它有什么用?


问题答案:

从维基百科:

与其他表示集的数据结构相比,Bloom筛选器在空间方面具有很大的优势,例如用于自平衡二进制html" target="_blank">搜索树,尝试,哈希表或简单数组或条目的链接列表的集合。其中大多数要求至少存储数据本身,这可能需要少量的位(对于小整数)到任意数量的位(例如对于字符串)(重试是例外,因为它们可以在具有相同前缀的元素)。链接结构会为指针带来额外的线性空间开销。另一方面,具有1%误差和k的最佳值的Bloom滤波器每个元素仅需要9.6位-不管元素的大小如何。这种优势部分是由于其紧凑性(继承自数组,部分是由于其概率性质。如果1%的误报率似乎过高,则每次我们为每个元素增加4.8位时,我们将其降低十倍。

我很清楚

Bloom过滤器不存储元素本身,这是关键点。您不使用Bloom过滤器来测试是否存在某个元素,而是使用它来测试它是否肯定
存在,因为它可以确保不会出现假阴性。这使您不必为集合中不存在的元素(例如用于查找它们的磁盘IO)做额外的工作。

而且所有这些空间都比哈希表之类的空间小得多(对于大型数据集,哈希表可能会部分地位于磁盘上)。尽管可以将Bloom过滤器与哈希表之类的结构 结合
使用,但是一旦确定该元素有可能出现。

因此,示例使用模式可能是:

您在磁盘上有很多数据-您决定要确定的错误界限(例如1%),该界限规定了 m 的值。然后确定最佳 k
(根据文章中给出的公式)。您一次从此磁盘绑定数据填充过滤器。

现在,您已将筛选器放入RAM。当需要处理某些元素时,可以查询过滤器以查看它是否有可能存在于数据集中。如果没有,则不会进行任何额外的工作。没有磁盘读取,等等。(如果是哈希或树,则必须这样做)。

否则,如果过滤器显示“是的,则在其中”,则有1%的可能性是错误的,因此您必须进行必要的工作才能找出答案。99%的时间,它确实
在那儿,所以这项工作并非一无是处。



 类似资料:
  • 主要内容:应用场景,工作原理,安装与使用,常用命令汇总,Python使用布隆过滤器布隆过滤器(Bloom Filter)是 Redis 4.0 版本提供的新功能,它被作为插件加载到 Redis 服务器中,给 Redis 提供强大的去重功能。 相比于 Set 集合的去重功能而言,布隆过滤器在空间上能节省 90% 以上,但是它的不足之处是去重率大约在 99% 左右,也就是说有 1% 左右的误判率,这种误差是由布隆过滤器的自身结构决定的。俗话说“鱼与熊掌不可兼得”,如果想要节省空间,

  • 问题内容: 你更喜欢哪个?为什么? 它们都可以用来完成相似的任务,但是我很好奇,看看人们在实际应用中使用了什么,以及这样做的理由。 问题答案: Bloom过滤器和Cuckoo过滤器在类似的情况下使用,但是通常有很多差异,这些差异通常会确定哪个是更好的选择。 布隆过滤器在数据库引擎内部使用,尤其是Apache Cassandra。正如其他张贴者所说,其原因是为了减少慢速设置操作的成本。基本上,任何高

  • 本文向大家介绍C++ 数据结构之布隆过滤器,包括了C++ 数据结构之布隆过滤器的使用技巧和注意事项,需要的朋友参考一下 布隆过滤器 一、历史背景知识    布隆过滤器(Bloom Filter)是1970年由布隆提出的。它实际上是一个很长的二进制向量和一系列随机映射函数。布隆过滤器可以用于检索一个元素是否在一个集合中。它的优点是空间效率和查询时间都远超过一般的算法,缺点是有一定的误识别率和删除错误

  • 介绍 布隆过滤器(英语:Bloom Filter)是1970年由布隆提出的。它实际上是一个很长的二进制向量和一系列随机映射函数。布隆过滤器可以用于检索一个元素是否在一个集合中。它的优点是空间效率和查询时间都远远超过一般的算法,缺点是有一定的误识别率和删除困难。 布隆过滤器的原理是,当一个元素被加入集合时,通过K个散列函数将这个元素映射成一个位数组中的K个点,把它们置为1。检索时,我们只要看看这些点

  • 过滤器是一种代码重用的技术,它可以转换 HTTP 请求的内容,响应,及头信息。过滤器通常不产生响应或像 servlet 那样对请求作出响应,而是修改或调整到资源的请求,修改或调整来自资源的响应。 过滤器可以作用于动态或静态内容。这章说的动态和静态内容指的是 Web 资源。 供开发人员使用的过滤器功能有如下几种类型: 在执行请求之前访问资源。 在执行请求之前处理资源的请求。 用请求对象的自定义版本包

  • 本文向大家介绍Java实现布隆过滤器的方法步骤,包括了Java实现布隆过滤器的方法步骤的使用技巧和注意事项,需要的朋友参考一下 前言 记得前段时间的文章么?redis使用位图法记录在线用户的状态,还是需要自己实现一个IM在线用户状态的记录,今天来讲讲另一方案,布隆过滤器 布隆过滤器的作用是加快判定一个元素是否在集合中出现的方法。因为其主要是过滤掉了大部分元素间的精确匹配,故称为过滤器。 布隆过滤器

  • 问题内容: 我相信我理解Java Bean是什么:Java类包含无参数构造函数,可序列化,并使用getter和setter公开其字段。 Java Bean是否必须公开其 所有 字段才能成为Bean?如果没有,它甚至有揭露 任何 ? Java Bean可以包括带有参数的构造函数以及无参数的构造函数吗? 除了符合某种编码风格以外,Java Bean的目的是什么?似乎有很多关于“这个豆”或“那个豆”的讨

  • 问题内容: 假设我的web.xml中有以下内容 如果请求以/XYZ/abc.do的形式出现,过滤器的调用顺序是什么?为什么? 问题答案: 按照其映射在web.xml中定义的顺序 如果使用注释(),则顺序似乎未定义 -您仍必须在web.xml中声明条目。