Mycat@MySql

93 阅读4分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第13天,点击查看活动详情 >>

背景描述: 当某些情况下我们可能需要用到了多个数据库,这个时候我们可能就需要配多个数据源去连接我们的多个数据库,这个时候我们进行sql操作的时候就会很麻烦,因为Java与数据库有了一个紧密的耦合度,但是如果我们在Java应用程序与Mysql中间使用了Mycat,我们只需要访问Mycat就可以了,至于数据源等问题,Mycat会直接帮我们搞定。

什么是Mycat

Mycat其实就是数据库中间件,所谓中间件,是一类连接软件组件和应用的计算机软件,以便软件各部件之间的通信。

例如 Tomcat,Web的中间件。而数据库中间件是连接Java应用程序和数据库中间的软件。 1.png

为什么要用Mycat

  • Java与数据库的紧耦合
  • 高访问量高并发对数据库的压力
  • 读写请求数据不一致

我们现在普遍的Java应用程序都是直接连接了 MySQL软件进行读写操作,也就是我们在 Java中的配置文件等定义了Mysql的数据源,直接连接到了我们的 Mysql软件,但是当某些情况下我们可能需要用到了多个数据库,这个时候我们可能就需要配多个数据源去连接我们的多个数据库,这个时候我们进行 sql操作的时候就会很麻烦,因为 Java与数据库有了一个紧密的耦合度,但是如果我们在 Java应用程序与 Mysql中间使用了 Mycat,我们只需要访问 Mycat就可以了,至于数据源等问题,Mycat会直接帮我们搞定。

再来说一下高访问量高并发,我们都知道 Mysql数据库实际上在数据查询上是有一个瓶颈的,当我们的数据太多的时候,已经互联网上有高并发的请求的时候,这个时候对我们 Mysql的压力是非常大的,当访问量一大,就可能会出现查不出数据,响应的时间太长等,这个时候我们可能需要有多个服务器对数据库进行读写分离,以及对数据库进行集群,这个时候我们的Sql语句要进行分类,哪个Sql语句要访问哪个数据库,这个时候只要交给 Mycat就可以了。 2.png 最后说一下,使用多个数据库的时候我们就会遇到一个读写数据不一致的问题,这个时候同样Mycat可以进行主从复制,保证了数据的一致性。

Mycat能干什么

  • 读写分离 3.png

  • 数据分片

垂直拆分(分库)、水平拆分(分表)、垂直+水平(分库分表)

首先我们的数据库有多个表 4.png

当我们的表足够多的时候,也会造成整个数据库的瓶颈,这个时候查询是非常慢的,这个时候我们可能要对这个数据库进行垂直拆分,也就是分库 5.png

我们需要垂直拆分了表4 5 6 放到另外一个库中。

当我们垂直拆分了之后,可能又会出现单个表中的数据达到千万以上,这个时候对表造成了一个瓶颈,这个时候我们对表进行拆分。 6.png

我们可以把表的一部分数据拆分到另外的一个数据库。

  • 多数据源的整合

Mycat还可以进行多数据源的整合 7.png

比如像一些非常重要的数据 比如订单 账单等数据,我们可以让Mycat同时写入到多个数据库,保证数据的高可靠性。

也可以让Mycat对一些数据进行多个主从的复制,有多个主从数据进行同步,当有一个主机坠机的时候,另外的主机进行切换保障数据安全。

另外我们可以用Mycat连接到Nosql,当我们有一些非业务性的数据比如日志等的数据储存到Nosql中。

这个东西其实 自己动手搞一遍,可以更深入地了解其中的道道,建议 多动手 多尝试,Seeyou...