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. 事务处理复杂。
原文地址:https://www.cnblogs.com/xingrui/p/10313331.html