目录
1.MyCAT2简介
1.1 什么是MyCAT
MyCAT是目前最流行的分布式数据库中间插件,是一个开源的分布式数据库系统,是一个实现了MySQL协议的服务器。前端用户可以把它看作一个数据库代理,用MySQL客户端工具和命令行访问,其后端可以用MySQL原生协议与多个MySQL服务器通信,也可以用JDBC协议与大多数主流数据库服务器通信,其核心功能是分表分库,即将一个大表水平分割为N个小表,存储在后端MySQL服务器里或者其他数据库里。
MyCAT发展到目前,已经不是一个单纯的MySQL代理了,它的后端可以支持MySQL、SQL Server、Oracle、DB2、PostgreSQL等主流数据库,也支持MongoDB这种新型NoSQL方式的存储。未来,它还会支持更多类型的存储。
不过,无论是哪种存储方式,在最终用户看,MyCAT里都是一个传统的数据库表,支持标准的SQL语句进行数据的操作,这样一来,对前端业务系统来说,可以大幅降低开发难度,提升开发速度。
更多解释见官网: | MYCAT官方网站—中国开源分布式数据库中间件
项目地址:源码地址
Mycat2: Mycat2是Mycat社区开发的一款分布式关系型数据库(中间件)。它支持分布式SQL查询,兼容MySQL通信协议,以Java生态支持多种后端数据库,通过数据分片提高数据查询处理能力
1.2 为什么使用MyCAT
随着互联网的发展,数据的量级也是呈指数的增长,从GB到TB到PB,操作数据也是愈加的困难,传统的关系性数据库已经无法满足快速查询与插入数据的需求。
而NoSQL的出现暂时解决了这一危机。
NoSQL通过降低数据的安全性,减少对事务的支持,减少对复杂查询的支持,来提升性能。 但是,NoSQL存在无法满足某些使用场景的情况,比如,有些使用场景绝对要有事务与安全指标。这时NoSQL肯定无法满足。
所以,我们还是需要使用关系型数据库。
那么,如何使用关系型数据库解决海量存储的问题呢?此时就需要做数据库集群,为了提高查询性能将一个数据库的数据分散到不同的数据库中存储,为应对该问题,MyCAT 就出现了。
我们来总结一下MyCAT的作用:
1)能满足数据库数据大量存储;
2)提高了查询性能;
3)实现读写分离,分库分表。
同时,MyCAT还可以解决如下问题。
1)解决表的容量问题:MySQL的表最大存储多少数据?500W条。
2)解决表查询的性能问题?我的表里面的数据非常多,导致我查询很慢?
3)解决表的DML的性能问题?
4)解决MySQL挂了的问题。
那么,MyCAT是怎么解决上述问题的呢?我们接着往下看。
1.3 MyCAT解决问题的思路
1.3.1 容量
1.3.2 查询速度
最快也是Log(n),你加什么索引都不行。
1.3.3 写入问题
1.4 数据库中间件对比
-
Cobar属于阿里B2B事业群,始于2008年,在阿里服役3年多,接管3000+个MySQL数据库的schema,集群日处理在线SQL请求50亿次以上。由于Cobar发起人的离职,Cobar停止维护。
-
Mycat是开源社区在阿里cobar基础上进行二次开发,解决了cobar存在的问题,并且加入了许多新的功能在其中。青出于蓝而胜于蓝。
-
OneProxy基于MySQL官方的proxy思想利用c进行开发的,OneProxy是一款商业收费的中间件。舍弃了一些功能,专注在性能和稳定性上。
-
kingshard由小团队用go语言开发,还需要发展,需要不断完善。
-
Vitess是Youtube生产在使用,架构很复杂。不支持MySQL原生协议,使用需要大量改造成本。
-
Atlas是360团队基于mysql proxy改写,功能还需完善,高并发下不稳定。
-
MaxScale是mariadb(MySQL原作者维护的一个版本) 研发的中间件
-
MySQLRoute是MySQL官方Oracle公司发布的中间件
1.5 MyCAT和MySQL的区别
我们可以把上层看作是对下层的抽象,例如操作系统是对各类计算机硬件的抽象。那么我们什么时候需要抽象?
假设一个项目只需要一个人完成时,我们不需要Leader,但是当需要几十人完成时,就应该有一个管理者,发挥沟通协调等作用,这个管理者对于他的上层来说就是对项目组的抽象。
同样的,当我们的应用只需要一台数据库服务器时,我们并不需要MyCAT,如果你需要分库甚至分表,这时候应用要面对很多个数据库时,这时,就需要对数据库层做一个抽象,来管理这些数据库,最上面的应用只需要面对一个数据库层的抽象或者说数据库中间件就好了,这就是MyCAT的核心作用。
所以你可以这样理解:数据库是对底层存储文件的抽象,而MyCAT是对数据库的抽象。
1.6 Mycat1.x 与 Mycat2 功能对比
1、1.x与2.0功能对比图
功能 | 1.6 | 2 |
---|---|---|
多语句 | 不支持 | 支持 |
blob值 | 支持一部分 | 支持 |
全局二级索引 | 不支持 | 支持 |
任意跨库join(包含复杂查询) | catlet支持 | 支持 |
分片表与分片表JOIN查询 | ER表支持 | 支持 |
关联子查询 | 不支持 | 支持一部分 |
分库同时分表 | 不支持< |