page contents

太详细了!Mycat数据库中间件实战教程(读写分离、分库分表)

MyCat 是目前最流行的基于 java 语言编写的数据库中间件,是一个实现了 MySQL 协议的服务器,前端用户可以把它看作是一个数据库代理,用 MySQL 客户端工具和命令行访问,而其后端可以用 MySQL 原生协议与多个 MySQL 服务器通信,也可以用 JDBC 协议与大多数主流数据库服务器通信,其核心功能是分库分表。配合数据库的主从模式还可实现读写分离。


MyCat 是目前最流行的基于 java 语言编写的数据库中间件,是一个实现了 MySQL 协议的服务器,前端用户可以把它看作是一个数据库代理,用 MySQL 客户端工具和命令行访问,而其后端可以用 MySQL 原生协议与多个 MySQL 服务器通信,也可以用 JDBC 协议与大多数主流数据库服务器通信,其核心功能是分库分表。配合数据库的主从模式还可实现读写分离。

MyCat 是基于阿里开源的 Cobar 产品而研发,Cobar 的稳定性、可靠性、优秀的架构和性能以及众多成熟的使用案例使得 MyCat 变得非常的强大。

MyCat 发展到目前的版本,已经不是一个单纯的 MySQL 代理了,它的后端可以支持MySQL、SQL Server、Oracle、DB2、PostgreSQL 等主流数据库,也支持 MongoDB 这种新型NoSQL 方式的存储,未来还会支持更多类型的存储。而在最终用户看来,无论是哪种存储方式,在 MyCat 里面,都是一个传统的数据库表,支持标准的 SQL 进行数据的操作,这样一来,对前端业务系统来说,可以大幅降低开发难度,提升开发速度。

分库分表介绍

随着微服务这种架构的兴起,我们应用从一个完整的大的应用,切分为很多可以独立提供服务的小应用。每个应用都有独立的数据库。

数据的切分分为两种:

垂直切分:按照业务模块进行切分,将不同模块的表切分到不同的数据库中。

attachments-2023-03-s5REtfZ0640049529906b.png水平切分:将一张大表按照一定的切分规则,按照行切分到不同的表或者不同的库中。


attachments-2023-03-rW8U1xdj6400498505171.jpg

Mycat介绍

官方网站:http://www.mycat.org.cn/

什么是Mycat?

简单的说,MyCAT就是:


一个彻底开源的,面向企业应用开发的“大数据库集群”

支持事务、ACID、可以替代Mysql的加强版数据库

一个可以视为“Mysql”集群的企业级数据库,用来替代昂贵的Oracle集群

一个融合内存缓存技术、Nosql技术、HDFS大数据的新型SQL Server

结合传统数据库和新型分布式数据仓库的新一代企业级数据库产品

一个新颖的数据库中间件产品

MyCAT的目标是:低成本的将现有的单机数据库和应用平滑迁移到“云”端,解决数据存储和业务规模迅速增长情况下的数据瓶颈问题。


使用MyCat的好处

1、数据量级

单一的 MySQL 其数据存储量级和操作量级有限.

Mycat 可以管理若干 MySQL 数据库,同时实现数据的存储和操作.

2、开源性质

Mycat 是 java 编写的中间件. 开源,免费.

有非常多的人和组织对 Mycat 实行开发,维护,管理,更新.

Mycat 版本提升较快,可以跟随环境发展.如果有问题,可以快速解决.

Mycat 有开源网站和开源社区.且有官方发布的电子书籍.

Mycat 是阿里云应用 corba 转型而来的.

3、市场应用

MyCat 在互联网应用中占比非常高.

MyCAT的关键特性

支持SQL 92标准

支持Mysql集群,可以作为Proxy使用

支持JDBC连接ORACLE、DB2、SQL Server,将其模拟为MySQL Server使用

支持galera for mysql集群,percona-cluster或者mariadb cluster,提供高可用性数据分片集群

自动故障切换,高可用性

支持读写分离,支持Mysql双主多从,以及一主多从的模式

支持全局表,数据自动分片到多个节点,用于高效表关联查询

支持独有的基于E-R关系的分片策略,实现了高效的表关联查询

多平台支持,部署和实施简单

MyCAT架构

attachments-2023-03-iH9wohFx640049cf8a280.png

MyCAT核心概念

Schema:由它指定逻辑数据库

Table:逻辑表

DataNode:真正存储节点

DataHost:真正的数据库主机

Mycat存在的问题

跨库join问题


通过业务分析,将不同库的join查询拆分成多个select

建立全局表(每个库都有一个相同的表)

冗余字段(不符合数据库三范式)

E-R分片(将有关系的记录都存储到一个库中)

最多支持跨两张表跨库的join

分布式事务(弱事务)


强一致性事务(同步)

最终一致性事务(异步思想)

分布式主键


redis incr命令

数据库(生成主键)

UUID

snowflake算法

分片策略

MyCAT支持水平分片与垂直分片:


水平分片:一个表格的数据分割到多个节点上,按照行分隔。

垂直分片:一个数据库中多个表格A,B,C,A存储到节点1上,B存储到节点2上,C存储到节点3上。

attachments-2023-03-3mA7g0xY64004a25a073f.png

MyCAT通过定义表的分片规则来实现分片,每个表格可以捆绑一个分片规则,每个分片规则指定一个分片字段并绑定一个函数,来实现动态分片算法。


Schema:逻辑库,与MySQL中的Database(数据库)对应,一个逻辑库中定义了所包括的Table。

Table:表,即物理数据库中存储的某一张表,与传统数据库不同,这里的表格需要声明其所存储的逻辑数据节点DataNode。在此可以指定表的分片规则。

DataNode:MyCAT的逻辑数据节点,是存放table的具体物理节点,也称之为分片节点,通过DataSource来关联到后端某个具体数据库上

DataSource:定义某个物理库的访问地址,用于捆绑到Datanode上

Mycat读写分离

MyCat的读写分离是建立在MySQL主从复制基础之上实现的。


数据库读写分离对于大型系统或者访问量很高的互联网应用来说,是必不可少的一个重要功能。对于MySQL来说,标准的读写分离是主从模式,一个写节点Master后面跟着多个读节点,读节点的数量取决于系统的压力,通常是1-3个读节点的配置


attachments-2023-03-OQoNYmow64004a48e4e39.png

Mycat读写分离和自动切换机制,需要mysql的主从复制机制配合。

更多相关技术内容咨询欢迎前往并持续关注六星社区了解详情。

想高效系统的学习Python编程语言,推荐大家关注一个微信公众号:Python编程学习圈。每天分享行业资讯、技术干货供大家阅读,关注即可免费领取整套Python入门到进阶的学习资料以及教程,感兴趣的小伙伴赶紧行动起来吧。

attachments-2022-06-9Gbyc9M8629da7516b88f.jpeg

  • 发表于 2022-04-25 09:25
  • 阅读 ( 458 )
  • 分类:Java开发

0 条评论

请先 登录 后评论
轩辕小不懂
轩辕小不懂

2403 篇文章

作家榜 »

  1. 轩辕小不懂 2403 文章
  2. 小柒 1470 文章
  3. Pack 1135 文章
  4. Nen 576 文章
  5. 王昭君 209 文章
  6. 文双 71 文章
  7. 小威 64 文章
  8. Cara 36 文章