mysql 第二十一篇文章~相关分片功能的测试一

时间:2022-12-31 08:45:13

简介:今天咱们来进行测试

分片规则 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 插入数据测试

   mysql 第二十一篇文章~相关分片功能的测试一

简单测试完成