一致性哈希,虚拟节点,布隆过滤器

目录

1.一致性哈希

2.虚拟节点

3.布隆过滤器(海量数据去重)


1.一致性哈希

例如:有三个服务器A,B,C,而现在我们手中有6W张照片,那么怎么把这些照片分给三个服务器?方法为:提取图片的关键字 % 服务器个数(3) 

假设,又新加了一台服务器D,这时会发生什么? 那之前的很多图片的位置都要发生改变

由于服务器数量发生改变,导致服务器中的数据受到影响(全部数据)

2.虚拟节点

 上面只是一种理想的状态,几乎是达不到的。有时会出现哈希偏斜:

此时,就需要引入虚拟节点概念,虚拟节点:不存在的点,臆想出来的点

例如:A  B C是真实的服务器,接着就把A,B,C分身(虚拟)——A: A1 A2 A3 ;B: B1 B2 B3 ;C:C1 C2 C3;

 我们如果遇到了A1 A2 A3也就是A的分身,我们可以直接认为遇到了A本身

绿色弧,认为都是属于服务器A的部分,和之前的哈希偏斜相比,压力大大减少,接近于均分

3.布隆过滤器(海量数据去重)

例如:有10E个整型值,不重复,现在需要确定X存不存放在这10E个整型数内?

实际上,布隆过滤器就是一个非常长的二进制矢量 + 一组哈希函数

假设,现在有三个不同的哈希函数A, B, C

 这是20个二进制位,要么存1,要么存0。

设100,200,300这三个数经过哈希函数A, B, C的分解后剩下的数字如图所示,我们把有的数字为值改为1:

 再然后,需要判断一下250在不在这组数中,而我们知道250可以被A,B,C三个函数分解为:

分析一下:如果250存在,则3,9,19的格子里应该都是1,但是我们看到19这个格子并不是1,所以250是不存在的。

最后,判断一下50在不在这组数中,50可以被A,B,C三个函数分解为:

分析一下:50可以被A,B,C三个函数分解为6,9,15,而6,9,15这三个格子确实都是1,那么这个时候可以认定50一定在吗?显然是不能认定的,因为我们知道6对应格子的1是100或200的,9对应格子的1是100的,15对应格子的1是300的,所以不能得到50一定存在的结论。这就是布隆过滤器的一个缺点。

布隆过滤器的特点:他可以非常快速的告诉我们一个值存不存在,如果判定不存在是一定不存在,但是如果判定存在的话,不能保证,有可能不存在

布隆过滤器的优点:

1.占用空间小 

 2.插入,查找时间复杂度特别低 

 3.安全,布隆过滤器不存在存储原始数据本身,所以不害怕被盗。

布隆过滤器的缺点:

1.会发生误判(如果计算得到的位都是1,但是不能保证这个值真的存在)

2.删除根本办不到

误判率:  0.03      700W          5个

                 0.01     900W          7个

误判率降低 —— 导致二进制位占用空间增加 —— 导致需要的哈希函数增加

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值