## myscat是什么 数据库分库分表中间件。 详细参考[mycat官网链接](http://www.mycat.org.cn/) ## 分库分表无中间件模式 ![](https://img.kancloud.cn/a5/41/a541311cfd7f702b2d8a9c0b2c5fb90c_540x533.png) 在每个应用程序模块中配置管理自己需要的一个(或者多个)数据源,直接访问各个数据库,在模块内完成数据的整合; **优点:** 相对简单,无性能损耗。 **缺点:** 不够通用,数据库连接的处理复杂,对业务不够透明,处理复杂 ## 分库分表中间件Mycat模式 ![](https://img.kancloud.cn/d2/1f/d21f2fce3ad1b04decaac0be143e5655_842x531.png) 通过中间代理层(Mycat)来统一管理所有的数据源,后端数据库集群对前端应用程序透明; **优点:** 通用,对应用透明,改造少 **缺点:** 实现难度大,有二次转发性能损失。单机损失30% 左右 # mycat中间件运行原理 ![](https://img.kancloud.cn/97/83/97833ecb64667f99324b7e6df34450de_755x496.png) 1. application提交sql后, 经过sql解析, 优化, 路由, 解析为对应的sql指令, 交给具体的sql机器执行 2. 各节点的计算结果进行结果集合并 3. manager负责master的集群管理, 内存管理等 ## Mycat技术特点 * 遵守Mysql原生协议,跨语言,跨数据库的通用中间件代理 * 基于心跳的自动故障切换,支持读写分离,支持MySQL一双主多从,以及一主多从 * 有效管理数据源连接,基于数据分库,而不是分表的模式 * 基于Nio实现,有效管理线程,高并发问题 * 支持数据的多片自动路由与聚合,支持sum,count,max等常用的聚合函数 * 支持2表join,甚至基于caltlet的多表join * 支持通过全局表,ER关系的分片策略,实现了高效的多表join查询 * 支持多租户方案。-支持分布式事务(弱xa) * 支持全局序列号,解决分布式下的主键生成问题 * 分片规则丰富,插件化开发,易于扩展 * 强大的web,命令行监控 * 支持前端作为mysq通用代理,后端JDBC方式支持Oracle、DB2、SQL Server、mongodb、巨杉 * 集群基于ZooKeeper管理,在线升级,扩容,智能优化,大数据处理(2.0开发版)