MyCat-入门-核心概念-分片 | 学习笔记

简介: 快速学习 MyCat-入门-核心概念-分片

开发者学堂课程【全面讲解开源数据库中间件MyCat使用及原理(一):MyCat-入门-核心概念-分片】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/755/detail/13243


MyCat-入门-核心概念-分片

内容介绍:

一、课程总述

二、垂直(纵向)切分

三、水平(横向)切分

四、MyCat  分片策略

 

一、课程总述:

核心概念,第一个分片,第二个逻辑库,第三个逻辑表,第四个分片节点、第五个节点主机和最后一个分片规则。

分片在前面也提到过,我们业务系统的数据是要存放在数据库中的,而数据库的数据又是存放在磁盘中的。随着业务系统运行,数据库表结构中的数据量越来越大,像比较繁忙的业务系统,每天都会插入大量的数据,数据库上的数据都是存放在磁盘上的,磁盘满了,我们可以加磁盘,但是总有加满的一天,这时我们需要考虑到分片。

这是我们原有的数据库,这个数据库磁盘满了之后,我们可以考虑分片,将原有的数据库当中的数据可以分散到多个数据库。

image.png

下面三个数据库存储的内容不一样,从而达到扩容的作用。原来在一个服务器中存储,现在在三个服务器中存储。假如随着业务系统的运行,数据量越来越大,这时在增加一排服务器,在把数据量往第四排服务器中存储,下面四排服务器当中的数据组合起来,才形成了一个完整的数据库当中的数据,那么下面四个数据库实际上就是分片。

分片简单来说,就是指通过某种特定的条件,将我们存放在同一个数据库中的数据分散存放到多个数据库(主机)上面,以达到分散单台设备负载的效果。

数据的切分按照切分的规则,可以分为两种切分类型。第一种叫垂直切分,第二种叫水平切分。

 

二、垂直(纵向)切分

一种是按照不同的表(或者)来切分到不同的数据库(主机)之上,这种切分可以称之为数据的垂直(纵向)切分。

image.png

应用系统,原来是访问单个数据库,现在变了,因为单个数据库的容量有限,我们需要将数据均匀分散到多个数据库当中。垂直切分会将原有的数据库当中的数据均匀或者说按照我们的业务分散到不同的数据库的主机上。比如我们原有的数据库上包含了用户的、订单的、支付的,包含了这三个模块的结构。按照垂直切分的方式,会将这三个模块的表结构进行切分,第一个数据库只存放用户系统的数据库,第二个只存放订单系统的数据表,第三个支付系统只存放支付系统相关的表,也就是说每一个数据库只管一块的业务,这样就相当于把原有的一个大的数据库切分成了三个小的数据库,而这三个分片数据库当中的数据是不一样的,而且表结构也不一样,这就是第一种切分方式,叫垂直切分。

垂直切分最大的特点就是各个分片当中它的数据库表结构是不一样的。

 

三、水平(横向)切分

image.png

第二种叫水平切分,既然有了垂直切分,为什么还要使用水平切分呢?这时我们来看一个现象,以如上图为例:刚才提到了,当数据量比较大的时候,我们需要考虑分片,这个时候订单系统,我们的订单库每一天可能要会插入上百万或几百万个系统,陈年累积这个数据库的磁盘也会占满,订单系统总有占满的一天。此时,如果订单系统的数据量比较大,这个时候,他的磁盘容量就会占满,此时我们又要考虑切分,但是我们就不能考虑垂直切分了,因为垂直切分每一个结构它的表节点是不一样的,订单就一张表,只切分到了一个数据库当中。

基于这种现象,我们要用到第二种切分方式,叫做水平切分,水平切分指的是将同一个表中的数据按照某种条件拆分到多台数据库(主机)上面。

我们原有的订单表数据量比较大,这个时候,我们针对订单表来进行切分,切分成若干个数据库。订单原来是一个数据库,现在切分成三个数据库。如果用户的数据量比较大,用户原来是一个数据库,现在也切分成了三个数据库。

image.png

如果是水平切分,第一个订单系统,第二个订单系统,第三个订单系统,他们里面存储的表结构相同,这三个结构中表结构一样,都是订单表,那他们存放的数据有一样吗?他们里面存放的数据是不同的,从而来完成扩容。

垂直切分各个节点,各个数据库主机当中,他们的表结构是不同的,而水平切分,各个节点当中他们的表结构是相同的。

 

四、MyCat  分片策略

MyCat  分片策略如图:

image.png

最上面是一个 schema,这个 schema 在 MyCat 当中叫逻辑库,是一个逻辑上的数据库,数据库当中存储的是数据表。他下面有两张表,一个是 table A,一个是 table B。table A 我们叫逻辑表,table B 也叫逻辑表,也就是说,一个数据库当中包含了一个逻辑表 A 也包含了一个逻辑表 B。对于一张表来说,他的数据量可能会比较大,我们需要考虑到切分,这个时候,table A 又进行了一个切分,分成了Datanode1和Datanode 2。 table A 当中的数据会存放在两个数据节点中,DataNode 叫数据节点。两个数据节点,一个是Datanode 1,一个是 Datanode 2。这两个数据节点中,它存放的表或它想关联的表都是 table A,而 table B 它所关联的两个数据节点,一个是 Datanode 3,一个是Datanode 4,他们关联的都是 table B 这张表。

table A 中的数据将会分散存储在 Datanode1第一个数据节点和Datanode 2 第二个数据节点。table B 中的数据将会分散存储在 Datanode 3 和 Datanode 4 这两个数据节点。数据节点只是一个逻辑上的概念,最终表结构中的数据是要存放在数据库当中的,这时 table A 中的数据分散存储在 Datanode1 和 Datanode 2,最终存放在 192.128 和 192.129 这两个数据库,也就是说一张表的数据分散存储在两个数据库当中,从而完成扩容。table B 中的数据关联的是 Datanode 3和Datanode 4 这两个数据节点,最终存放在 192.130 和 192.131 这两台数据库上。

整体上看这个结构,最终会有一个完整的逻辑库,逻辑库中包含了两张逻辑表table A 和 table B 最终 table A 和 table B 中的数据要存放在底层的数据库,这个底层的数据库可以理解为 MySQL 。

如上图虚线以上的是逻辑结构图,虚线以下的是物理结构图。

逻辑结构图指的就是逻辑库、逻辑表、数据节点,物理结构图就是具体真正存储数据的 MySQL。

相关文章
|
消息中间件 存储 Serverless
【实践】快速学会使用阿里云消息队列RabbitMQ版
云消息队列 RabbitMQ 版是一款基于高可用分布式存储架构实现的 AMQP 0-9-1协议的消息产品。云消息队列 RabbitMQ 版兼容开源 RabbitMQ 客户端,解决开源各种稳定性痛点(例如消息堆积、脑裂等问题),同时具备高并发、分布式、灵活扩缩容等云消息服务优势。
365 2
|
Windows
Windows 技术篇-文件管理器访问ftp服务失败,提示:“打开FTP服务器上的文件夹是发生错误,请检查是否有权限访问该文件夹。”问题解决方法
Windows 技术篇-文件管理器访问ftp服务失败,提示:“打开FTP服务器上的文件夹是发生错误,请检查是否有权限访问该文件夹。”问题解决方法
3580 0
Windows 技术篇-文件管理器访问ftp服务失败,提示:“打开FTP服务器上的文件夹是发生错误,请检查是否有权限访问该文件夹。”问题解决方法
|
11月前
|
缓存 网络协议
Jmeter如何对UDP协议进行测试?
`jmeter-plugins`是JMeter的插件管理器,用于管理和组织所有插件。访问[官网](https://jmeter-plugins.org/install/Install/)下载并放置于`lib/ext`目录下,重启JMeter后可在“选项”中看到插件管理器。
413 1
Jmeter如何对UDP协议进行测试?
|
SQL 运维 监控
MyCat - 高级 - MyCat-Web 介绍及安装配置 | 学习笔记
快速学习 MyCat - 高级 - MyCat-Web 介绍及安装配置
MyCat - 高级 - MyCat-Web 介绍及安装配置 | 学习笔记
|
Web App开发 缓存 网络协议
不为人知的网络编程(十八):UDP比TCP高效?还真不一定!
熟悉网络编程的(尤其搞实时音视频聊天技术的)同学们都有个约定俗成的主观论调,一提起UDP和TCP,马上想到的是UDP没有TCP可靠,但UDP肯定比TCP高效。说到UDP比TCP高效,理由是什么呢?事实真是这样吗?跟着本文咱们一探究竟!
495 10
|
存储 算法 安全
一文带你学习“国密算法”
一文带你学习“国密算法”
2439 3
一文带你学习“国密算法”
|
开发框架 前端开发 JavaScript
循序渐进VUE+Element 前端应用开发(24)--- 修改密码的前端界面和ABP后端设置处理
循序渐进VUE+Element 前端应用开发(24)--- 修改密码的前端界面和ABP后端设置处理
|
开发框架 中间件 API
ABP VNext框架基础知识介绍(2)--微服务的网关
ABP VNext框架基础知识介绍(2)--微服务的网关
|
开发框架 前端开发 JavaScript
循序渐进BootstrapVue,开发公司门户网站(3)--- 结合邮件发送,收集用户反馈信息
循序渐进BootstrapVue,开发公司门户网站(3)--- 结合邮件发送,收集用户反馈信息
|
存储 网络协议 数据处理
【Socket】解决UDP丢包问题
UDP(用户数据报协议)是一种无连接的传输层协议,因其不保证数据包的顺序到达和不具备内置重传机制,导致在网络拥塞、接收缓冲区溢出或发送频率过快等情况下容易出现丢包现象。为应对这些问题,可以在应用层实现重传机制、使用前向纠错码等方法。这些方法在一定程度上可以缓解UDP通信中的丢包问题,提高数据传输的可靠性和效率。