Mysql分表分库背景知识(2)

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
云数据库 RDS PostgreSQL,高可用系列 2核4GB
简介: Mysql分表分库背景知识(2)

3 MyCat概述与基本概念

3.1 什么是MyCat

MyCat 是什么?从定义和分类来看,它是一个开源的分布式数据库系统,前端的用户可以把它看成一个数据库代理,用MySql客户端和命令行工具都可以访问,而其后端则是用MySql原生的协议与多个MySql服务之间进行通信。MyCat的核心功能是分库分表,即将一个大表水平切分成N个小表,然后存放在后端的MySql数据当中。

MyCat发展到目前的版本,已经不是一个单纯的MySql代理了,它的后端支持MySql,Oracle,SqlServer,DB2等主流的数据库,也支持MongoDB这种NoSql数据库。而对于前端的用户来说,无论后端采用哪一种数据库,在MyCat里都是一个传统的数据库,支持标准的SQL语句,对于前端的开发人员来说,可以大大地降低开发难度,提升开发速度。

对于DBA来说,可以这样理解MyCat:

MyCat就是MySql,而MyCat后面连接的MySql,可以理解为MySql中的存储引擎,比如:MyISAM、InnoDB等。所以,MyCat本身不存储数据,数据都是存储在MyCat后面连接的MySql上,数据的可靠性和事务都是MySql保证的。

对于开发人员,可以这样理解MyCat:

MyCat就是一个近似等于MySql的数据库库服务,你可以使用连接MySql的方式连接MyCat。绝大多数情况,你也可以使用常用的ORM框架连接MyCat,但是,对于分片的表,还是建议使用标准SQL语句,这样能够达到最佳的性能。

对于架构师来说,可以这样理解MyCat:

MyCat是一个强大的数据库中间件,不仅仅可以用作读写分离、分库分表,还可以用于容灾备份,云平台建设等,让你的架构具备很强的适应性和灵活性。

3.2 MyCat的应用场景

MyCat发展到现在,使用的场景很丰富,常见的典型的应用场景有:

  • 单纯的读写分离,此时配置最为简单,支持读写分离,主从切换;
  • 分库分表,对于超过1000w的表进行分片,最大支持1000亿的数据;
  • 多租户应用,每个应用一个数据库,应用只连接MyCat,程序本身不需要改造;
  • 代替HBase,分析大数据

3.3 MyCat中的基本概念

MyCat是一个数据库的中间件,介于应用与数据库之间,是进行数据处理和交互的中间服务。正是由于它是一个数据库代理的中间件,它里边也有很多新的概念,这些概念先给大家介绍一下,大家有个印象,对后面的学习也很有帮助。

3.3.1 逻辑库(Schema)

在实际的开发中,开发人员不需要知道数据库中间件的存在,开发人员只需要有数据库的概念就可以了。所以数据库中间件可以被看做是一个或者多个数据库集群构成的逻辑库。例如:上图中的例子,我们可以理解为系统先做了垂直切分,被分为了3个库,用户库,订单库,商品库,而这3个库就被称为逻辑库。

3.3.2 逻辑表(table)

既然有逻辑库,那么就有逻辑表,对于应用系统来说,读写数据的表,就是逻辑表。而逻辑表中的数据,则是被水平切分后,分布在不同的分片库中。如上图所示:假设用户库中有一张用户表,这个用户表就被称为逻辑表,而用户表又被水平切分为3个表,每一个表中都存储一部分用户数据。业务系统在进行用户数据的读写时,只需要操作逻辑表就可以了,后面的分片细节则由MyCat进行操作,这些对于业务开发人员来说时完全透明的。当然,有些表的数据量没有那么大,完全不需要进行分片,只在一个物理的数据库表中即可。

凡是我们做的数据水平切分的表,我们把它叫做分片表。而数据量比较小,没有进行分片的表,我们叫它非分片表。

在真实的业务系统中,往往存在着大量的字典表,这些表的数据基本上很少变动,比如:订单状态。我们查询的时候,往往需要关联字典表去查询,比如:查询订单时,需要把订单状态关联查出,如果订单表做了分片,分布在不同的数据库中,而订单状态表由于数据量小,没有做分片,那么我们查询的时候就要跨库关联查询订单状态,增加了不必要的麻烦,不如我们干脆把订单状态表冗余到所有的订单分片库中,这样关联查询就不需要跨库了。我们把这种通过数据冗余方式复制到所有的分片库中的表,叫做全局表。

3.3.3 分片节点(dataNode)

数据被切分后,一张大表被分到不同的分片数据库上面,每个分片表所在的数据库就叫做分片节点。

3.3.4 节点主机(dataHost)

数据切分后,每一个分片节点不一定都会占用一个真正的物理主机,会存在多个分片节点在同一个物理主机上的情况,这些分片节点所在的主机就叫做节点主机。为了避免单节点并发数的限制,尽量将读写压力高的分片节点放在不同的节点主机上。

3.3.5 分片规则(rule)

一个大表被拆分成多个分片表,就需要一定的规则,按照某种业务逻辑,将数据分到一个确定的分片当中,这个规则就叫做分片规则。数据切分选择合适的分片规则非常重要,这将影响到后的数据处理难度,结合业务,选择合适的分片规则,是对架构师的一个重大考验。对于架构师来说,选择分片规则是一个艰难的,难以抉择的过程。

3.3.6 全局序列号(sequence)

大家有没有想过,数据切分以后,数据库表的中的id怎么办?原来在一张表的时候,我们采用id自增,但是数据分布到多个库怎么办?比如:向用户表插入数据,第一条记录插入了用户库1,它的id为1;第二条记录插入了用户库2,如果是自增,它的id也为1。这样id就混乱了,我们也无法确定一条数据的唯一标识了。这时,我们需要借助外部的机制保证数据的唯一标识,这种保证数据唯一标识的机制,我们叫做全局序列号。

4 总结

通过上面我们对MyCat的介绍,我相信大家对MyCat有了一个整体的认识。在接下来体验一下MyCat的读写分离和分库分表的强大功能。

Mysql集群部署实现主从复制读写分离分表分库

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
目录
相关文章
|
SQL 算法 Java
(二十六)MySQL分库篇:Sharding-Sphere分库分表框架的保姆级教学!
前面《MySQL主从原理篇》、《MySQL主从实践篇》两章中聊明白了MySQL主备读写分离、多主多写热备等方案,但如果这些高可用架构依旧无法满足业务规模,或业务增长的需要,此时就需要考虑选用分库分表架构。
5260 4
|
存储 SQL 关系型数据库
(二十三)MySQL分表篇:该如何将月增上亿条数据的单表处理方案优雅落地?
前面《分库分表的正确姿势》、《分库分表的后患问题》两篇中,对数据库的分库分表技术进行了全面阐述,但前两篇大多属于方法论,并不存在具体的实战实操,而只有理论没有实践的技术永远都属纸上谈兵,所以接下来会再开几个单章对分库分表各类方案进行落地。
979 3
|
算法 搜索推荐 NoSQL
面试题MySQL问题之分库分表后的富查询问题处理如何解决
面试题MySQL问题之分库分表后的富查询问题处理如何解决
135 3
|
消息中间件 关系型数据库 MySQL
实时计算 Flink版产品使用问题之从MySQL数据库中捕获变更数据并进行实时处理如何按天分表同步CDC数据
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
SQL 关系型数据库 MySQL
mysql面试之分库分表总结
mysql面试之分库分表总结
195 0
|
关系型数据库 MySQL 数据库
深入探讨MySQL分表策略与实践
深入探讨MySQL分表策略与实践
694 0
|
存储 关系型数据库 MySQL
Mysql 分库分区分表
Mysql 分库分区分表
|
21天前
|
缓存 关系型数据库 BI
使用MYSQL Report分析数据库性能(下)
使用MYSQL Report分析数据库性能
57 3
|
27天前
|
关系型数据库 MySQL 数据库
自建数据库如何迁移至RDS MySQL实例
数据库迁移是一项复杂且耗时的工程,需考虑数据安全、完整性及业务中断影响。使用阿里云数据传输服务DTS,可快速、平滑完成迁移任务,将应用停机时间降至分钟级。您还可通过全量备份自建数据库并恢复至RDS MySQL实例,实现间接迁移上云。
|
14天前
|
关系型数据库 MySQL 分布式数据库
阿里云PolarDB云原生数据库收费价格:MySQL和PostgreSQL详细介绍
阿里云PolarDB兼容MySQL、PostgreSQL及Oracle语法,支持集中式与分布式架构。标准版2核4G年费1116元起,企业版最高性能达4核16G,支持HTAP与多级高可用,广泛应用于金融、政务、互联网等领域,TCO成本降低50%。

推荐镜像

更多