规则
这篇记录的是分片规则,也就是rule.xml配置文件中的内容。也是初次学习,后面会慢慢补充的!
分片规则:
1.范围
根据指定的字段及其配置的范围与数据节点的对应情况,来决定该数据属于哪一个分片。
我们想要自己定义规则,只需要修改autopartition-long.txt文件。在文件中具体规定了指定字段值应该路由到哪个数据节点。
2.取模
根据指定的字段值与节点数量进行求模运算,根据运算结果,来决定该数据属于哪一个分片。
我们只需要修改fuction中的count节点数量
3.一致性hash
一致性hash,相同的哈希因子计算值总是被划分到相同的分区表中,不会因为分布区节点的增加而改变原来数据的分区位置。
此分片规则,支持指定字段值*不为数字*的情况。就算是后面增加了节点,也不会影响数据的存放地址,因为hash值是唯一的。
4.枚举
通过在配置文件中配置可能的枚举值,指定数据分布到不同数据节点上,本规则适用于按照省份、性别、状态拆分数据(有限的可能)等。
在function中主要定义了两个属性,一个是默认节点,默认节点的作用:枚举分片时,如果碰到不识别的枚举值,就让它路由到默认节点。还有一个是映射文件,配置的是枚举值对应的分片节点。
5.应用指定
运行阶段由应用自主决定路由到哪个分片,直接根据子字符串(必须是数字)计算分片号。
在function中主要定义了四个属性
- startIndex:开始索引
- size:截取长度
- partitionCount:分片(节点)数量
- defaultPartition:默认分片
6.固定分片hash算法
类似于十进制的求模算法,但是为二进制的操作
特点:
1.如果是求模,*连续的值*,分别分配到各个不同的分片;但此算法会将连续的值可能分配到相同的分片,降低事务处理的难度。
2.可以均匀分配,也可以非均匀分配。
3.分片字段必须为*数字类型*。
7.字符串hash解析
截取字符串中的指定位置的子字符串(指定字段值非数字),进行hash算法
在function中的属性配置
partitionLength:分片的长度0-512,513-1024
partitionCount:分片数量
hashSlice*:hash运算位,格式为strat:end
0在end中出现代表str.length()
-1代表str.length()-1
大于0代表数字本身
8.按(天)日期分片
配置表的dataNode的分片,必须和分片规则一致,例如2022-01-01到2022-12-31,每10天一个分片,一共需要37个分片。
9.按自然月分片
和按天分片差不多的。