• 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);

    使用以上语句测试

    语句执行成功了

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

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

    至此单库分表测试完成。

  • 相关阅读:
    如何查找.NET程序内存不断上涨的原因(CLRProfiler)
    IOS编程浅蓝教程(一)先决条件:开始iOS编程的必要准备
    三十而立,从零开始学ios开发:Hello World!
    【原】使用Cocos2d制作一个类似于魔塔的iPhone游戏第一部分(上)
    用python实现一个socket echo程序 && tcp socket的几个关闭状态
    IOS编程浅蓝教程(二) HelloWrld! 建立你的第一个iPhone应用程序
    如何直接强制客户端刷新.js文件
    (WCF的实现、控制台托管与.net平台的调用)
    关于批量数据更新的问题(C#高性能)
    不容错过的window8 metro UI风格的web资源
  • 原文地址:https://www.cnblogs.com/hh2737/p/9140201.html
Copyright © 2020-2023  润新知