什么是MyCat?

答:

MyCat是一个开源的分布式数据库系统,是一个实现了MySQL协议的服务器,前端用户可以把它看作是一个数据库代理,用MySQL客户端工具和命令行访问,而其后端可以用MySQL原生协议与多个MySQL服务器通信,也可以用JDBC协议与大多数主流数据库服务器通信,其核心功能是分表分库,即将一个大表水平分割为N个小表,存储在后端MySQL服务器里或者其他数据库里。
————————————————

那么为什么要用到MyCat呢?

*例如操作系统是对各类计算机硬件的抽象。那么我们什么时候需要抽象?假如只有一种硬件的时候,我们需要开发一个操作系统吗?
再比如一个项目只需要一个人完成的时候不需要leader,但是当需要几十人完成时,就应该有一个管理者,发挥沟通协调等作用,而这个管理者对于他的上层来说就是对项目组的抽象。
同样的,当我们的应用只需要一台数据库服务器的时候我们并不需要Mycat,而如果你需要分库甚至分表,这时候应用要面对很多个数据库的时候,这个时候就需要对数据库层做一个抽象,来管理这些数据库,而最上面的应用只需要面对一个数据库层的抽象或者说数据库中间件就好了,这就是Mycat的核心作用。
所以可以这样理解:数据库是对底层存储文件的抽象,而Mycat是对数据库的抽象。

1.下面我们需要明白为什么我们要分库分表?

答:因为数据落地是要落在文件上的,也就是落在本地磁盘上,那么涉及到磁盘问题,就要考虑机器磁盘大小问题;还有就是如果一张表的数据量太大,就会达到了性能瓶颈,哪怕使用索引也是无济于事。所以需要分库分表,提高数据查询速度。

2.分库分表怎么分?

答:分库分表分为水平分跟垂直分。

水平分方式如:

MySQL 分表分库全局 ID 分库分表mycat_MySQL 分表分库全局 ID

垂直拆分概念:垂直拆分就是根据不同的业务,拆分成不同的数据库,比如会员数据库,订单数据库,支付数据库,消息数据库等。

垂直拆分优点:拆分后业务清晰,拆分规则明确,系统之间整合或扩展容易。

垂直拆分缺点:部分业务表无法join,只能通过接口方式解决,如订单服务想要调用会员服务的用户时,会员服务需要提供一个接口出来给订单服务调用(RPC接口远程调用的方式),还有存在分布式事务问题。

总结:垂直拆分就是把不同的表拆到不同的数据库中,而水平拆分是把同一个表拆到不同的数据库中或者是把一个张表数据拆分到n个张小表去存放数据。

3.