您好,登錄后才能下訂單哦!
Mycat分片規則是怎么樣的,針對這個問題,這篇文章詳細介紹了相對應的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。
表對應的分片規則
查看rule.xml查看對應的關系
<tableRule name="sharding-by-intfile">
<rule>
<columns>sharding_id</columns> 根據該字段分片
<algorithm>hash-int</algorithm> 分片的方法
</rule>
</tableRule>
查看rule.xml對應的方法
<function name="hash-int"
class="io.mycat.route.function.PartitionByFileMap">
<property name="mapFile">partition-hash-int.txt</property> ---對應的文件
<property name="defaultNode">1</property>
</function>
查看文件
[root@localhost conf]# more partition-hash-int.txt
10000=0 ####sharding_id為10000發到1節點
10010=1 ####sharding_id為10010發到2節點
DEFAULT_NODE=1 ###其它插到2節點
實驗
mysql> create table employee (id int not null primary key,name varchar(100),sharding_id int not null);
Query OK, 0 rows affected (0.02 sec)
mysql> insert into employee(id,name,sharding_id) values(2,'leader us',10000);
Query OK, 1 row affected (0.01 sec)
mysql> insert into employee(id,name,sharding_id) values(4,'leader us',10000);
Query OK, 1 row affected (0.00 sec)
mysql> insert into employee(id,name,sharding_id) values(3,'leader us',100003); -----其它插到2節點
mysql> insert into employee(id,name,sharding_id) values(4,'leader us',10010);
Query OK, 1 row affected (0.01 sec)
mysql> insert into employee(id,name,sharding_id) values(5,'leader us',10010);
Query OK, 1 row affected (0.03 sec)
分片表如下:
<table name="travelrecord" dataNode="dn1,dn2,dn3" rule="auto-sharding-long" />
查看rule.xml對應的關系
<tableRule name="auto-sharding-long">
<rule>
<columns>id</columns>
<algorithm>rang-long</algorithm>
</rule>
</tableRule>
對應的方法
<function name="rang-long"
class="io.mycat.route.function.AutoPartitionByLong">
<property name="mapFile">autopartition-long.txt</property>
</function>
對應的文件:
# range start-end ,data node index
# K=1000,M=10000.
0-500M=0 #####范圍0-500M插到第一個節點
500M-1000M=1 #####范圍500m-1000M插到第2個節點
1000M-1500M=2 。。。類推
<table name="tt2" primaryKey="id" autoIncrement="true" dataNode="dn1,dn2,dn3" rule="mod-long" />
fun:
<function name="mod-long" class="io.mycat.route.function.PartitionByMod">
<!-- how many data nodes -->
<property name="count">3</property>
</function>
<tableRule name="mod-long">
<rule>
<columns>id</columns>
<algorithm>mod-long</algorithm>
</rule>
</tableRule>
tab:
<table name="month_tab" primaryKey="id" autoIncrement="true" dataNode="dn1,dn2,dn3" rule="sharding-by-month" />
rule:
<tableRule name="sharding-by-month">
<rule>
<columns>create_time</columns>
<algorithm>partbymonth</algorithm>
</rule>
</tableRule>
<function name="partbymonth"
class="io.mycat.route.function.PartitionByMonth">
<property name="dateFormat">yyyy-MM-dd</property>
<property name="sBeginDate">2015-01-01</property> ##開始時間
</function>
測試:
mysql> insert into month_tab(id,name,sharding_id,create_time) values (1,'1',1,'2015-01-01');
Query OK, 1 row affected (0.43 sec)
mysql> insert into month_tab(id,name,sharding_id,create_time) values (2,'2',2,'2015-02-02');
Query OK, 1 row affected (0.01 sec)
mysql> insert into month_tab(id,name,sharding_id,create_time) values (3,'3',3,'2015-03-03');
Query OK, 1 row affected (0.49 sec)
mysql> insert into month_tab(id,name,sharding_id,create_time) values (4,'4',4,'2015-04-04'); ###按月分片,只有三個節點,只能插到1,2,3月份的,4月份就開始報錯了
ERROR 1064 (HY000): Can't find a valid data node for specified node index :MONTH_TAB -> CREATE_TIME -> 2015-04-04 -> Index : 3
tab:
<table name="day_tab" primaryKey="ID" dataNode="dn1,dn2,dn3" rule="sharding-by-day"/>
rule:
<tableRule name="sharding-by-day">
<rule>
<columns>create_time</columns>
<algorithm>partbyday</algorithm>
</rule>
</tableRule>
<function name="partbyday"
class="io.mycat.route.function.PartitionByDate">
<property name="dateFormat">yyyy-MM-dd</property>
<property name="sBeginDate">2015-01-01</property> ###起始日期
<property name="sPartionDay">3</property> ###多少天后開始分片
</function>
測試:
插了前9天,分到三個分片
mysql> select * from day_tab;
+----+------+-------------+---------------------+
| id | name | sharding_id | create_time |
+----+------+-------------+---------------------+
| 7 | 1 | 1 | 2015-01-08 00:00:00 |
| 8 | 1 | 1 | 2015-01-09 00:00:00 |
| 13 | 1 | 1 | 2015-01-07 00:00:00 |
| 7 | 1 | 1 | 2015-01-01 00:00:00 |
| 8 | 1 | 1 | 2015-01-02 00:00:00 |
| 9 | 1 | 1 | 2015-01-03 00:00:00 |
| 10 | 1 | 1 | 2015-01-04 00:00:00 |
| 11 | 1 | 1 | 2015-01-05 00:00:00 |
| 12 | 1 | 1 | 2015-01-06 00:00:00 |
+----+------+-------------+---------------------+
9 rows in set (0.01 sec)
mysql> insert into day_tab(id,name,sharding_id,create_time) values (17,'1',1,'2015-01-10'),(18,'1',1,'2015-01-11'); ###插第10天的,開始報錯
ERROR 1064 (HY000): Index: 3, Size: 3
關于Mycat分片規則是怎么樣的問題的解答就分享到這里了,希望以上內容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關注億速云行業資訊頻道了解更多相關知識。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。