zoukankan      html  css  js  c++  java
  • mycat

    相对于垂直拆分的区别是:垂直拆分是把不同的表拆到不同的数据库中,而水平拆分是把同一个表拆到不同的数据库中。水平拆分不是将表的数据做分类,而是按照某个字段的某种规则来分散到多个库之中,每个表中包含一部分数据。

    例如,分库中的举例,orders表水平分到order_win和order_linux两个库中。

      配置mycat的schema.xml

        

      确认两个库中都有orders表,没有就新建下。

      配置rule, vim /usr/local/mycat/conf/rule.xml

        

        

      重启mycat,在mycat中执行测试插入数据。

        insert into orders(id,order_type,customer_id,amount)values(1,1,1,1000.00);
        insert into orders(id,order_type,customer_id,amount)values(2,1,2,1000.00);
        insert into orders(id,order_type,customer_id,amount)values(3,1,3,1000.00);
        insert into orders(id,order_type,customer_id,amount)values(4,1,4,1000.00);
        insert into orders(id,order_type,customer_id,amount)values(5,1,5,1000.00);
        insert into orders(id,order_type,customer_id,amount)values(6,1,6,1000.00);

      结果:两个库中的orders各有一部分数据。是根据customer_id通过mod-long算法,计算出要插入哪个库的哪个orders表。

      此时有个问题,orders表已经水平分表,然而orders_detail表并没有;此时如果做这两个表的关联查询会报错,因为部分数据不能找到表。

      解决思路:把orders_detail也水平分表,但是要求实现订单详细记录要和订单记录在同一库中。

        修改:schema.xml,并建立相关表,我的是在orders_linux下创建order_detail。

        

        重启mycat,执行。

          insert into orders_detail(id,detail,order_id)values(1,"球鞋一双",1);

          insert into orders_detail(id,detail,order_id)values(2,"牙膏1",2);
          insert into orders_detail(id,detail,order_id)values(3,"牙刷2",2);

          insert into orders_detail(id,detail,order_id)values(4,"T恤",3);
          insert into orders_detail(id,detail,order_id)values(5,"手套",3);
          insert into orders_detail(id,detail,order_id)values(6,"帽子",3);


          insert into orders_detail(id,detail,order_id)values(7,"金克斯",4);
          insert into orders_detail(id,detail,order_id)values(8,"卢锡安",4);


          insert into orders_detail(id,detail,order_id)values(9,"诺克",5);

          insert into orders_detail(id,detail,order_id)values(10,"盲僧",6);
          insert into orders_detail(id,detail,order_id)values(11,"狼人",6);
          insert into orders_detail(id,detail,order_id)values(12,"赵信",6);

        结果:有关此订单的详细记录就会进入同一个库中。

      此时订单有状态,描述状态的表,在每个库中都有用,所以需要每个用到的库都保留一份。也称作全局表。

        》对于全局表,每个库中都有一份,mycat写操作时所有的库都要同步更新;所以,全局表一般不能是大数据表或者频繁修改的表。一般为字典表,系统表为宜。

        全局表配置如下:

          

          新建dict_order_type表,重启mycat,测试插入数据。

            insert into dict_order_type values(101,'付款');

            insert into dict_order_type values(101,'发货');

          在mycat执行后,会发现两个库中的全局表dict_order_type,都会插入数据。注意id需要使用从序列表读出的数据。

            insert into orders(id,order_type,customer_id,amount)values(next value for MYCATSEQ_ORDERS,1,1,1000.00);

  • 相关阅读:
    Java 面向对象_继承
    Java 面向对象
    使用 pykafka 进行消费
    oracle 的分页、截断查询
    Day03
    Day02 计算机的组成与编程语言
    Day01 MarkDown的使用
    Java方法的重点
    Scanner的小细节
    Java包机制和Javadoc的使用
  • 原文地址:https://www.cnblogs.com/xingrui/p/10313391.html
Copyright © 2011-2022 走看看