系统预置了若干种分片算法供库表分片时使用。算法参数请参见设置分片规则的DDL语句的分片算法内容。
取模分片
定义
- 对分片键(整数)进行十进制求模,根据模值对应到不同分片。 
- 适用条件:分片键必须是整数,分片键求余后的值均匀分布。 
特点
- 分片键为自增型或随机分布的整数时能保证数据的均匀分片。 
- 算法简单,性能高。 
- 对多值、范围的查询支持较差(分散在不同的分片上)。 
- 扩容时需要数据迁移。 
- 较好的分散由时间、机构、id峰值带来的数据热点问题。 
字符串HashCode取模分片
定义
- 字符串HashCode求模解析(PartitionByStringMod),对分片字段的值进行hashcode()计算并取其绝对值,然后根据配置的分片数量求模得到最终的分片。 
特点
- 数据分布较不均匀。 
- 如果hash算法较差,hash结果存在一定的几率发生碰撞,绝对值计算增加了碰撞的概率。 
- 其余特点同取模分片。 
枚举分片
定义
- 根据配置文件中枚举的具体值(允许非数值)与分片号的对应关系和分片字段的值进行分片,当未找到对应分片时,进入到设定的默认分片。 
特点
- 数据分布的均匀度取决于枚举值对应的记录是否分布均匀。 
- 较好的支持多值、范围的查询。 
- 易于扩容,正常情况下无需数据迁移。 
时间范围分片
定义
- 按照时间范围进行分片,超过分片数量后从第一个分片再次循环分片。 
特点
- 适用日志数据等按时间范围进行存储的数据。 
枚举分组取模分片
定义
- 枚举+取模的组合分片方式,包含枚举键和取模键两个分片键,先通过枚举键将数据分配到不同的分组,再在分组里通过取模键对应到具体的分片。 
- 适用条件: 枚举键可以是整数也可以是字符串,取模键必须是整数,取模键求余后的值均匀分布。如: 数据库的数据需要按区域进行隔离,但隔离后的数据量依然巨大需要按取模方式进行再次分片,可以选择此算法。 
特点
- 支持枚举键和取模键结合进行二次分片。 
- 取模键为自增型或随机分布的整数时能保证数据的均匀分片。 
- 算法简单,性能高。 
- 对多值、范围的查询支持较差(分散在不同的分片上)。 
- 扩容时需要数据迁移。 
- 较好的分散一些时间、机构、id峰值带来的数据热点问题。 
枚举分组字符串HashCode取模分片
定义
- 枚举+字符串HashCode取模的组合分片方式,包含枚举键和取模键两个分片键,先通过枚举键将数据分配到不同的分组,再在分组里通过取模键对应到具体的分片。 
- 适用条件:枚举键可以是整数也可以是字符串,取模键是字符串,取模键字符串HashCode求余后的值均匀分布。如: 数据库的数据需要按区域进行隔离,但隔离后的数据量依然巨大需要按取模方式进行再次分片,可以选择此算法。 
特点
- 支持枚举键和字符串HashCode取模键结合进行二次分片。 
- 算法简单,性能高。 
- 对多值、范围的查询支持较差(分散在不同的分片上)。 
- 扩容时需要数据迁移。 
- 较好的分散一些时间、机构、id峰值带来的数据热点问题。 
数值类型Range分片算法
定义
- 该分片算法依据分片键的连续范围划分数据,将分片键的取值区间分割为不重叠的连续段,每个分片负责存储单一区间内的数据。 
- 每个分片对应的数值范围可以通过设置分片算法时指定。 
特点
- 基于HASH的分片规则,在面对诸如 - a>10这样的非等值规则时,只能在所有分片上进行广播,导致查询性能低下。而Range分片算法,可以通过计算非等值的条件对应的范围,进行分片裁剪,减少非必要的数据节点(DataNode,简称DN)查询,提高性能。以Range范围为- (1,10,max value)为例,如果SELECT语句中包含- a<9,则对应的分片为前- 2个,执行查询的时将不再关注第3个分片,可以减少DN查询,有效提高性能。
