MyCat - 分片 - 思路分析 | 学习笔记

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: 快速学习 MyCat - 分片 - 思路分析

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

课程地址:https://developer.aliyun.com/learning/course/758/detail/13327


MyCat - 分片 - 思路分析

思路分析

对于现在所做的案例是一个电商的案例,包含商品模块、订单模块以及日志模块。对于商品的订单以及日志,数据量相对来说非常大,特别是订单和数据,大的电商网站每天都会产生大量的订单。这时,单台服务器存储这些数据库表时可能会存在存储不足的问题。

image.png

1.当前数据库的存放情况:

Application (应用程序)直接访问单个数据库,随着业务量越来越大,数据库表结构中的数据量也越来越大。这时,数据库中存储的数据急剧膨胀,当单台服务器已经存储不下数据时,我们需要考虑到数据库的扩容。需要用到 MyCat 的分片,我们可以把原来的单个数据库进行分片,分割成多个数据库。通过 MyCat 的分片来实现数据的扩容。

2.垂直拆分

数据量过大,需要考虑扩容,可以通过 MyCat 来实现数据库表的垂直拆分,将同一块业务的数据库表拆分到同一个数据库服务中。拆分方式如下∶

image.png

对于当前案例,需先考虑垂直拆分。

首先,有一个逻辑库叫 v_shop,我们将在单个数据库中存储的表进行拆分,拆分到多个数据库中。比如,商品模块表存储到一个数据库,日志表存储到有一个数据库,订单模块表存储到一个实例中,以及基础信息表再存储到另外一个实例中。

相当于原来在单个数据库存储的内容现在分割到个数据库中存储,这样的话就可以完成扩容操作。

垂直拆分 ,各个 MySQL 存储的表结构是不一样的,根据业务模块将对于的数据存储到一个数据库中,用四台服务器部署分别存储。

在当前的订单查询当中,查询订单列表信息时,还查询了省份的信息:

image.png

回想做该块功能的流程:

OrderController 中调用的 findPage 方法,方法中调用了 search 层,search 层中调用了 TbOrder 的 search 方法。在映射配置文件中的 select  语句声明。

发现该 select 语句中,涉及到多表查询操作( order 表和 provinces 表),意味着在当前的拆分方式中,涉及跨库的  join  操作:

image.png

对应的解决方案在之前讲解过,回顾:

跨库的 Join 操作可以使用全局表、ER 表以及使用 catlet 自己实现。

最方便的方式是使用全局表。

3.全局表

含义:在系统中有一些基础信息,基础信息的数据量并不大,但是这些基础信息在其他的业务模块可能都会有所关联,这时就可以将基础信息的表设置为全局表,从而避免出现跨库的 Join 操作。

按照上述的方式进行表结构的拆分,可以解决扩容的问题,但是存在另一个问题:由于省、市、区县、数据字典表,在订单及商品等模块中都需要用到,还会涉及到多表连接查询,那么这个时候涉及到跨库的 join 操作,可以使用全局表来解决。结构图如下︰

image.png

(全局表指在 MySQL 的各个节点中都会存在)

设置全局表后,查询订单信息同时要查询订单对应的省份信息,省份信息在当前数据库中存在,所以不涉及跨库操作。

在当前的拆分方式中,可能会出现日志表,日志表记录的是当前各个为服务当中所产生的日志,这些日志每天都会有大量的数据产生,那么长年累月这张表的数据量将会变得非常大,大到数据库的磁盘存储不了一张表,那么就会用到水平拆分。

4. 水平拆分

垂直拆分和水平拆分的区别:垂直拆分是各个数据库节点中表结构不一样,按照业务模块进行拆分各个数据库节点中存储的表结构不一样,对于水平拆分,各个数据库中存储的表结构一样,但是数据不一样。

原来是三个数据库,现在增加了一个数据库,然后在原有基础上对 operatelog 进行水平拆分,也就是第三排数据库和第四排数据库中都有 operatelog 这张表,但是这两个表结构中存储的数据是不一样的。最终当前的案例在进行上线时,所以 MyCat 进行分库分片操作。

image.png

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
7月前
|
存储 算法 关系型数据库
Mycat【Mycat分片技术(水平拆分-分表、ER表、全局表)】(五)-全面详解(学习总结---从入门到深化)
Mycat【Mycat分片技术(水平拆分-分表、ER表、全局表)】(五)-全面详解(学习总结---从入门到深化)
161 0
|
7月前
|
算法 数据库
Mycat【Mycat分片规则(取模、分片枚举、范围约定)】(六)-全面详解(学习总结---从入门到深化)
Mycat【Mycat分片规则(取模、分片枚举、范围约定)】(六)-全面详解(学习总结---从入门到深化)
108 0
|
7月前
|
SQL 关系型数据库 MySQL
Mycat【Mycat高级特性_搭建双主双从、Mycat分片技术_垂直拆分-分库 】(四)-全面详解(学习总结---从入门到深化)
Mycat【Mycat高级特性_搭建双主双从、Mycat分片技术_垂直拆分-分库 】(四)-全面详解(学习总结---从入门到深化)
101 0
|
7月前
|
运维 负载均衡 关系型数据库
Mycat【Mycat分片规则(按日期(天)分片、全局序列)、Mycat高可用(Mycat高可用概述)】(七)-全面详解(学习总结---从入门到深化)
Mycat【Mycat分片规则(按日期(天)分片、全局序列)、Mycat高可用(Mycat高可用概述)】(七)-全面详解(学习总结---从入门到深化)
127 0
38MyCat - 分片规则(自然月分片)
38MyCat - 分片规则(自然月分片)
58 0
|
存储 关系型数据库 MySQL
MyCat-入门-分片测试-需求 | 学习笔记
快速学习 MyCat-入门-分片测试-需求
MyCat-入门-分片测试-需求 | 学习笔记
|
存储 算法 关系型数据库
MyCat-入门-分片测试-分片配置测试 | 学习笔记
快速学习 MyCat-入门-分片测试-分片配置测试
MyCat-入门-分片测试-分片配置测试 | 学习笔记
|
存储 关系型数据库 MySQL
MyCat - 分片 - 水平拆分 - 概述及案例场景 | 学习笔记
快速学习 MyCat - 分片 - 水平拆分 - 概述及案例场景
MyCat - 分片 - 水平拆分 - 概述及案例场景 | 学习笔记
|
关系型数据库 MySQL 中间件
MyCat-入门-分片测试-访问 MyCat | 学习笔记
快速学习 MyCat-入门-分片测试-访问 MyCat
MyCat-入门-分片测试-访问 MyCat | 学习笔记
|
存储 算法 中间件
MyCat - 分片 - 分片规则 - 应用指定算法 | 学习笔记
快速学习 MyCat - 分片 - 分片规则 - 应用指定算法
MyCat - 分片 - 分片规则 - 应用指定算法 | 学习笔记