1、分片枚举
通过在配置文件中配置可能的枚举 id,自己配置分片,本规则适用于特定的场景,比如有些业务需要按照省份或区县来做保存,而全国省份区县固定的,这类业务使用本条规则,配置如下:
user_id
hash-int
partition-hash-int.txt
0
0
配置说明
标签属性
说明
columns
标识将要分片的表字段
algorithm
分片函数
mapFile
标识配置文件名称
type
默认值为 0,0 表示 Integer,非零表示 String
defaultNode
默认节点:小于 0 表示不设置默认节点,大于等于 0 设置默认节点
partition-hash-int.txt 配置:
10000=0
10010=1
DEFAULT_NODE=1 //默认节点
注意
默认节点的作用:枚举分片时,如果碰到不识别的枚举值,就让它路由到默认节点
如果不配置默认节点(defaultNode 值小于 0 表示不配置默认节点),碰到不识别的枚举值就会报错
like this:can’t find datanode for sharding column:column_name val:ffffffff
2、固定分片 hash 算法
本条规则类似于十进制的求模运算,区别在于是二进制的操作,是取 id 的二进制低 10 位,即 id 二进制 &1111111111。
此算法的优点在于如果按照 10 进制取模运算,在连续插入 1-10 时候 1-10 会被分到 1-10 个分片,增大了插入的事务控制难度,而此算法根据二进制则可能会分到连续的分片,减少插入事务事务控制难度。
user_id
func1
2,1
256,512
配置说明:
标签属性
说明
columns
标识将要分片的表字段
algorithm
分片函数
partitionCount
分片个数列表
partitionLength
分片范围列表
分区长度:
默认为最大 2^n=1024 ,即最大支持 1024 分区。
约束:
count,length 两个数组的长度必须是一致的;
1024 = sum((count[i]*length[i]))
count 和 length 两个向量的点积恒等于 1024。
如果需要平均分配设置:平均分为 4 分片,partitionCount*partitionLength=1024。
4
256
3、范围约定
此分片适用于,提前规划好分片字段某个范围属于哪个分片。
user_id
rang-long
autopartition-long.txt
0
配置说明:
标签属性
说明
columns
标识将要分片的表字段
algorithm
分片函数
mapFile
标识配置文件名称
defaultNode
超过范围后的默认节点
所有的节点配置都是从 0 开始,及 0 代表节点 1,此配置非常简单,即预先制定可能的 id 范围到某个分片:
#