Bloom-Filter布隆过滤
Mar 19, 2017
本质上布隆过滤器是一种数据结构,比较巧妙的概率型数据结构(probabilistic data structure),特点是高效地插入和查询,可以用来告诉你 “某样东西一定不存在或者可能存在”。
相比于传统的 List、Set、Map 等数据结构,它更高效、占用空间更少,但是缺点是其返回的结果是概率性的,而不是确切的。
布隆过滤器是一个 bit 向量或者说 bit 数组,每个位置初始都是0
使用多个不同的哈希函数生成多个哈希值,并对每个生成的哈希值指向的 bit 位置 由0变为1
判断一个东西是否存在先通过多个hash并生成多个哈希值,完了去布隆表上对应的hash槽里找一下,如果有一个不存在,那么这个东西他就肯定不存在,如果都存在也只能表明这东西有可能存在。
下面介绍两个属性,首先是布隆表的哈希槽,少的话很快就都是1了,那么必然不准确了,其次是哈希个数,太多了效率肯定低了,因为计算耗时嘛,太少了容易误判,也不好。有个公式可以计算这两个值怎么取,总之,布隆过滤就是一种数据结构,看业务情况使用。