Andrew Zhang
Nov 16, 2017
1、counting bloom filter
counting bloom filter可以解决bloom filter无法删除元素的问题。但是布隆过滤器会因为负载不均衡,浪费很多空间。
2、d-left哈希
以2-left为例,采用两个hash表,T1和T2,分别对应两个hash函数,h1和h2。存储一个key时,分别用两个hash函数h1和h2计算两个位置h1[key]和h2[key],然后看看两个hash table对应位置有没有空,只要任意一个有空就可以将此key放在对应位置。当采用d对hash表和hash函数时就是d-left哈希。
d-left哈希可以减轻布隆过滤器的负载均衡问题,使得资源利用趋于平衡。
3、cuckoo hash
采用d个哈希函数,当插入一个元素的时候,若d个位置有空,任选一个插入,否则在d个位置中随便找一个,踢走,对被踢走的key,进行重新hash插入,如果被踢走的key的d个hash位置也是全满了,继续踢。。。
4、cuckoo filter
结合cuckoo hash和d-left hash的思路,将资源划分为两块,每一块采用不同的哈希函数。对于一个插入的key,在这两块寻找空的位置插入,若没空就尝试cuckoo思想,踢走,重哈希。cuckoo filter一个改进是在filter中存储的是信息压缩后的指纹,并且重哈希的时候根据保存的指纹就能找到另一个地址。
f=fingerprint(key)
f
=
f
i
n
g
e
r
p
r
i
n
t
(
k
e
y
)
pos1=hash1(key)
p
o
s
1
=
h
a
s
h
1
(
k
e
y
)
pos2=pos1⨁f
p
o
s
2
=
p
o
s
1
⨁
f