为什么需要数据分片?
现在要处理的数据量已经由GB跨越到PB的阶段,单机无法处理,所以只能增加机
器扩大存储空间,那么数据就必须要切割。数据分片后,如何确定分片数据与机器
节点的映射关系,这就需要数据分片与路由算法。
补充:数据复制,备份分片数据,可以提高系统可用性,以及提高系统读性能,关
键的问题就是如何保证数据一致性。
常见数据分片算法
-
Round Robin
将数据的key取hash然后模上机器节点的数量。缺点很明显,当机器节点改动时会让大量的数据失效。 -
虚拟桶
在数据与机器节点之间添加虚拟桶这一层,数据到虚拟桶是通过hash多对一的映射,虚拟桶到机器节点是通过主节点内存中的一张表实现多对一的映射,所以当新增机器时只需要将若干虚拟桶移动到对应的节点即可。 -
一致性hash
我们构建逻辑上长度为2^32的环,根据每台机器节点的ip地址等信息计算出它们的hash,对应的 hash值就是他们在环上的位置。当数据被插入时,根据数据的hash值顺时针寻找,第一个被找到的机器节点存入该数据。同时为了避免节点分布不均衡,以及增加新节点时能平摊大多数机器节点的压力,我们增加虚节点的概念,将一个机器节点映射成多个,同时打散分布。
注:由于它的节点之间是P2P的,所以它的维护成本较高。 -
范围分片
根据数据的主键划分范围,一个范围对应一台节点,其映射关系由一张表维护,需要注意的是在这张表往往不是单层的结构,而是一个B+树,以适于范围的分裂。