1.什么是MyCat?
Mycat是数据库中间件,所谓中间件,是一类连接软件组件和应用的计算机软件,以便软件各部件之间的通信。
例如 tomcat,web的中间件。而数据库中间件是连接Java应用程序和数据库中间的软件。
- 为什么使用MyCat的?
- Java与数据库的紧耦合
- 高访问量高并发对数据库的压力
- 读写请求数据不一致
我们现在普遍的Java应用程序都是直接连接了MySQL软件进行读写操作,也就是我们在Java中的配置文件等定义了mysql的数据源,直接连接到了我们的mysql软件,但是当某些情况下我们可能需要用到了多个数据库,这个时候我们可能就需要配多个数据源去连接我们的多个数据库,这个时候我们进行sql操作的时候就会很麻烦,因为Java与数据库有了一个紧密的耦合度,但是如果我们在Java应用程序与mysql中间使用了mycat,我们只需要访问mycat就可以了,至于数据源等问题,mycat会直接帮我们搞定。
再来说一下高访问量高并发,我们都知道mysql数据库实际上在数据查询上是有一个瓶颈的,当我们的数据太多的时候,已经互联网上有高并发的请求的时候,这个时候对我们mysql的压力是非常大的,当访问量一大,就可能会出现查不出数据,响应的时间太长等,这个时候我们可能需要有多个服务器对数据库进行读写分离,以及对数据库进行集群,这个时候我们的sql语句要进行分类,哪个sql语句要访问哪个数据库,这个时候只要交给mycat就可以了。
3 MyCat干什么?
(1)读写分离
(2)数据分片
垂直拆分(分库),水平拆分(分表),垂直拆分+水平拆分(分库分表)
分库:就是把咱么一个库拆分成多个数据库,每个数据库存分别不同的表,缓解了数据库的压力
水平拆分(分表):就是一个表达到了千万级数据量,但凡达到瓶颈,数据库查询的销量非常低(查询的非常慢),进行分表,把一张表拆分成多个表,数据不是在一个数据库,而是分到多个数据库,这就是分表操作,如果直接连java程序的话,又需要配置多个数据源,还有判断我这一张表到底那些数据在那些数据库,又是浅耦合了,需要MyCat出山,把分布式数据库封装一下,Java程序只需要访问MyCat就可以了,表里面的那些数据在那些数据库里面?由谁来操心?由MyCat来做这个事
3多数据源整合
MyCat的原理
MyCat的原理中最重要的一个动词是“拦截”,它拦截了用户发送过来的SQL语句,首先对SQL语句做了一些特定的分析:如分片分析,路由分析,读写分离分析,缓存分析等,然后将此SQL发往后端的真实数据库,并将返回的结果做适当的处理,最终再返回给用户