千家信息网

Mycat中如何配置schmea.xml

发表于:2024-11-30 作者:千家信息网编辑
千家信息网最后更新 2024年11月30日,这篇文章主要为大家展示了"Mycat中如何配置schmea.xml",内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下"Mycat中如何配置schmea.xml"
千家信息网最后更新 2024年11月30日Mycat中如何配置schmea.xml

这篇文章主要为大家展示了"Mycat中如何配置schmea.xml",内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下"Mycat中如何配置schmea.xml"这篇文章吧。

1.基本环境

dn1localhost1192.168.6.121:3306---writehost
192.168.6.121:3307---readhost
192.168.6.121:3308
dn2locahost2192.168.6.120:3306---writehost
192.168.6.120:3307---readhost
192.168.6.121:3308
dn3localhost3192.168.6.119:3306---writehost
192.168.6.119:3307---readhost
192.168.6.119:3308



2.schemal配置





  1. dataNode="dn1"> ---默认数据节点,若新建一张表company2未在配置文件中配置,则默认建立在dn1数据节点上(私有表)


  2. ---分片表,根据对应的分片规则 分片到各个物理节点上




  3. ---全局表,每个节点上都有的表

  4. ---等同于company

  5. ----等同于company2



  6. rule="mod-long" />


  7. rule="sharding-by-intfile" />

  8. rule="sharding-by-intfile">

  9. parentKey="id">

  10. parentKey="id" />


  11. parentKey="id" />






    1. ----数据节点对应的localhost以及真实的数据库






    2. balance="2" ------localhosts对应的连接配置信息

    3. writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">

    4. select user()


    5. password="ESBecs00">







    6. writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">

    7. select user()


    8. password="ESBecs00">






    9. writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">

    10. select user()


    11. password="ESBecs00">





    12. ......未完待续


    全局表的查询有负载均衡的作用

    1. mysql> select * from company; ----本应该是相同的数据,改为不同的数据是为了展示负载均衡的效果

    2. +----+-------------+

    3. | id | name |

    4. +----+-------------+

    5. | 1 | this is 119 |

    6. +----+-------------+

    7. 1 row in set (0.01 sec)


    8. mysql> select * from company;

    9. +----+-------------+

    10. | id | name |

    11. +----+-------------+

    12. | 1 | this is 120 |

    13. +----+-------------+

    14. 1 row in set (0.01 sec)


    15. mysql> select * from company;

    16. +----+-------------+

    17. | id | name |

    18. +----+-------------+

    19. | 1 | this is 121 |

    20. +----+-------------+

    21. 1 row in set (0.00 sec)



    分片表和私有表如果不在一哥节点上就联合查不到了!

    uc分片表,4101在第二个节点上
    act为私有表,4101在第一个节点上
    select * from uc_coupon where COUPON_ID=4101 ; --单独查,是有的
    select * from act_vote_info where id=4101; ---单独查,是有的
    select a.*,b.* from uc_coupon a,act_vote_info b where a.COUPON_ID=b.id and b.id=4101 limit 1; --联合查,查不到了,因为跨节点了!
    举例:

    1. mysql> select * from order2; ---分片表

    2. +----+----------+---------+---------------------+

    3. | ID | PROVINCE | SN | CREATE_TIME |

    4. +----+----------+---------+---------------------+

    5. | 2 | shanghai | 2BJ0001 | 2017-05-09 15:01:33 | ---节点2上

    6. | 1 | beijing | 2BJ0001 | 2017-04-23 21:48:08 | ---节点1上

    7. | 3 | tianjin | 2BJ0001 | 2017-05-09 15:01:45 |

    8. +----+----------+---------+---------------------+

    9. 3 rows in set (0.00 sec)


    10. mysql> select * from tt; ---私有表 节点1上

    11. +------+------------+

    12. | id | name |

    13. +------+------------+

    14. | 2 | zhangsanli |

    15. | 1 | 12314 |

    16. +------+------------+

    17. 2 rows in set (0.00 sec)


    18. mysql> select a.*,b.* from tt a,order2 b where a.id=b.ID and b.id=2; -----2和私有表不在一个节点上,查不出来

    19. Empty set (0.00 sec)


    20. mysql> select a.*,b.* from tt a,order2 b where a.id=b.ID and b.id=1; -----1和私有表在一个节点上,所以查的出来

    21. +------+-------+----+----------+---------+---------------------+

    22. | id | name | ID | PROVINCE | SN | CREATE_TIME |

    23. +------+-------+----+----------+---------+---------------------+

    24. | 1 | 12314 | 1 | beijing | 2BJ0001 | 2017-04-23 21:48:08 |

    25. +------+-------+----+----------+---------+---------------------+

    26. 1 row in set (0.00 sec)


    同理:

    分片表和分片表条件数据如果不在一个节点上就联合查不到了!

    1. mysql> select a.* ,b.* from order2 a,order3 b where a.id=b.id and a.id=2; --单独都是有数据的,但是id相等的分在不同的节点上,还是不能跨节点

    2. Empty set (0.00 sec)

    mysql> select * from order2;
    +----+----------+---------+---------------------+
    | ID | PROVINCE | SN | CREATE_TIME |
    +----+----------+---------+---------------------+
    | 2 | shanghai | 2BJ0001 | 2017-05-09 15:01:33 |
    | 1 | beijing | 2BJ0001 | 2017-04-23 21:48:08 |
    | 3 | tianjing | 2BJ0001 | 2017-05-15 14:52:17 |
    +----+----------+---------+---------------------+
    3 rows in set (0.00 sec)


    mysql> select * from order3;
    +----+----------+---------+---------------------+
    | ID | PROVINCE | SN | CREATE_TIME |
    +----+----------+---------+---------------------+
    | 2 | beijing | 2BJ0001 | 2017-05-15 14:56:27 |
    | 1 | tianjing | 2BJ0001 | 2017-05-15 14:56:35 |
    | 3 | shanghai | 2BJ0001 | 2017-05-15 14:56:17 |
    +----+----------+---------+---------------------+
    3 rows in set (0.00 sec)


    解决办法:注解,详细用法见文档

    1. mysql> /*!mycat:catlet=demo.catlets.ShareJoin */ select b.sn,b.CREATE_TIME,a.CREATE_TIME from order2 a,order3 b where a.id=b.id;

    2. +---------------------+----+---------+---------------------+

    3. | CREATE_TIME | id | sn | CREATE_TIME |

    4. +---------------------+----+---------+---------------------+

    5. | 2017-04-23 21:48:08 | 1 | 2BJ0001 | 2017-05-15 14:56:35 |

    6. | 2017-05-09 15:01:33 | 2 | 2BJ0001 | 2017-05-15 14:56:27 |

    7. | 2017-05-15 14:52:17 | 3 | 2BJ0001 | 2017-05-15 14:56:17 |

    8. +---------------------+----+---------+---------------------+

以上是"Mycat中如何配置schmea.xml"这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注行业资讯频道!

0