算法学习 一致性哈希 布隆过滤器

哈希函数特点

1.∞个in对应 有限个out

2.相同in对应相同out

3.不同in也可以对应相同out (哈希碰撞)

**4.out等概率且随机

Hash(in)%m=out 哈希后取余

Q1:实现一种结构,可增删取的时间复杂度都为O1

增:将某个key加到结构中,不重复加入

删:将某个key在结构中删去

取:等概率随机返回一个key

两个哈希map维护(value,key)(key,value)一个变量size维护数据个数。

map1(A,0)(B,1)(C,2)..map2(0,A)(1,B)(2,C) size=3

map2用于随机查找,map1用于快速定位删除,删除时为保证虚拟下标0-2连续,用最末元素代替要删除的元素,size减1。即删除B时C代替B位置(C,1) (1,C)。

Q2:40e数据中取出现次数最多的10个数

用哈希函数Hash(in)%m的取余结果作为分文件的依据,每个文件维护一个map(key,num),返回每个文件前10个数,再统计即可。

平均划分不可取,因为会导致相同的数处于不同文件之中。

Q3:布隆过滤器

实现黑名单/爬虫不重复,只增不删,大量数据中快速返回结果,允许有误差。

用位图表示信息

以int数组A构造bit数组为例子

低位开始4321 8765小端存放

i位处于 numIndex=i/32; bitIndex=i%32

获取位数数据:Bit=A[numIndex]>>bitIndex&1

改1:A[numIndex]=A[numIndex]|1<<bitIndex;使修改位为1,其余为0

改0:A[numIndex]=A[numIndex]&(~ 1<<bitIndex);使修改位为0取余为1

黑名单/url分别使用k个哈希函数,映射到长度为m的位图上,将哈希结果的位数改为1。

检查时与构建时一样操作,当哈希结果所表示的位全为1时,该用户处黑名单中,可能存在哈希碰撞,使白名单误判,但不会使黑变白。

Q4:一致性哈希

数据库分为逻辑层和数据层,数据层是实际存放层,逻辑层从数据层获取数据返回用户。

一致性哈希用于数据层。

朴素版本:数据通过哈希取余来选择归属的数据服务器,不增不减时可实现负载均衡,当出现删减服务器时,迁移代价过大,需所有数据重新计数归属数据服务器。

优化版本:哈希环。通过计算n台服务器的唯一标识如ip的哈希,将环划分为n段,数据按顺时针方向选择归属的服务器,落在第n段归属n服务器。缺点在于服务器数目较小时不能实现负载均衡。增减服务器只重新计算所处段原归属的服务器即可。

虚拟节点优化哈希环实现负载均衡。如给3台服务器分配1k个字符串,在这1k个字符串上面作哈希,此时哈希环上有平均分布3k个虚拟节点,三台服务器可均衡存储数据。新增只需给新服务器分配1k个字符串加入到哈希环中再计算小量服务器数据重新归属即可,删除则将服务器所拥有的字符串按照哈希环位置分配给其他服务器。

虚拟节点可以实现管理负载,给分配的字符串数量代表着负载能力,串越多,负载越高。

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值