bloom filter是什么?
Bloom filter 是由 Howard Bloom 在 1970 年提出的二进制向量数据结构,它具有很好的空间和时间效率,被用来检测一个元素是不是集合中的一个成员。如果检测结果为是,该元素不一定在集合中;但如果检测结果为否,该元素一定不在集合中。因此Bloom filter具有100%的召回率。这样每个检测请求返回有“在集合内(可能错误)”和“不在集合内(绝对不在集合内)”两种情况,可见 Bloom filter 是牺牲了正确率和时间以节省空间。
上面这段说明是来自百度百科,听起来有点 绕口,我重新带入点画面感来描述一下:
Bloom filter像是一个宁杀错不放过的暴力执法者,他特别历害,当这块空间范围内有坏蛋就一定会被抓住并且从未失过手,但比较坑的是小机率会抓错人。
什么时候用bloom filter?
当需要判断元素是否在集合中的时候,通常是把元素先保存在集合内,当集合内的元素越来越多,且单个元素的量又有一点长的时候(比如说URL),集合占用的内存空间就会越来越大,检索速度会越来越慢、内存空间越占越多。这个时候可以考滤用bloom filter了。但是要注意的是它并不是精确的,如果你的场景对精度要求不高可以考滤使用。 我是在做爬虫框架时做URL去重用的,要求并没有那么精确。
具体细节我也是在百度百科上看的,想了解更多去这里吧
https://baike.baidu.com/item/bloom filter/6630926?fr=aladdin