zoukankan      html  css  js  c++  java
  • MyCat数据库中间件

    MyCat

      MyCat用于解耦分布式数据库与java,比如分库分表以后,需要查询某条数据时,需要java根据需要查的数据先计算去哪个库查,然而有了Mycat就不用自己计算怎么存储,怎么查询了。MyCat把物理上分开的数据库,看成逻辑上只有一个库。java只需要针对MyCat编码即可。数据库中间件就是位于java和数据中间位置的代码,中间层是一种艺术手法,在计算机中很多地方都有用到,例如java实现跨平台,采用中间层JVM。

      MyCat的前身是阿里的cobar.

    能做什么?

      1、读写分离(前提主从复制)

      2、数据分片(垂直拆分:根据业务把不同表拆到不同库、    水平拆分:把同一表拆到不同库、   垂直+水平拆分)

      3、多数据源整合

    原理:拦截。拦截sql,分析sql,转发sql到指定数据库。

    MyCat分库:先准备空白库,例如两个主机上两个空白的order库,然后配置mycat的schema.xml,设置哪个表位于哪个库,最后启动mycat,在mycat上执行建表语句,响应的表会自动根据规则到指定的库创建。

    举例:有四张表,要求customer进入linux上的库,其余三个在windos上的库。

    #客户表 rows:20万
    CREATE TABLE customer(
    id INT AUTO_INCREMENT,
    NAME VARCHAR(200),
    PRIMARY KEY(id)
    );

    #订单表 rows:600万
    CREATE TABLE orders(
    id INT AUTO_INCREMENT,
    order_type INT,
    customer_id INT,
    amount DECIMAL(10,2),
    PRIMARY KEY(id)
    );

    #订单详细表 rows:600万
    CREATE TABLE orders_detail(
    id INT AUTO_INCREMENT,
    detail VARCHAR(2000),
    order_id INT,
    PRIMARY KEY(id)
    );

    #订单状态字典表 rows:20
    CREATE TABLE dict_order_type(
    id INT AUTO_INCREMENT,
    order_type VARCHAR(200),
    PRIMARY KEY(id)
    );

    配置:cd /usr/local/mycat/conf

      vim shcema.xml

     

      然后,创建数据库;启动mycat,在mycat下执行建表语句。

      结果:

        

        windos下

        

     为什么把customer分出去,原因就是下单需要登录系统,登录以后客户信息都存于session上,在获取时直接从session中获取。

    优点:
            1. 拆分后业务清晰,拆分规则明确。
            2. 系统之间整合或扩展容易。
            3. 数据维护简单。
     
    缺点:
            1. 部分业务表无法join,只能通过接口方式解决,提高了系统复杂度。
            2. 受每种业务不同的限制存在单库性能瓶颈,不易数据扩展跟性能提高。
            3. 事务处理复杂。
  • 相关阅读:
    python---RabbitMQ
    Apicloud学习第四天
    Apicloud学习第三天——获取云数据库的数据方法
    APICloud学习第二天——操作云数据库
    font-spider问题【已解决】
    Apicloud学习第一天
    sass补充(2019-3-9)
    sublime中编译的sass如何改变css输出风格?【这里有答案】
    SEO总结
    Sass学习第一天
  • 原文地址:https://www.cnblogs.com/xingrui/p/10313331.html
Copyright © 2011-2022 走看看