zoukankan      html  css  js  c++  java
  • Mycat(水平拆分---分表 常规分片规则 )

    1.取模

    此规则对分片字段 求摸运算。也是水平分表最常用的规则。上篇文章分表中,orders表采用了此规则。

    2.分片枚举

    通过在配置文件中配置可能的枚举id,自己配置分片,本规则适用于特定的场景,比如有些业务需要按照省份或者区县来做保存,而全国省份区县固定的,这类业务使用本条规则。

    2.1修改schema.xml配置文件

    <table name="orders_ware_info" dataNode="dn1,dn2" rule="shading_by_intfile"></table>

    2.2修改rule.xml配置文件

    <tableRule name="sharding_by_intfile">
                    <rule>
                            <columns>areacode</columns>
                            <algorithm>hash-int</algorithm>
                    </rule>
            </tableRule>
    #columns:分片字段   ,algorithm:分片函数

    <function name="hash-int"
    class="io.mycat.route.function.PartitionByFileMap">
    <property name="mapFile">partition-hash-int.txt</property>
    <property name="type">1</property>
    <property name="defaultNode">0</property>
    </function>

    #mapFile :标识配置文件名称,type:0为int类型、丰0为String
    #defaultNode:默认节点:小于0 表示不设置默认节点,大于等于0表示设置默认节点,设置默认节点如果碰不到不识别的枚举值,就让他路由到默认节点,如果不设置不识别就报错。

    查看 partition-hash-int.txt

    10000=0
    10010=1

    重启mycat
    访问mycat 创建表 订单归属区域信息表

    CREATE TABLE orders_ware_info(
    `id` INT AUTO_INCREMENT,
    `order_id` INT ,
    `address` VARCHAR(200) ,
    `areacode` VARCHAR(20) ,
    PRIMARY KEY(id)
    );
    
    插入数据:
    insert into orders_ware_info(id,order_id,address,areacode) values(1,1,'beijing',10000);
    insert into orders_ware_info(id,order_id,address,areacode) values(2,2,'tianjing',10010);

    查询Mycat,dn1,dn2

    3.范围约定

    此分片适用于,提前规划好分片字段某个范围属于哪个分片。

    3.1修改schema.xml配置文件

    <table name="payment_info" dataNode="dn1,dn2" rule="auto_sharding_long"></table>

    3.2修改rule.xml配置文件

    <tableRule name="auto_sharding_long">
                    <rule>
                            <columns>order_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>
                    <property name="defaultNode">0</property>
            </function>

    3.3修改配置文件autopartition-long.txt 由于这个配置文件在docker容器中,这里我把它复制到宿主机里面修改

    docker cp mycat:/usr/local/mycat/conf/autopartition-long.txt /cjh_docker/mycat/conf/
    修改内容
    0-101=0
    103-200=1
    
    docker cp /cjh_docker/mycat/conf/autopartition-long.txt mycat:/usr/local/mycat/conf

    3.4重启mycat

    访问mycat

    支付信息表
    CREATE TABLE payment_info(
    `id`  INT AUTO_INCREMENT,
    `order_id` INT,
    `payment_status` INT,
    PRIMARY KEY(id)
    );
    
    插入数据
    insert into payment_info(id,order_id,payment_status) values(1,101,0);
    insert into payment_info(id,order_id,payment_status) values(2,102,1);
    insert into payment_info(id,order_id,payment_status) values(3,103,0);
    insert into payment_info(id,order_id,payment_status) values(4,104,1);

    查看

    4.按日期(天)分片

    此规则按天分片。设定时间格式、范围

    修改schemax.xml配置文件

     <table name="login_info" dataNode="dn1,dn2" rule="sharding_by_date"></table>

    修改rule.xml配置文件

    <tableRule name="sharding_by_date">
                    <rule>
                            <columns>login_date</columns>
                            <algorithm>shardingByDate</algorithm>
                    </rule>
            </tableRule>
    
    
     <function name="shardingByDate"
                    class="io.mycat.route.function.PartitionByDate">
                    <property name="dateFormat">yyyy-MM-dd</property>
                    <property name="sBeginDate">2019-01-01</property> 
                    <property name="sEndDate">2019-01-04</property>
                    <property name="sPartionDay">2</property>
            </function>
    
    #dateFormat:日期格式
    #sBeginDate:开始时间
    #sEndDate 结束日期,则代表数据达到了这个日期的分片后循环从开始分片插入
    #sPartionDay:分区天数,默认从开始日期算起,分隔2天一个区分

    重启mycat

    访问mycat创建表

    CREATE TABLE login_info(
        `id` INT AUTO_INCREMENT,
        `user_id` INT ,
        `login_date` Date,
        PRIMARY KEY(id)
    );
    
    insert into login_info(id,user_id,login_date) VALUES (1,101,'2019-01-01')
    insert into login_info(id,user_id,login_date) VALUES (2,102,'2019-01-02');
    insert into login_info(id,user_id,login_date) VALUES (3,103,'2019-01-03');
    insert into login_info(id,user_id,login_date) VALUES (4,104,'2019-01-04');
    insert into login_info(id,user_id,login_date) VALUES (5,105,'2019-01-05');
    insert into login_info(id,user_id,login_date) VALUES (6,106,'2019-01-06');

    查询mycat、dn1、dn2 可以看见数据分片效果

  • 相关阅读:
    windows server 2008 r2 切换windows 7主题方法
    JAVA环境安装
    Oracle 11gR2 安装教学
    webmin-1.810 安装
    Windows Squid 安装配置
    Zyxel Switch-How to block a fake DHCP server without enabling DHCP snooping?
    Java介绍
    cookies和session区别
    牛刀小试之Django二
    小试牛刀之Django
  • 原文地址:https://www.cnblogs.com/chenjiahao9527/p/14210516.html
Copyright © 2011-2022 走看看