【Mycat】Mycat分片规则

1.sharding-by-intfile

hash分片

  1. 表对应的分片规则

查看rule.xml查看对应的关系
  1. <tableRule name="sharding-by-intfile">
  2.                 <rule>
  3.                         <columns>sharding_id</columns>   根据该字段分片
  4.                         <algorithm>hash-int</algorithm>    分片的方法
  5.                 </rule>
  6.         </tableRule>

查看rule.xml对应的方法
  1. <function name="hash-int"
  2.                 class="io.mycat.route.function.PartitionByFileMap">
  3.                 <property name="mapFile">partition-hash-int.txt</property>   ---对应的文件
  4.                 <property name="defaultNode">1</property>
  5.         </function>

查看文件
  1. [root@localhost conf]# more partition-hash-int.txt
  2. 10000=0   ####sharding_id为10000发到1节点
  3. 10010=1   ####sharding_id为10010发到2节点
  4. 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

范围分片

  1. 分片表如下:
    1. <table name="travelrecord" dataNode="dn1,dn2,dn3" rule="auto-sharding-long" />

  2. 查看rule.xml对应的关系
    1. <tableRule name="auto-sharding-long">
    2.                 <rule>
    3.                         <columns>id</columns>
    4.                         <algorithm>rang-long</algorithm>
    5.                 </rule>
    6.         </tableRule>

  3. 对应的方法
    1. <function name="rang-long"
    2.                 class="io.mycat.route.function.AutoPartitionByLong">
    3.                 <property name="mapFile">autopartition-long.txt</property>
    4.         </function>

  4. 对应的文件:
    1. # range start-end ,data node index
    2. # K=1000,M=10000.
    3. 0-500M=0           #####范围0-500M插到第一个节点
    4. 500M-1000M=1       #####范围500m-1000M插到第2个节点
    5. 1000M-1500M=2      。。。类推



3.mod-log

取模分片

  1. <table name="tt2" primaryKey="id" autoIncrement="true" dataNode="dn1,dn2,dn3" rule="mod-long" />


    1. <tableRule name="mod-long">
    2.                 <rule>
    3.                         <columns>id</columns>
    4.                         <algorithm>mod-long</algorithm>
    5.                 </rule>
    6.         </tableRule>
     fun:
    1. <function name="mod-long" class="io.mycat.route.function.PartitionByMod">
    2.                 <!-- how many data nodes -->
    3.                 <property name="count">3</property>
    4.         </function>




4. sharding-by-month

按月分片

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


rule:
  1. <tableRule name="sharding-by-month">
  2.                 <rule>
  3.                         <columns>create_time</columns>
  4.                         <algorithm>partbymonth</algorithm>
  5.                 </rule>
  6.         </tableRule>


  7. <function name="partbymonth"
  8.                 class="io.mycat.route.function.PartitionByMonth">
  9.                 <property name="dateFormat">yyyy-MM-dd</property>
  10.                 <property name="sBeginDate">2015-01-01</property>   ##开始时间
  11.         </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默认文件都没写,自己配置的)

  1. tab:
  2. <table name="day_tab" primaryKey="ID" dataNode="dn1,dn2,dn3" rule="sharding-by-day"/>

  3. rule:
    1. <tableRule name="sharding-by-day">
    2.                 <rule>
    3.                         <columns>create_time</columns>
    4.                         <algorithm>partbyday</algorithm>
    5.                 </rule>
    6.         </tableRule>


    7. <function name="partbyday"
    8.                 class="io.mycat.route.function.PartitionByDate">
    9.                 <property name="dateFormat">yyyy-MM-dd</property>
    10.                 <property name="sBeginDate">2015-01-01</property>    ###起始日期
    11.                 <property name="sPartionDay">3</property>            ###多少天后开始分片
    12.         </function>

  4. 测试:
  5. 插了前9天,分到三个分片
  6. 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)

  7. 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






待续。。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/29096438/viewspace-2137874/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/29096438/viewspace-2137874/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值