zoukankan      html  css  js  c++  java
  • Mycat实战之离散分片

    1 枚举分片(customer表)

    1.1 修改配置信息加载配置文件

    <tableRule name="sharding-by-intfile">
            <rule>
                    <columns>datanode</columns>
                    <algorithm>hash-int</algorithm>
            </rule>
    </tableRule>
    
    vi partition-hash-int.txt 
    db1=0
    db2=1
    [root@mysqldb conf]# 
    

    1.2 insert演示路由信息以及mycat日志

    mysql> insert into customer(id,customer_id,datanode) values(2,2,'db2');
    Query OK, 1 row affected (0.00 sec)
    
    mysql> explain insert into customer(id,customer_id,datanode) values(1,1,'db1');
    +-----------+-----------------------------------------------------------------+
    | DATA_NODE | SQL                                                             |
    +-----------+-----------------------------------------------------------------+
    | dn1       | insert into customer(id,customer_id,datanode) values(1,1,'db1') |
    +-----------+-----------------------------------------------------------------+
    1 row in set (0.00 sec)
    

    查看mycat日志

    1.3 查询路由信息以及mycat日志

    mysql> explain select * from customer where datanode='db1';
    +-----------+---------------------------------------------------------+
    | DATA_NODE | SQL                                                     |
    +-----------+---------------------------------------------------------+
    | dn1       | SELECT * FROM customer WHERE datanode = 'db1' LIMIT 100 |
    +-----------+---------------------------------------------------------+
    1 row in set (0.00 sec)
    
    mysql> select * from customer where datanode='db1';
    +----+-------------+----------+
    | id | customer_id | datanode |
    +----+-------------+----------+
    |  1 |           1 | db1      |
    +----+-------------+----------+
    1 row in set (0.01 sec)
    

    mycat日志路由信息

    2 程序指定分区的分片

    此规则是在运行阶段有应用自主决定路由到那个分片。
    此方法为直接根据字符子串(必须是数字)计算分区号(由应用传递参数,显式指定分区号)。
    

    2.1 修改配置文件

    vi rule.xml
    <function name="sharding-by-substring" class="org.opencloudb.route.function.PartitionDirectBySubString">      
            <property name="startIndex">0</property>
            <property name="size">1</property>
            <property name="partitionCount">8</property>
            <property name="defaultPartition">0</property>
    </function>
    
    
    <tableRule name="sharding-by-substring">   
            <rule> <columns>id</columns>
                    <algorithm>sharding-by-substring</algorithm>
            </rule>
    </tableRule>
    
    vi schema.xml
    #增加tablerule 
    <table name="mycatbysubstring" primaryKey="ID" dataNode="dn1,dn2,dn3" rule="sharding-by-substring"/>
    
    #加载配置文件
    reload @@config
    

    2.2 创建表 插入数据

     create table mycatbysubstring (id  varchar(64) not null  primary key,create_time datetime,datanode varchar(10))
    
    
     insert into mycatbysubstring (id,create_time,datanode) values('0-10000000','2017-06-25',database());     
     insert into mycatbysubstring (id,create_time,datanode) values('1-10000000','2017-06-25',database()); 
    

    针对插入语句,分析mycat.log日志

    2.3 查询语句 分片字段是等值运算,分析mycat.log

    mysql>  select * from mycatbysubstring where id='1-10000000';
    +------------+---------------------+----------+
    | id         | create_time         | datanode |
    +------------+---------------------+----------+
    | 1-10000000 | 2017-06-25 00:00:00 | db2      |
    +------------+---------------------+----------+
    1 row in set (0.06 sec)
    
    mysql> explain  select * from mycatbysubstring where id='1-10000000';
    +-----------+------------------------------------------------------+
    | DATA_NODE | SQL                                                  |
    +-----------+------------------------------------------------------+
    | dn2       | select * from mycatbysubstring where id='1-10000000' |
    +-----------+------------------------------------------------------+
    1 row in set (0.00 sec)
    

    分析mycat.log日志

    2.4 查询语句:like查询,查询也是所有dbn上,分析mycat.log

    mysql> explain select * from mycatbysubstring where id like '1%';
    +-----------+-------------------------------------------------------------+
    | DATA_NODE | SQL                                                         |
    +-----------+-------------------------------------------------------------+
    | dn1       | SELECT * FROM mycatbysubstring WHERE id LIKE '1%' LIMIT 100 |
    | dn2       | SELECT * FROM mycatbysubstring WHERE id LIKE '1%' LIMIT 100 |
    | dn3       | SELECT * FROM mycatbysubstring WHERE id LIKE '1%' LIMIT 100 |
    +-----------+-------------------------------------------------------------+
    3 rows in set (0.02 sec)
    

    分析mycat.log日志

  • 相关阅读:
    PHP学习当中遗漏的知识点
    sql必知必会(第四版) 学习笔记
    servlet 笔记
    sql server 快捷键
    233
    第 四 课 数据类型
    第三课 go语言基础语法
    第二课 go语言的结构
    第 1 课 Go 简介
    linux 学习 查看文件占用空间大小
  • 原文地址:https://www.cnblogs.com/chinesern/p/7800965.html
Copyright © 2011-2022 走看看