MyCat

Java 语言编写的 MySQL 数据库网络协议的开源中间件

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,分析大数据