## **数据库中间件MyCat**
## MyCat是什么
数据库分库分表中间件。
详细参考[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/69/d6/69d60a7ad47aef017c738c31a399b22c_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开发版)
- PHP篇
- 函数传值和传引用的区别
- 简述PHP的垃圾回收机制
- 简述CGI、FAST-CGI、PHP-FPM的关系
- 常见正则表达式
- 多进程写文件,如何保证都写成功
- php支持回调函数的数组函数
- MySQL篇
- MySQL的两种存储引擎区别
- 事务的四大特性
- 数据库事务隔离级别
- 什么是索引
- 索引有哪些数据结构,优缺点
- 索引的一些潜规则
- SQL的优化方案
- 简述MySQL的锁机制
- 死锁是怎么产生的?怎么解决?
- 简述MySQL的主从复制过程,延迟问题怎么解决
- 分布式事务的解决方案
- 数据库中间件MyCat
- Linux篇
- Linux常用命令
- 对日志文件的IP出现的次数进行统计,并显示次数最多的前5名
- WEB篇
- 跨域是怎么产生的,如何解决跨域
- Redis篇
- redis介绍
- redis和memcached区别
- redis的持久化方案
- 缓存穿透、击穿、雪崩、预热、更新、降级
- 网络篇
- 计算机网络体系结构
- 简述TCP的三次握手、四次挥手过程
- UDP、TCP 区别,适用场景
- HTTP常见状态码含义
- 设计模式篇
- 单例模式
- 简单工厂模式
- 抽象工厂模式
- 观察者模式
- 策略模式
- 注册模式
- 适配器模式
- 安全篇
- 跨站脚本攻击(XSS)
- 跨站点请求伪造(CSRF)
- SQL 注入
- 应用层拒绝服务攻击
- PHP安全
- 运维篇
- docker面试题
- 消息队列篇
- 架构篇
- 数据结构与算法篇