HBase学习笔记(三)——布隆过滤器(Bloom Filter)的原理
文章目录
- 布隆过滤器介绍
- 布隆过滤器原理
- 布隆过滤器的优缺点与用途
- 布隆过滤器使用场景
布隆过滤器介绍
布隆过滤器(Bloom Filter)由 Burton Howard Bloom 在 1970 年提出,是一种空间效率高的概率型数据结构。它专门用来检测集合中是否存在特定的元素。
布隆过滤器带有以下特点:
- 一个很长的二进制向量(位数组)
- 一系列随机函数(哈希)
- 空间效率和查询效率高
- 有一定的误判率(哈希表是精确匹配)
布隆过滤器原理
布隆过滤器(Bloom Filter)的核心是实现一个超大的位数组和几个哈希函数。
假设位数组的长度为m,哈希函数的个数为k,以上图为例。
具体操作流程如下:
- 假设集合里面有3个元素 {x,y,z},哈希函数的个数为3。首先将位数组进行初始化,将里面每个位都设置为0。
- 对于集合里面的每一个元素,将元素依次通过3个哈希函数进行映射,每次映射都会产生一个哈希值,这个值对应位数组上面的一个点,然后将位数组对应的位置标记为1。
- 查询 W 元素是否存在集合中的时候,同样的方法将 W 通过哈希映射到位数组上的3个点。
- 如果3个点的其中有一个点不为1,则可以判断该元素一定不存在集合中。 反之,如果3个点都为1,则该元素可能存在集合中。
- 注意:此处不能判断该元素是否一定存在集合中,可能存在一定的误判率。
- 可以从图中可以看到:假设某个元素通过映射对应下标为4、5、6这3个点。虽然这3个点都为1,但是很明显这3个点是不同元素经过哈希得到的位置,因此这种情况说明元素虽然不在稽核中,也可能对应的都是1,这是误判率存在的原因。
布隆过滤器添加元素
- 将要添加的元素给k个哈希函数
- 得到对应于位数组上的k个位置
- 将这k个位置设为1
布隆过滤器查询元素
- 将要查询的元素给k个哈希函数
- 得到对应于位数组上的k个位置
- 如果k个位置有一个为0,则肯定不在集合中
- 如果k个位置全部为1,则可能在集合中
布隆过滤器的优缺点与用途
优点
- 不需要存储数据本身,只用比特表示,因此空间占用相对于传统方式有巨大的优势,并且能够保密数据;
- 时间效率也较高,插入和查询的时间复杂度均为O(k);
- 哈希函数之间相互独立,可以在硬件指令层面并行计算。
缺点
- 存在假阳性的概率,不适用于任何要求 100% 准确率的场景;
- 只能插入和查询元素,不能删除元素,这与产生假阳性的原因是相同的。我们可以简单地想到通过计数(即将一个比特扩展为计数值)来记录元素数,但仍然无法保证删除的元素一定在集合中。
所以,Bloom Filter 在对查准度要求没有那么苛刻,而对时间、空间效率要求较高的场合非常合适,本文第一句话提到的用途即属于此类。另外,由于它不存在 假阴性
问题,所以用作“不存在”逻辑的处理时有奇效,比如可以用来作为 缓存系统(如Redis)的缓冲,防止缓存穿透。
布隆过滤器使用场景
HBase学习笔记(三)——布隆过滤器(Bloom Filter)的原理相关推荐
- mysql布隆过滤器源码_布隆过滤器(Bloom Filter)的原理和实现
什么情况下需要布隆过滤器? 先来看几个比较常见的例子 字处理软件中,需要检查一个英语单词是否拼写正确 在 FBI,一个嫌疑人的名字是否已经在嫌疑名单上 在网络爬虫里,一个网址是否被访问过 yahoo, ...
- js 数组 实现 完全树_Flink实例(六十八):布隆过滤器(Bloom Filter)的原理和实现 - 秋华...
什么情况下需要布隆过滤器? 先来看几个比较常见的例子 字处理软件中,需要检查一个英语单词是否拼写正确 在 FBI,一个嫌疑人的名字是否已经在嫌疑名单上 在网络爬虫里,一个网址是否被访问过 yahoo, ...
- 布隆过滤器(Bloom Filter)的原理和实现
布隆过滤器使用场景 之前在<数学之美>里面看到过布隆过滤器的介绍.那么什么场景下面需要使用布隆过滤器呢? 看下下面几个问题 字处理软件中,需要检查一个英语单词是否拼写正确 在 FBI,一个 ...
- 布隆过滤器速度_布隆过滤器(Bloom Filter)详解
布隆过滤器[1](Bloom Filter)是由布隆(Burton Howard Bloom)在1970年提出的.它实际上是由一个很长的二进制向量和一系列随机映射函数组成,布隆过滤器可以用于检索一个元 ...
- 布隆过滤器+布隆过滤器(Bloom Filter)详解
布隆过滤器+布隆过滤器(Bloom Filter)详解 程序 = 数据结构 + 算法 -- 图灵奖得主,计算机科学家N.Wirth(沃斯) A Bloom filter is a space effi ...
- Redis缓存穿透“新杀招“:布隆过滤器Bloom Filter
场景分析 这篇文章来讲述缓存穿透的补充解决方案. 为什么要用补充来形容呢? 在之前的文章中,我们提到缓存穿透的解决方案时,我是这么说的: 关于缓存穿透,我们可以在用户访问数据库后将null值存入Red ...
- 布隆过滤器(Bloom Filter)详解——基于多hash的概率查找思想
转自:http://www.cnblogs.com/haippy/archive/2012/07/13/2590351.html 布隆过滤器[1](Bloom Filter)是由布隆(Burton ...
- 布隆过滤器(Bloom Filter)原理及优缺点剖析
直观的说,bloom算法类似一个hash set,用来判断某个元素(key)是否在某个集合中. 和一般的hash set不同的是,这个算法无需存储key的值,对于每个key,只需要k个比特位,每个存储 ...
- 布隆过滤器Bloom Filter简介
背景: 如果在平时我们要判断一个元素是否在一个集合中,通常会采用查找比较的方法,下面分析不同的数据结构查找效率: 采用线性表存储,查找时间复杂度为O(N) 采用平衡二叉排序树(AVL.红黑树)存储,查 ...
最新文章
- FLAS: fast and high-throughput algorithm for PacBio long-read self-correction FLAS:快速、高通量的PacBio lon
- c语言仪器仪表课程设计,【图片】发几个C语言课程设计源代码(恭喜自己当上技术小吧主)【东华理工大学吧】_百度贴吧...
- error LNK2026: 模块对于 SAFESEH 映像是不安全的(转)
- 【转】DICOM文件格式剖析(初识)
- 密码与安全新技术总结
- antdesign 柱状图_以Ant Design为例:看B端设计的基本套路
- Mysql多源复制半同步_MySQL多源复制搭建
- 少儿C++编程如何入门
- 【智能制造】智能制造能力成熟度评测三部曲
- ImageAI (二) 使用Python快速简单实现物体检测 Object Detection
- srvany把程序作为Windows服务运行
- XYplorer设置-右键新建word文档或者md文档
- Contrastive Model Inversion for Data-Free Knowledge Distillation
- [Oracle] 自定义数据类型Type
- Camera | 4.瑞芯微平台MIPI摄像头应用程序编写
- canvas-球体动画运动
- 美国全国就业普遍低迷“技术”就业却加速增长;爱立信发布2030年10大消费者趋势 | 美通社头条...
- 提高沟通表达能力该看什么书?有哪些沟通书籍值得推荐?
- 数字IC设计的一些英语术语总结
- 【实拍】YASA高密度电机技术分析