美文网首页
Mycat分库--全局表实践

Mycat分库--全局表实践

作者: sknfie | 来源:发表于2020-08-21 11:27 被阅读0次

    概述

    MyCAT 定义了一种特殊的表,称为“全局表”,全局表具有以下特性:
    • 全局表的插入、更新操作会实时在所有节点上执行,保持各个分片的数据一致性
    • 全局表的查询操作,只在一个节点获取
    • 全局表可以跟任何一个表迕行 JOIN 操作
    将字典表或者符合字典表特性的一些表定义为全局表,则仅另外一个方面,很好的解决了数据 JOIN的难题。

    配置

    其他跟上次的取模分片保持一致,schema.xml修改如下:

    <schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100">
        <table name="t_goods" primaryKey="id" type="global" dataNode="node1,node2" /> //全局表
        <table name="user" primaryKey="id"  dataNode="node1" />
        <table name="t_order" primaryKey="id" dataNode="node1,node2" rule="rule1" />
    </schema>
    
    <dataNode name="node1" dataHost="host1" database="db1" />
    <dataNode name="node2" dataHost="host2" database="db2" />
    
    <!-- 物理机的 url -->
    <dataHost name="host1" maxCon="1000" minCon="10" balance="0" writeType="0" dbType="mysql" dbDriver="native">
        <heartbeat>select user()</heartbeat>
        <writeHost host="server1" url="192.168.201.33:3306" user="root" password="123456"/>
    </dataHost>
    <dataHost name="host2" maxCon="1000" minCon="10" balance="0" writeType="0" dbType="mysql" dbDriver="native">
        <heartbeat>select user()</heartbeat>
        <writeHost host="server2" url="192.168.201.35:3306" user="root" password="123456"/>
    </dataHost>
    

    创建数据表

    CREATE TABLE t_goods (
    `id` INT(11) NOT NULL AUTO_INCREMENT,
    `img` VARCHAR(250) NOT NULL DEFAULT '' COMMENT '图片',
    `name` VARCHAR(250) NOT NULL DEFAULT '' COMMENT '分类名称',
    `is_recommend` CHAR(1) NOT NULL DEFAULT '0' COMMENT '0:不推荐 1:推荐(推荐时修改utime时间)',
    `sort` INT(11) NOT NULL DEFAULT '1' COMMENT '排序字段',
    PRIMARY KEY (`id`)
    ) ENGINE=INNODB AUTO_INCREMENT=23 DEFAULT CHARSET=utf8 COMMENT='商品分类表';
    

    启动并测试

    ./mycat start
    mysql -uuser -puser -P 8066 -h 192.168.201.34 -DTESTDB
    //插入数据
    INSERT INTO t_goods (img,NAME,is_recommend,sort)VALUES('1.jpg','衣服','1',10);
    INSERT INTO t_goods (img,NAME,is_recommend,sort)VALUES('2.jpg','化妆品','1',20);
    INSERT INTO t_goods (img,NAME,is_recommend,sort)VALUES('3.jpg','手机','1',30);
    INSERT INTO t_goods (img,NAME,is_recommend,sort)VALUES('4.jpg','电脑','1',40);
    INSERT INTO t_goods (img,NAME,is_recommend,sort)VALUES('5.jpg','玩具','1',50);
    
    //查看
    MySQL [TESTDB]> explain select * from t_goods;
    +-----------+---------------------------------+
    | DATA_NODE | SQL                             |
    +-----------+---------------------------------+
    | node2     | SELECT * FROM t_goods LIMIT 100 |
    +-----------+---------------------------------+
    1 row in set (0.01 sec)
    
    MySQL [TESTDB]> explain select * from t_goods;
    +-----------+---------------------------------+
    | DATA_NODE | SQL                             |
    +-----------+---------------------------------+
    | node1     | SELECT * FROM t_goods LIMIT 100 |
    +-----------+---------------------------------+
    1 row in set (0.00 sec)
    

    上述可知,是在两个节点都有数据,查询时只在一个节点获取数据。

    mysql -uroot -p123456 -h 192.168.201.33
    MariaDB [db1]> select * from t_goods;
    +----+-------+-----------+--------------+------+
    | id | img   | name      | is_recommend | sort |
    +----+-------+-----------+--------------+------+
    | 23 | 1.jpg | 衣服      | 1            |   10 |
    | 24 | 2.jpg | 化妆品    | 1            |   20 |
    | 25 | 3.jpg | 手机      | 1            |   30 |
    | 26 | 4.jpg | 电脑      | 1            |   40 |
    | 27 | 5.jpg | 玩具      | 1            |   50 |
    +----+-------+-----------+--------------+------+
    5 rows in set (0.00 sec)
    
    mysql -uroot -p123456 -h 192.168.201.35
    MariaDB [db2]> select * from t_goods;
    +----+-------+-----------+--------------+------+
    | id | img   | name      | is_recommend | sort |
    +----+-------+-----------+--------------+------+
    | 23 | 1.jpg | 衣服      | 1            |   10 |
    | 24 | 2.jpg | 化妆品    | 1            |   20 |
    | 25 | 3.jpg | 手机      | 1            |   30 |
    | 26 | 4.jpg | 电脑      | 1            |   40 |
    | 27 | 5.jpg | 玩具      | 1            |   50 |
    +----+-------+-----------+--------------+------+
    5 rows in set (0.00 sec)
    

    相关文章

      网友评论

          本文标题:Mycat分库--全局表实践

          本文链接:https://www.haomeiwen.com/subject/bgkujktx.html