一、什么是布隆过滤器
布隆过滤器是一种数据结构,主要是通过位图+多个哈希函数来实现对一个 数据 的标记
作用是在大量数据中,判断给定的一个 数据 是否存在
二、哈希表与布隆过滤器
哈希表也可以对一个数据进行标记,然后可以起到判断是否存在的作用,并且标记和判断的时间复杂度都为O(1),布隆过滤器有啥优点
首先哈希表的时间复杂度是很理想,但是在大量数据的情况下,空间复杂度很高,计算机可能不支持那么大的内存,举个例子:
如果一个黑名单网站包含100亿个URL连接,每个URL最多占64Byte,要求设计一个系统,判断当前的URL是否在这个黑名单当中,要求额外空间不超过30GB,允许误差率为万分之一
如果使用哈希表标记,将URL哈希函数处理得到一个int类型的哈希值,那么需要一个大小为100亿的int数组去标记,需要的内存大概在300多GB,计算机显然不支持
布隆过滤器使用位图去标记,解决了内存上的问题,解决上面的问题,只需要1个多G的内存大大节约了内存
三、布隆过滤器的使用
假设这个数据是字符串“xxxxx”,我们要在大量的数据中判断该数据是否存在,只要把字符串同样进行三种哈希函数处理,然后判断三个哈希值的位置是否
为1, 如果有一个位置不为1,则一定不存在如果都为1,表示可能存在
也就是说布隆过滤器只能判断数据是否一定不存在,而无法判断数据是否一定存在。
四、布隆过滤器的优缺点
优点:由于存放的不是完整的数据,所以占用的内存很少,而且新增,查询速度够快;
缺点: 随着数据的增加,误判率随之增加;无法做到删除数据;只能判断数据是否一定不存在,而无法判断数据是否一定存在。
布隆过滤器的误判率和 插入的数据多少 以及 位图的大小有密切的关系
五、布隆过滤器的应用
Redis缓存的判断、网页URL的去重,垃圾邮件的判别,集合重复元素的判别