您当前的位置: 首页 > 

一一哥Sun

暂无认证

  • 1浏览

    0关注

    622博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

Day15_04_分库分表教程之MyCat详解

一一哥Sun 发布时间:2019-07-04 00:25:42 ,浏览量:1

MyCat详解 一. MyCat简介 1. MyCat是什么?

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

MyCat的目标是:低成本的将现有的单机数据库和应用平滑迁移到“云”端,解决数据存储和业务规模迅速增长情况下的数据瓶颈问题.MyCat就是一个数据库中间件,数据库的代理,它屏蔽了物理数据库,应用连接mycat,然后mycat再连接物理数据库.

它支持水平拆分(分库分表,通过分库达到分表),支持多种分片规则,比如范围切片、自然月分片、hash取模分片等.

它支持mysql、oracle、mongodb、sql server,并且支持数据库集群.

2. 为什么要使用MyCat?

例如操作系统是对各类计算机硬件的抽象.那么我们什么时候需要抽象?假如只有一种硬件的时候,我们需要开发一个操作系统吗?

再比如一个项目只需要一个人完成的时候不需要leader,但是当需要几十人完成时,就应该有一个管理者,发挥沟通协调等作用,而这个管理者对于他的上层来说就是对项目组的抽象.

同样的,当我们的应用只需要一台数据库服务器的时候,我们并不需要MyCat.而如果你需要分库甚至分表,这时候应用要面对很多个数据库的时候,这个时候就需要对数据库层做一个抽象,来管理这些数据库.而最上面的应用只需要面对一个数据库层的抽象或者说数据库中间件就好了,这就是MyCat的核心作用.

所以可以这样理解: 数据库是对底层存储文件的抽象,而MyCat是对数据库的抽象.

3. MyCat的优点

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

4. MyCat的特性
  • 一个彻底开源的,面向企业应用开发的“大数据库集群”;

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

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

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

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

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

  • 支持 SQL 92标准;

  • 支持MySQL集群,可以作为Proxy使用;

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

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

  • 自动故障切换,高可用性;

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

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

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

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

  • 支持密码加密;

  • 支持服务降级;

  • 支持IP白名单;

  • 支持SQL黑名单、sql注入攻击拦截;

  • 支持prepare预编译指令(1.6);

  • 集群基于ZooKeeper管理,在线升级,扩容,智能优化,大数据处理(2.0开发版).

5. MyCat解决的问题
  • 1️⃣.性能问题;

  • 2️⃣.数据库连接过多;

  • 3️⃣.E-R分片难处理;

  • 4️⃣.可用性问题;

  • 5️⃣.成本和伸缩性问题.

5.1 没有MyCat前

5.2 有了MyCat后

二. MyCat详解 1. MyCat架构

如图所示:MyCat使用MySQL的通讯协议模拟成了一个MySQL服务器,并建立了完整的Schema(数据库)、Table (数据表)、User(用户)的逻辑模型,并将这套逻辑模型映射到后端的存储节点DataNode(MySQL Instance)上的真实物理库中,这样一来,所有能使用Mysql的客户端以及编程语言都能将MyCAT当成是Mysql Server来使用,不必开发新的客户端协议.

2. MyCat对多数据库的支持

3. MyCat高可用方案

4. MyCat分片策略

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

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

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

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

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

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

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

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

 

关注
打赏
1665624836
查看更多评论
立即登录/注册

微信扫码登录

0.0390s