zoukankan      html  css  js  c++  java
  • mycat 单库分表

    上次把mycat的读写分离搞定了,这次试下单库分表,顾名思义就是在一个库里把一个表拆分为多个

    需要配置的配置文件为

    schema.xml

    配置内容如下

    <!DOCTYPE mycat:schema SYSTEM "schema.dtd">
    <mycat:schema xmlns:mycat="http://io.mycat/">
            <schema name="app_house" checkSQLschema="false" sqlMaxLimit="100">
              <table name="t_order" primaryKey="id" autoIncrement="true" subTables="t_order$1-3" dataNode="dn1" rule="mod-long" /> 
            </schema>
            <dataNode name="dn1" dataHost="mycluster" database="testdb2" />
            <dataHost name="mycluster" maxCon="1000" minCon="10" balance="1"  writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">
              <heartbeat>select user()</heartbeat>
              <!-- can have multi write hosts -->
              <writeHost host="86_M" url="172.17.3.86:3306" user="root" password="123456">
                <!-- can have multi read hosts -->
              <readHost host="177_S" url="172.17.3.177:3306" user="root" password="123456" />
              </writeHost>
              <!-- <writeHost host="hostM2" url="localhost:3316" user="root" password="123456"/> -->
            </dataHost>
    </mycat:schema>

    上面主要的配置在于table 标签设置

    我们测试的单库分表要分的表为t_order,分表规则为mod-long,分布在一个数据库内的三个表上 t_order$1-3 等价于 t_order1,t_order2,t_order3

    需要注意的rule.xml里的mod-long规则设置

    <function name="mod-long" class="io.mycat.route.function.PartitionByMod">
                    <!-- how many data nodes -->
                    <property name="count">3</property>
            </function>

    count数目代表你要分几个表,3就是三个表,和schema.xml的数量一致,后端数据库为testdb2

    其余的配置就和读写分离一样就行

    然后启动mycat

    我们要在testdb2数据库里新建三个表,t_order1,t_order2,t_order3

    CREATE TABLE `t_order1` (
      `id` int(11) NOT NULL AUTO_INCREMENT,
      `name` varchar(255) NOT NULL,
      `t_user_id` int(11) NOT NULL,
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8;
    CREATE TABLE `t_order2` (
      `id` int(11) NOT NULL AUTO_INCREMENT,
      `name` varchar(255) NOT NULL,
      `t_user_id` int(11) NOT NULL,
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8;
    CREATE TABLE `t_order3` (
      `id` int(11) NOT NULL AUTO_INCREMENT,
      `name` varchar(255) NOT NULL,
      `t_user_id` int(11) NOT NULL,
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8;

    可以看到已经有三个表了

    我们开始插入数据测试,看看数据是否是插入到三个表里了

    INSERT INTO t_order(id,name,t_user_id) VALUES(1,'dd1',1);

    使用以上语句测试

    语句执行成功了

    去物理机实际数据库的表里看看

    可以看到很均匀的插入到三个分表里了

    至此单库分表测试完成。

  • 相关阅读:
    基于python创建一个简单的HTTP-WEB服务器
    基于python自动化测试平台与虚拟化技术结合的思考
    Net分布式系统之六:微服务之API网关
    Net分布式系统之五:C#使用Redis集群缓存
    Net分布式系统之二:CentOS系统搭建Nginx负载均衡
    Net分布式系统之一:系统整体框架介绍
    .Net微服务架构之运行日志分析系统
    Net分布式系统之七:日志采集系统(1)
    程序员如何选择未来的职业路线
    NET技术公众号已上线
  • 原文地址:https://www.cnblogs.com/hh2737/p/9140201.html
Copyright © 2011-2022 走看看