1.学习目标

image-20210102103239598

2.MyCat简介

2.1 什么是MyCat

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

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

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

MyCat官网: http://www.mycat.io/

2.2 使用Mycat后的结构图

image-20210102110648163

2.3 使用Mycat的优势

2.3.1 数据量级

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

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

2.3.2 开源性质

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

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

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

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

mycat是阿里原应用corba 转型而来的

2.3.3 市场应用

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

3. Mycat中的概念

3.1 切分

逻辑上的切分,在物理层面,是使用多库[database],多表[table]实现的切分

3.1.1 纵向切分 / 垂直切分

就是把原本存储于一个库的数据存储到多个库上。

由于对数据库的读写都是对同一个库进行操作,所以单库并不能解决大规模并发写入问题

例如:我们会建立定义数据库workDB 商品数据库payDB 用户数据库userDB 日志数据库logDB 等,分别用于存储项目数据定义表,商品定义表,用户数据库表,日志数据表。

优点:

  • 减少增量数据库写入时的锁对查询的影响
  • 由于单表数据下降,常见的查询操作由于减少了需要扫描的记录,使得单表单次查询所需要的检索行数变少,减少了磁盘IO 时延变短。

缺点:

  • 无法解决单表数据量太大的问题
3.1.2 横向切分

把原本存储于一个表的数据分块存储到多个表上,当一个表中的数据量过大时,我们可以把该表的数据按照某种规则,进行划分,然后存储到多个结构相同的表,和不同的库上,例如:我们userDB中的userTable中数据量很大,我们可以把userDB切分为结构相同的多个userDB part0DB part1DB等,再将userDB上的userTabel 切分为很多userTabel userTabel0 userTable1等,然后将这些表按照一定的规则存储多个userDB上。

优点:

  • 单表的并发能力提高了,磁盘 i/o性能也提高了
  • 如果出现高并发的话,总表可以根据不同的查询,将并发压力分到不同的小表里面

缺点:

  • 无法实现表连接查询
3.2 逻辑库 Schema

Mycat中定义的database 是逻辑上存在的,但是物理上是不存在的

主要是针对纵向切分提供的概念

3.3 逻辑表 -table

Mycat中定义的table是逻辑上存在,物理上是不存在的,

主要是针对横向切分提供的概念

3.4 默认端口

MySQL 默认端口是3306

Mycat默认端口是8066

tomcat默认端口是8080

Oracle 默认端口是1521

nginx默认端口是80

http协议默认端口是80

redis默认端口是6379

3.5 数据主机-dataHost

物理MySQL存放的主机地址,可以使用主机名,ip, 域名定义

3.6 数据节点

配置物理的database 数据保存的物理节点,就是database

3.7 分片规则

当控制数据的时候,如何访问物理database和table 就是访问dataHost和dataNode的算法。在Mycat处理具体的数据CRUD的时候,如何访问dataHost和dataNode的算法,如哈希算法,crc32算法等。

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐