分布式系统之水平分区算法

水平分区算法是为了扩展主机,主要有以下三种:

范围分区

根据一个指定的关键字将数据集拆分成为若干连续的范围,通常由一个负载均衡节点来重定向,比如使用日期来进行进行划分数据进行水平分区

优点

首先是实现上比较简单

可以范围查询(只能在分区字段上进行范围查询)

如果查询范围小,并且数据位于同一节点上时性能较好

重新分区比较简单

缺点

没有办法使用分区以外的字段来进行范围查询

当查询范围较大时,会涉及多个节点,性能就比较差

按照特定的字段进行分区会产生数据分布不均

hash区分

通过指定一个关键字,对其进行计算hash来决定分区

优点

hash是随机的,会使得数据分布随机,避免了热点问题

缺点

不会额外的存储数据,没有办法进行范围查询

如果hash函数改变(比如槽数增加或者减少),就需要rehash,会引起大规模的数据移动

一致性hash

这个是比较厉害的方法,将hash值组织成一个抽象的环称为hash环,节点也会hash到环上,数据也会映射到环上,然后顺时针找存储节点,然后引入虚拟节点来解决数据分布不均,并且可以根据设置虚拟节点的数量来实现针对不同的节点使用率不一样,比如性能较高的节点多设置几个虚拟节点,性能交叉的节点少设置金额虚拟节点。

你可能感兴趣的:(分布式)