从定义和分类来看,它是一个开源的分布式数据库系统,是一个实现了MySQL协议的服务器,前端用户能够把它看做是一个数据库代理,用MySQL客户端工具和命令行访问,而其后端能够用MySQL原生协议与多个MySQL服务器通讯,也能够用JDBC协议与大多数主流数据库服务器通讯,其核心功能是分表分库,即将一个大表水平分割为N个小表,存储在后端MySQL服务器里或者其余数据库里。前端
MyCat发展到目前的版本,已经不是一个单纯的MySQL代理了,它的后端能够支持MySQL、SQL Server、Oracle、DB二、PostgreSQL等主流数据库,也支持MongoDB这种新型NoSQL方式的存储,将来还会支持更多类型的存储。而在最终用户看来,不管是那种存储方式,在MyCat里,都是一个传统的数据库表,支持标准的SQL语句进行数据的操做,这样一来,对前端业务系统来讲,能够大幅下降开发难度,提高开发速度node
1. 链接过多问题,能够经过MyCat统一管理全部的数据源,后端数据库集群对前端应用程序透明算法
对比
数据库
2. 首创的ER关系分片,解决E-R分片难处理问题,存在关联关系的父子表在数据插入的过程当中,子表会被MyCat路由到其相关父表记录的节点上,从而父子表的Join查询能够下推到各个数据库节点上完成,这是最高效的跨节点Join处理技术,也是MyCat独创。后端
3. 采用全局分片技术,每一个节点同时并发插入和更新数据,每一个节点均可以读取数据,提高读性能的同时,也解决跨节点Join的效率。缓存
4. 经过人工智能的catlet支持跨分片复杂SQL实现以及存储过程支持等服务器
图6 Mycat支持基于MySQL主从复制状态的高级读写分离控制机制并发
MyCat技术原理运维
MyCat技术原理中最重要的一个动词是“拦截”,它拦截了用户发送过来的SQL语句,首先对SQL语句作了一些特定的分析:如分片分析、路由分析、读写分离分析、缓存分析等,而后将此SQL发日后端的真实数据库,并将返回的结果作适当的处理,最终再返回给用户。分布式
图7 Orders被分为三个分片datanode
如图7所示,Orders表被分为三个分片datanode(简称dn),这三个分片是分布在两台MySQL Server上(DataHost),即datanode=database@datahost方式,所以你能够用一台到N台服务器来分片,分片规则为(sharding rule)典型的字符串枚举分片规则,一个规则的定义是分片字段(sharding column)+分片函数(rule function),这里的分片字段为prov而分片函数为字符串枚举方式。当MyCat收到一个SQL时,会先解析这个SQL,查找涉及到的表,而后看此表的定义,若是有分片规则,则获取到SQL里分片字段的值,并匹配分片函数,获得该SQL对应的分片列表,而后将SQL发往这些分片去执行,最后收集和处理全部分片返回的结果数据,并输出到客户端。以select * from Orders where prov=?语句为例,查到prov=wuhan,按照分片函数,wuhan返回dn1,因而SQL就发给了MySQL1,去取DB1上的查询结果,并返回给用户。若是上述SQL改成select * from Orders where prov in (‘wuhan’,‘beijing’),那么,SQL就会发给MySQL1与MySQL2去执行,而后结果集合并后输出给用户。但一般业务中咱们的SQL会有Order By以及Limit翻页语法,此时就涉及到结果集在MyCat端的二次处理,这部分的代码也比较复杂,而最复杂的则属两个表的Jion问题,为此,MyCat提出了创新性的ER分片、全局表、HBT(Human Brain Tech)人工智能的Catlet等。
MyCat下一步规划
强化分布式数据库中间件的面的功能,使之具有丰富的插件、强大的数据库智能优化功能、全面的系统监控能力、以及方便的数据运维工具,实如今线数据扩容、迁移等高级功能。
进一步挺进大数据计算领域,深度结合Spark Stream和Storm等分布式实时流引擎,可以完成快速的巨表关联、排序、分组聚合等OLAP方向的能力,并集成一些热门经常使用的实时分析算法,让工程师以及DBA们更容易用MyCat实现一些高级数据分析处理功能。