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

简介: 快速学习 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

相关实践学习
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
相关文章
|
运维 Cloud Native 数据管理
云原生数据库:下一代数据管理的趋势与挑战
【9月更文挑战第4天】云原生数据库作为下一代数据管理的趋势,正以其独特的优势引领着数据管理领域的变革。然而,在快速发展的同时,云原生数据库也面临着诸多挑战。未来,随着技术的不断进步和市场的不断成熟,云原生数据库将不断优化和完善,为企业数字化转型提供更加高效、安全、灵活的数据管理服务。同时,我们也需要关注并解决其面临的挑战,推动云原生数据库技术的健康发展。
|
10月前
|
敏捷开发 人工智能 JavaScript
通义灵码AI程序员功能体验评测
通义灵码插件新版本支持AI程序员功能,帮助我在VSCode中实现类似dify或fastgpt的智能体工作流功能(基于Vue)。初步体验显示,AI对需求理解深刻,能生成框架代码并以版本新增模式体现。但快照切换存在小瑕疵,如顺序反了和需手动点击切换按钮。总体而言,该功能有助于结对编程和代码审查,提升开发效率。
375 19
|
9月前
|
存储 监控 架构师
ZGC圣经:ZGC垃圾回收器的原理、调优,ZGC 漏标的 分析与 研究
ZGC圣经:ZGC垃圾回收器的原理、调优,ZGC 漏标的 分析与 研究
|
JavaScript 安全 前端开发
TypeScript类型声明:基础与进阶
通过本文的介绍,我们详细探讨了TypeScript的基础与进阶类型声明。从基本数据类型到复杂的泛型和高级类型,TypeScript提供了丰富的工具来确保代码的类型安全和可维护性。掌握这些类型声明能够帮助开发者编写更加健壮和高效的代码,提高开发效率和代码质量。希望本文能为您在使用TypeScript时提供实用的参考和指导。
334 2
|
Linux
Linux telnet安装及端口测试联通性
Linux telnet安装及端口测试联通性
361 10
|
存储 搜索推荐
【七大排序】堆排序详解
【七大排序】堆排序详解
592 3
|
NoSQL Redis 数据库
Redis 从入门到精通之列出所有的key
在Redis中,列出所有的key可以使用`KEYS`命令或`SCAN`命令。
550 96
|
存储 API 虚拟化
OpenStack私有云裸机物理服务器角色规划
【4月更文挑战第23天】企业私有云通常由管理节点、控制节点、计算节点、存储节点和网络节点组成的物理服务器集群构成