0
点赞
收藏
分享

微信扫一扫

数据结构--一致性哈希、虚拟节点、布隆过滤器

小亦同学321 2022-03-23 阅读 59
数据结构

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个

误判率降低,需要的二进制位增加,需要的哈希函数也更多

举报

相关推荐

0 条评论