MyCat数据库中间件 - 分库

Posted xingrui

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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. 事务处理复杂。





























以上是关于MyCat数据库中间件 - 分库的主要内容,如果未能解决你的问题,请参考以下文章

MySql分库分表中间件-MyCat

MySql分库分表中间件-MyCat

转:开源数据库中间件MyCat实现数据库读写分离分表分库指南

Mysql系列五:数据库分库分表中间件mycat的安装和mycat配置详解

[下期预告]Mycat数据库分库分表中间件

白嫖版-MyCat-分布式数据库中间件,分库分表,实战项目视频