zoukankan      html  css  js  c++  java
  • MyCat子表

    1、什么是子表,

    比如购买商品的订单表,有订单表(包括订单的主题信息,订单编号,订单收货地址,...),订单OrderItem(商品Id,商品名称,金额,...).

    这里的订单OrderItem就是子表

    问题场景:

    订单表水平切分:

    根据订单编号取模插入,模为0,插入第一个数据库; 模为1,插入第二个数据库。

    此时订单明细表,应该如何切分数据呢?

    如果也使用取模分片,则订单Item分布在两个数据库中。

    根据订单Id进行查询,订单信息和订单Item信息可能出现夸库的情况。

    MyCat子表就是为了解决这个问题,保证一条记录的Order和OrderItem保存在一个分片库中,查询的时候就不需要夸库关联了。

    2、子表配置

    配置schema.xml

    childTable标签,定义分片子表

    name属性,子表名称

    joinKey属性,标志子表中的列,用于与父表做关联。

    parentKey标签,标志父表中的列,与joinKey对应。

    needAddLimit属性,同table标签

    3、创建表

    在192.168.127.129中创建order表

      

    在192.168.127.129中创建order_item表

    同理,在192.168.127.134中创建order表和order_item表

    4、配置schema.xml

     auto-sharding-long是根据id进行分片的。

    rule.xml

     重启mycat或者重新加载配置  reload @@config_all

    5、在Mycat中插入数据

    1)  往order表插入数据

    INSERT INTO  `order` (`id`,`total_amount`,`order_status`) VALUES('1', '100', '1') ;

    可以看到数据插入到了节点1的192.168.127.134这台

    往order_item表插入数据。这里的order_id和order表的id保持一致。

    INSERT INTO `order_item` (`id`,`order_id`, `product_name`,`num`) VALUES('1','1','西瓜','5') ;

    则可以看到节点1的192.168.127.134中已经有了这条数据。

    2) 插入第二条数据

    INSERT INTO `order` (`id`,`total_amount`,`order_status`) VALUES('6000000', '100', '1') ;
    INSERT INTO `order_item` (`id`,`order_id`, `product_name`,`num`) VALUES('2','6000000','西瓜','5') ;

    可以发现这两条数据都在节点2的192.168.127.129中。

    作者:Work Hard Work Smart
    出处:http://www.cnblogs.com/linlf03/
    欢迎任何形式的转载,未经作者同意,请保留此段声明!

  • 相关阅读:
    关于多态的一些看法
    接口interface
    抽象修饰符abstract
    关于final关键字
    大数据常见面试算法题复习
    pytorch安装
    mysql
    安装linux子系统, 如何用win10 里面的linux子系统来进行通信
    linux 和 主机通信的另类方法
    python cgi编程
  • 原文地址:https://www.cnblogs.com/linlf03/p/13969527.html
Copyright © 2011-2022 走看看