Mycat 是一个开源的分布式数据库系统,但是由于真正的数据库需要存储引擎,而 Mycat 并没有存储引擎,所以并不是完全意义的分布式数据库系统;
MyCat是目前最流行的基于Java语言编写的数据库中间件,也可以理解为是数据库代理。在架构体系中是位于数据库和应用层之间的一个组件,并且对于应用层是透明的,即数据库 感受不到mycat的存在,认为是直接连接的mysql数据库(实际上是连接的mycat,mycat实现了mysql的原生协议);
MyCat是基于阿里开源的Cobar产品而研发,Cobar的稳定性、可靠性、优秀的架构和性能以及众多成熟的使用案例使得MyCat变得非常的强大;
mycat的三大功能:分库分表、读写分离、主从切换。
特性
-
优化查询计划
- 定制Calcite分布式查询引擎、编译SQL到关系代数表达式、规则优化引擎和代价优化引擎、生成物理执行计划、支持逻辑视图
-
SQL支持语法
- 任意跨库跨表join查询、支持跨库跨表非关联子查询、支持跨库跨表关联子查询、支持跨库跨表Window语法、支持全局二级索引、有限支持存储过程、支持可视化配置
-
高性能
- 支持并行拉取结果集、支持自动调动后端结果集、支持多种路由注释、优化器注释
-
优化
- 对请求的sql进行参数化、缓存物理执行计划、相同参数化sql的请求、将免去一些分析优化过程
-
支持原生协议
- 前端协议MySQL网络通信协议、MySQL原生网络协议异步非阻塞、JDBC接口支持多种数据库、生成物理执行计划
-
支持定制任意多字段路由
- 提供分片算法接口、优化器简化过滤条件、分片信息与关系表达式结合生成执行sql
实现原理
MyCat主要是通过对SQL的拦截,然后经过一定规则的分片解析、路由分析、读写分离分析、缓存分析等,然后将SQL发给后端真实的数据块,并将返回的结果做适当处理返回给客户端。
应用场景
- 数据库读写分离,此时配置最为简单,支持读写分离,主从切换
- 数据库分库分表,这也是mycat的核心功能之一,可以解决数据库分库分表之后的数据插入和查询问题
- 多租户应用,每个应用一个数据库,但程序只需连接mycat,程序不改变,实现多租户化
- 海量数据的存储及实时查询,使用mycat是一种简单有效的方案
- 替代Hbase,分析大数据