hadoop是一个分布式文件系统,含有过滤器
查找时:key先hash找到一些可能文件再遍历找key
普通hash
再多个服务器间,均等存放数据,冷门热门都均等。当新增或者减少服务器的时候,数据迁移的代价非常大,因为需要重新计算所有数据,再mol新服务器总数,所以需要一个新的结构
一致性hash
假如有·三台数据服务器
- 数据增加方法
在环上找到hash后的值,数据存储到顺时针下一个服务器上。
- 数据迁移
- 删掉新服务器则把数据迁移到顺时针的第一个服务器1中
怎么实现顺时针寻找下一台服务器?
在每个服务器中存一个有序数组 [ 2,500亿,50万亿 ]
再通过二分查找服
新增服务器之后,会产生服务器负载不均衡
解决办法:虚拟节点技术
核心:利用比例划分
每个服务器新建1000个虚拟节点
- 迁移时,将虚拟节点数据迁移翻译为服务器数据迁移
- 新增服务器时,给新服务器分配1000个虚拟节点,由于按比例分配,旧服务器向新服务器给数据
- 删除时,服务器将数据均匀给回其他服务器,因为按比例分配。
可以对不同性能的服务器分配不同数量的虚拟节点
m1 ( 强 ) --> 2000个
m2 --> 1000个
m3 --> 1000个
m3 ( 弱 ) --> 500个