系统预置了若干种分片算法供库表分片时使用。算法参数请参见分布式关系型数据库 > 用户指南 > SQL语法 > DDL语法的分片算法。
取模分片
定义
- 对分片键(整数)进行十进制求模,根据模值对应到不同分片。
- 适用条件:分片键必须是整数,分片键求余后的值均匀分布。
特点
- 分片键为自增型或随机分布的整数时能保证数据的均匀分片。
- 算法简单,性能高。
- 对多值、范围的查询支持较差(分散在不同的分片上)。
- 扩容时需要数据迁移。
- 较好的分散由时间、机构、id峰值带来的数据热点问题。
字符串HashCode取模分片
定义
- 字符串HashCode求模解析(PartitionByStringMod),对分片字段的值进行hashcode()计算并取其绝对值,然后根据配置的分片数量求模得到最终的分片。
特点
- 数据分布较不均匀。
- 如果hash算法较差,hash结果存在一定的几率发生碰撞,绝对值计算增加了碰撞的概率。
- 其余特点同取模分片。
枚举分片
定义
- 根据配置文件中枚举的具体值(允许非数值)与分片号的对应关系和分片字段的值进行分片,当未找到对应分片时,进入到设定的默认分片。
特点
- 数据分布的均匀度取决于枚举值对应的记录是否分布均匀。
- 较好的支持多值、范围的查询。
- 易于扩容,正常情况下无需数据迁移。
时间范围分片
定义
- 按照时间范围进行分片,超过分片数量后从第一个分片再次循环分片。
特点
- 适用日志数据等按时间范围进行存储的数据。
枚举分组取模分片
定义
- 枚举+取模的组合分片方式,包含枚举键和取模键两个分片键,先通过枚举键将数据分配到不同的分组,再在分组里通过取模键对应到具体的分片。
- 适用条件: 枚举键可以是整数也可以是字符串,取模键必须是整数,取模键求余后的值均匀分布。如: 数据库的数据需要按区域进行隔离,但隔离后的数据量依然巨大需要按取模方式进行再次分片,可以选择此算法。
特点
- 支持枚举键和取模键结合进行二次分片。
- 取模键为自增型或随机分布的整数时能保证数据的均匀分片。
- 算法简单,性能高。
- 对多值、范围的查询支持较差(分散在不同的分片上)。
- 扩容时需要数据迁移。
- 较好的分散一些时间、机构、id峰值带来的数据热点问题。
枚举分组字符串HashCode取模分片
定义
- 枚举+字符串HashCode取模的组合分片方式,包含枚举键和取模键两个分片键,先通过枚举键将数据分配到不同的分组,再在分组里通过取模键对应到具体的分片。
- 适用条件:枚举键可以是整数也可以是字符串,取模键是字符串,取模键字符串HashCode求余后的值均匀分布。如: 数据库的数据需要按区域进行隔离,但隔离后的数据量依然巨大需要按取模方式进行再次分片,可以选择此算法。
特点
- 支持枚举键和字符串HashCode取模键结合进行二次分片。
- 算法简单,性能高。
- 对多值、范围的查询支持较差(分散在不同的分片上)。
- 扩容时需要数据迁移。
- 较好的分散一些时间、机构、id峰值带来的数据热点问题。