1、一致性哈希:
由于服务器数量发生改变,导致服务器中的数据受到影响
2、这是一个圆形,认为这个圆上存在无数个点,假设这个圆上存在2^32个点,每个点有一个编号从0~2^32
这时,图片的关键字对2^32取余,结果看到底放到哪一台服务器上
服务器分布不均匀,会导致有的服务器压力过大崩溃,因此引入虚拟节点
虚拟节点:不存在的点,臆想出来的点
3、布隆过滤器
使用场景:假设有11E个整型值,不重复,现在需要确定X值在不在这10E个整型值内?(从头到尾遍历可以找到,但时间复杂度高,O(n),如何更方便的找)
实际上,布隆过滤器就是一个非常长的二进制矢量 + 一组哈希函数
假设,现在有三个不同的哈希函数A,B,C
需要判断一下250在不在?
首先先将250通过ABC这三个函数取计算,可以得到三个值,假设结果是3 9 19
分析:如果250已经存在,则3,9,19的格子里应该都是1,反过来,如果这三个格子只要有一个不是1,则250肯定不在其中存储。
需要判断一下50在不在?
首先先将50通过ABC这三个函数取计算,可以得到三个值,假设结果是6 9 15
分析:观察得到6,9,15的格子里应该都是1,那么50一定存在吗?结论是不一定
布隆过滤器的特点:可以非常快速的告诉你要找是否存在,判定不存在一定不存在,判定存在,有可能存在也有可能不在(误判)。
布隆过滤器的优缺点:
优点: 所占空间小
插入、查找的时间复杂度特别低
安全(不存储数据本身,装只存取二进制)
缺点: 会发生误判(计算得到的位都是1,但不能保证值真的存在)
删除数据办不到
java测试出来的数据:
如果误判率设定为 0.03%,大概需要的二进制位是700W,需要的哈希函数为5个
如果误判率设定为 0.01%,大概需要的二进制位是900W,需要的哈希函数为7个
误判率降低,需要的二进制位增加,需要的哈希函数也更多