布隆过滤器与一致性哈希问题
布隆过滤器:
直观的说,bloom算法类似一个hash set,用来判断某个元素(key)是否在某个集合中。
和一般的hash set不同的是,这个算法无需存储key的值,对于每个key,只需要k个比特位,每个存储一个标志,用来判断key是否在集合中。
算法:
1. 首先需要k个hash函数,每个函数可以把key散列成为1个整数
2. 初始化时,需要一个长度为n比特的数组,每个比特位初始化为0
3. 某个key加入集合时,用k个hash函数计算出k个散列值,并把数组中对应的比特位置为1
4. 判断某个key是否在集合时,用k个hash函数计算出k个散列值,并查询数组中对应的比特位,如果所有的比特位都是1,认为在集合中。
优点:不需要存储key,节省空间
缺点:
1. 算法判断key在集合中时,有一定的概率key其实不在集合中
2. 无法删除
【以上转载https://www.cnblogs.com/liyulong1982/p/6013002.html】
布隆过滤器是一个比特流数组,其主要核心问题跟单样本的大小无关,跟样本的数量有关。
什么时候要联想到布隆过滤器?
当面试官如果问这是一个黑名单的问题,有一个黑名单集合,给你一个样本判断是否属于黑名单?或者原本要求需要几百GB内存然后想让你在不要超过几十GB就实现要求,就要联想到布隆过滤器,此时可以反问面试官:你这个系统允许有失误率吗?当单样本的量给的很大,空间要求很苛刻,一个单样本几百兆,询问是否允许失误率?
一致性哈希:
1、将整个哈希值空间组织成一个虚拟的圆环,将服务器通过哈希映射到圆环上某个位置,当请求来时同样通过哈希映射到圆环上某个位置,此时由该位置顺时针往下遇到的第一个服务器节点进行服务。
2、一致性哈希算法对于节点的增减都只需重定位环空间中的一小部分数据,具有较好的容错性和可扩展性。
增加服务器节点:只需要将该节点按顺时针走遇到的第一个服务器中的一些数据(从插入位置上一节点到插入位置这段距离的数据)进行转移即可。
删除服务器节点:只需要将要删除的服务器上的数据转移回按顺时针走遇到的第一个服务器当中即可。
3、当服务器节点太少时,采用虚拟节点的方式。
虚拟节点意思是,比如有两个服务器,对两个服务器分别产生一万个节点,此时就有两万个节点,但节点的归属域仍为服务器1或者2,将这些虚拟产生的节点通过哈希映射到环中,每个计算位置都置放一个节点,这样就使得请求可以被服务器均匀服务。

浙公网安备 33010602011771号