简介:今天咱们来进行测试
分片规则 rule1
1 table 相关配置
<tableRule name="rule1">
<rule>
<columns>id</columns>
<algorithm>func1</algorithm>
</rule>
</tableRule>
2 function 相关配置
<function name="func1" class="io.mycat.route.function.PartitionByLong">
<property name="partitionCount">8</property>
<property name="partitionLength">128</property>
</function>
3 属性解析
partitionCount partitionLength 这两个为二维数组 1 (8) (128) 2 (2,1)(256,512)
限制条件 sum(partitionCount [i] XpartitionLength[i])<=1024
可以解析成为 1 8个数据节点 每分 128 2 3个数据节点 2分 256 1分 512
请注意 partitionCount 必须为你后端节点的个数,partitionLength为1024/partitionCount 。否则会出现值无法插入的情况,因为默认是8个节点
4 原理解析
本条规则类似于十进制的求模运算,区别在于是二进制的操作,是取 id 的二进制低 10 位,即 id 二进制 &1111111111。 此算法的优点在于如果按照 10 进制取模运算,在连续插入 1-10 时候 1-10 会被分到 1-10 个分片,增 大了插入的事务控制难度,而此算法根据二进制则可能会分到连续的分片,减少插入事务事务控制难度。
5 个人理解
一般的思路就是取ID得后几位来mod然后决定哪个节点,此类分片函数是先将ID二进制然后取低10位。然后在决定哪个节点,减少了插入事务事务控制的难度,
6 测试
1 配置相关测试表
<table name="user" primaryKey="id" dataNode="db1,db2" rule="rule1" />
2 建立相关表
3 修改rule规则属性
partitionCount=2 partitionLength=512 此处要保证乘积=1024 否则会加载错误
4 relod @@config;
5 插入数据测试
简单测试完成