Mycat分片规则是怎么样的

56次阅读
没有评论

共计 3952 个字符,预计需要花费 10 分钟才能阅读完成。

Mycat 分片规则是怎么样的,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。

1.sharding-by-intfile
hash 分片

表对应的分片规则

查看 rule.xml 查看对应的关系

tableRule name= sharding-by-intfile

  rule

  columns sharding_id /columns   根据该字段分片

  algorithm hash-int /algorithm     分片的方法

  /rule

  /tableRule

查看 rule.xml 对应的方法

function name= hash-int

  >

  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)

2.auto-sharding-long
范围分片

分片表如下:

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

  >

  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      。。。类推

3.mod-log
取模分片

table name= tt2 primaryKey= id autoIncrement= true dataNode= dn1,dn2,dn3 rule= mod-long /

 fun:

function name= mod-long >

  !– how many data nodes —

  property name= count 3 /property

  /function

tableRule name= mod-long

  rule

  columns id /columns

  algorithm mod-long /algorithm

  /rule

  /tableRule

4. sharding-by-month
按月分片

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

  >

  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

5 sharding-by-day 按日分片(1.6 默认文件都没写,自己配置的)

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

  >

  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 分片规则是怎么样的问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注丸趣 TV 行业资讯频道了解更多相关知识。

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-07-19发表,共计3952字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)