Mycat分片规则是怎么样的

网友投稿 243 2023-12-26

Mycat分片规则是怎么样的

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

1.sharding-by-intfile

hash分片

Mycat分片规则是怎么样的

表对应的分片规则

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

<tableRule name="sharding-by-intfile

">

                        <columns>sharding_id

根据该字段分片

                        <algorithm>hash-int

   分片的方法

        </tableRule>

查看rule.xml对应的方法

<function name="hash-in

t"

class="io.mycat.route.function.PartitionByFileMap">

                <property name="mapFile">partition-hash-int.txt

  ---对应的文件

                1

        </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对应的关系

                        id

                        rang-long

        </tableRule>

对应的方法

class="io.mycat.route.function.AutoPartitionByLong">

                autopartition-long.txt

        </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:

                3

        </function>

                        id

                        mod-long

        </tableRule>

4. sharding-by-month

按月分片

tab:

<table name="month_tab" primaryKey="id" autoIncrement="true" dataNode="dn1,dn2,dn3" rule="sharding-by-month" />

rule:

                        create_time

                        partbymonth

                class="io.mycat.route.function.PartitionByMonth">

                yyyy-MM-dd

                2015-01-01##开始时间

        </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): Cant 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:

rule:

                        create_time

                        partbyday

                class="io.mycat.route.function.PartitionByDate

">

                yyyy-MM-dd

                2015-01-01    ###起始日期

                3            ###多少天后开始分片

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

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:LVS+keepalived的安装部署怎么完成mysql的负载均衡
下一篇:如何理解 mysql5.中的并行复制
相关文章

 发表评论

暂时没有评论,来抢沙发吧~