第104讲:数据库分库分表的意义与实现策略(MyCat)

文章目录

    • 1.分库分表的目的
    • 2.分库分表的拆分策略
      • 2.1.垂直拆分
      • 2.2.水平拆分
    • 3.Mycat水平拆分的分片规则

1.分库分表的目的

互联网中的应用程序,随着公司的发展,应用系统的使用人数、数据量都再持续增长,数据库层面就会产生一定的瓶颈。

如果一开始数据库是单机模式,当业务量增大时,就会导致IO、CPU出现瓶颈,数据量太多、数据库缓存不够,从而产生大量的磁盘IO,导致数据库的性能下降。

即使将数据库升级改造成读写分离集群,随着业务的持续正能量,核心业务表也会产生瓶颈,数据量过大,当有功能使用这张表时,效率就会很低,会出现加载过慢的现象。

为了避免、解决大表带来的性能瓶颈,就需要对数据库进行分库分表的操作了。

  • 可以对业务量、数据量很大的数据库,进行分库操作,将其中的一部分表拆分到其他的数据库服务器中,程序同时连接这两个数据源,缓解单库50%的压力。

  • 也可以对数据量很大的一张表进行分表操作,将该表拆分成多张表,可以按照字段拆分,也可以按照数据量拆分,大多数情况下都是按照数据量进行拆分,例如将一张4500w行的表拆分成3张表,每张表承担1500w的数据量,缓解大表的压力。

分库分表的中心思想就是将数据分散存储在多个数据库节点中,使单一数据库或者数据量很大的表得到缓解,提高数据库的性能。

2.分库分表的拆分策略

分库分表的形式主要有两种方式,分别是垂直拆分和水平拆分,对于拆分的力度,又分为分库和分表。

2.1.垂直拆分

垂直拆分分为垂直分库和垂直分表。

所谓的垂直拆分指的将一个实体中的零件拆分到另一个实体上,相当于物理层面。

1)垂直分库

垂直分库指的是将一个库中的多个表,拆分到不同的库中,这就是垂直分库。

垂直分库中以表作为单位,根据业务表的不同,拆分到多个不同的数据库中。

垂直分库后不同库中存放平台库的表都是不同的,数据也都不相同,因为分库后,每一个库中会存放一部分表,各自表存放各自的数据,互不干涉,所有库的表加起来形成完整的平台库数据,

如下图所示,期初在一个数据库中有6张表,垂直拆分后,将库中的表分给了三个单独的库,每个库中存放2张表,从而达到提升性能的目的。

image-20220712163016707

2)垂直分表

垂直分表指的是将一个表拆分成多个表,按照字段为单位作为拆分依据。

垂直分表后一张表会被拆分成多张表,每张表的表结构也不同,因为是按照字段拆分的,可能1-5个字段在A1表中,5-10个字段在A2表中,每张表的数据也不可能相同,分表后的多张表之间一般通过主键、外键进行关联。

垂直分表后,多张表的数据加起来才是完整的数据。

如下图所示,tb_user表进行了垂直分表,其中id、age字段分到了tb_user表中,剩余的字段分到了tb_usersec表中。

image-20220712165133303

2.2.水平拆分

水平拆分分为水平分库和水平分表。

所谓的水平拆分是从逻辑层面上进行拆分,相当与搬家,换壳不换住户。

1)水平分库

水平分库是按照一定的策略以字段作为依据,将一个库的所有表拆分到多个库中,每个库中的表结构都是相同的,只是数据量不同,用户的读写操作会被路由到某一个分库中,缓解单库的压力,水平分库后,所有库的数据量才是完整的数据量。

如下图所示,该库中有两张数据表,水平分库后,被拆分到了多个库中,但是每个库中都存放相同的表,只是数据不同,用户的读写操作会被路由到不同的分库中进行处理。

image-20220712170856363

2)水平分表

水平分库是按照一定的策略以字段作为依据,将一个表的数据拆分到多张表中,缓解单表的压力,拆分出来的多张表只是名字不同,表数据都相同,用户的读写操作会被路由到其中一个分表中,拆分出来的所有表的数据量加起来才是完整的数据量。

如下图所示,tb_goods表进行了水平拆分,拆分后变成了三张表,每张表中会存放一部分数据,用户的读写操作会被路由到其中一张表中,三张表的所有数据量才是整张表的全部数据。

image-20220712171158007

3.Mycat水平拆分的分片规则

Mycat水平分库分表,都是对表中的数据量进行拆分的,将一个数据库中的表数据拆分到多个数据库实例中,并不能实现将一个表在当前数据库中拆成多个表。

Mycat的分片规则都已经写好了,我们直接来调用即可,无需认为编写。

水平拆分主要是根据分片规则进行逻辑上的拆分,常用的水平拆分分片规则如下:

  • 范围分片
    • 根据表中的数据量大小,决定将表中的数据拆分到那些分片上,例如0~500w条数据拆分到分片1,500w-1000w数据拆分到分片2。
  • 取模分片
    • 根据数据量与节点数量的求模运算,根据运算结果,决定数据存储的分片,例如插入第50条数据,节点有4个,那么就是50÷4=12余2,余数2就是该条数据写入的分片ID。
  • 一致性Hash分片
    • 所谓一致性哈希,相同的哈希因子计算值总是被划分到相同的分区表中,不会因为分区节点的增加而改变原来数据的分区位置,有效的解决了分布式数据的拓容问题。
  • 枚举分片
    • 通过在配置文件中配置可能的枚举值, 指定数据分布到不同数据节点上, 本规则适用于按照省份、性别、状态拆分数据等业务
  • 日期分片
    • 根据日期时间来进行分库分表,常见的有按月分表,每个月产生一个新表。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/710366.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Transformer之Residuals Decoder

The Residuals 我们需要提到的编码器架构中的一个细节是,每个编码器中的每个子层(self-attention,,ffnn)周围都有一个残余连接,然后是 layer-normalization 步骤。 如果我们要可视化向量和与 self attention 相关的 layer-norm 运算&#x…

基于视觉识别的自动采摘机器人设计与实现

一、前言 1.1 项目介绍 【1】项目功能介绍 随着科技的进步和农业现代化的发展,农业生产效率与质量的提升成为重要的研究对象。其中,果蔬采摘环节在很大程度上影响着整个产业链的效益。传统的手工采摘方式不仅劳动强度大、效率低下,而且在劳…

图像处理基础——频域、时域

傅里叶分析不仅仅是一个数学工具,更是一种可以彻底颠覆一个人以前世界观的思维模式。 一、什么是频域 时域 时域是信号在时间轴随时间变化的总体概括;频域是把时域波形的表达式做傅立叶等变化得到复频域的表达式,所画出的波形就是频谱图&a…

Docker技术概论(8):Docker Desktop原生图形化管理

Docker技术概论(8) Docker 原生图形化管理 - 文章信息 - Author: 李俊才 (jcLee95) Visit me at CSDN: https://jclee95.blog.csdn.netMy WebSite:http://thispage.tech/Email: 291148484163.com. Shenzhen ChinaAddress of this article:…

字节序转换函数

目录 为什么要字节序转换?网络协议指定通讯字节序为大端字节序转换函数主机字节序转换为网络字节序hton1 (host to network l是length指长整型)htons (host to network s是short指短整型)两个函数的代码案例 网络字节序转主机字节序ntoh1ntohs 为什么要字节序转换&a…

【报名指南】2024年第九届数维杯数学建模挑战赛报名全流程图解

1.官方报名链接: 2024年第九届数维杯大学生数学建模挑战赛http://www.nmmcm.org.cn/match_detail/32 2.报名流程(电脑与手机报名操作流程一致) 参赛对象为在校专科生、本科生、研究生,每组参赛人数为1-3人(指导老师不…

【MySQL】数据查询——DQL基本数据库查询

目录 查询语法1. 查询表中所有的数据行和列,采用“*”符号2. 查询表中指定列的数据。3. 在查询中使用别名,使用“AS”关键字。4. 在查询中使用常量列:如果需要将一些常量的默认信息添加到输出结果中,以方便统计或计算。可以使用常…

Unity 预制体与变体

预制体作用: 更改预制体,则更改全部的以预制体复制出的模型。 生成预制体: 当你建立好了一个模型,从层级拖动到项目中即可生成预制体。 预制体复制模型: 将项目中的预制体拖动到层级中即可复制。或者选择物体复制粘贴。…

Jenkins自动化部署之流水线模式部署

文章目录 任务类型Pipeline流水线项目声明式的Pipeline脚本式Pipeline 示例脚本生成Tools配置示例 高级Pipeline Script from SCM 任务类型 在Jenkins中,有不同类型的任务(项目)适用于不同的构建需求。以下是一些常见的Jenkins任务类型&…

MYSQL03高级_新增用户、授予权限、授权底层表结构、角色理解

文章目录 ①. 登录服务器操作②. 用户的增删改③. 修改用户密码④. MySQL8密码管理⑤. 权限列表及原则⑥. 授予查看回收权限⑦. 底层权限表操作⑧. 角色的理解 ①. 登录服务器操作 ①. 启动MySQL服务后,可以通过mysql命令来登录MySQL服务器,命令如下: mysql –h hostname|hos…

32单片机基础:TIM输出比较

这个输出比较功能是非常重要的,它主要是用来输出PWM波形,PWM波形又是驱动电机的必要条件,所以你如果想用STM32做一些有电机的项目,比如智能车,机器人等。 IC: Input Capture 输入捕获 CC:Capture/Compare一般表示输入捕获和输出…

【学习心得】浏览器开发者工具中出现的VM开头的JS文件是什么?

一、现象描述 在Chrome的开发者工具中,你可能会看到一些以“VM”开头的JavaScript文件(如“VM111.js”)。 二、VM文件到底是什么? “VM”表示的是Virtual Machine(虚拟机),这些文件通常表示由浏…

网站文章被百度快速收录的工具

百度是中国最主要的搜索引擎之一,对于网站管理员来说,网站文章被百度快速收录是至关重要的,因为这直接影响着文章的曝光和网站的流量。然而,许多网站管理员都会问一个常见的问题:文章百度收录需要几天?在这…

C语言基础17 判断

断结构要求程序员指定一个或多个要评估或测试的条件,以及条件为真时要执行的语句(必需的)和条件为假时要执行的语句(可选的)。 C 语言把任何非零和非空的值假定为 true,把零或 null 假定为 false。 下面是…

MYSQL01高级_Linux版安装、各级别字符集、字符集与比较规则、SQL大小写规范

文章目录 ①. MySQL - linux版安装②. 字符集的相关操作③. 各级别的字符集④. 字符集与比较规则(了解)⑤. SQL大小写规范⑥. sql_mode的合理设置 ①. MySQL - linux版安装 ①. 进入mysql官网,找到安装文件 ②. 将抽取出来的文件放在linux下的opt下 MySQL Community Serv…

WebSocket介绍与应用

介绍 WebSocket 是基于TCP的一种的网络协议。它实现了浏览器与服务器全双工通信——浏览器和服务器只需要完成一次握手,两者之间就可以创建持久性的连接,并进行双向数据传输。 HTTP协议和WebSocket协议对比: HTTP是短连接WebSocket是长连接…

Vue3 + MybatisPlus实现批量删除功能

目录 一、后端 1.1 编写后端接口 1.2 编写service和其实现类 二、前端 2.1 组件加多选样式 2.2 实现多选调用的方法 2.3 编写批量删除的按钮 2.4 执行批量删除请求代码 一、后端 1.1 编写后端接口 PostMapping("/batchDelete") public CommonResult<Boo…

Python中简单正则获取百度新闻页面所有超链接示例

一、示例代码&#xff1a; import re import requestsheaders {"user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/""85.0.4183.83 Safari/537.36"} resp requests.get(http://news.…

自动化构建平台(三)Linux搭建私有的docker镜像库之Harbor的安装和使用详解

文章目录 前言一、Harbor的安装第一步&#xff1a;安装docker第二步&#xff1a;安装docker-compose第三步&#xff1a;安装Harbor 二、Harbor登录三、Harbor项目管理第一步&#xff1a;创建项目第二步&#xff1a;推送镜像 四、Harbor权限控制五、Harbor自动清理多余的镜像手动…

FPGA高端项目:FPGA基于GS2971的SDI视频接收+图像缩放,提供3套工程源码和技术支持

目录 1、前言免责声明 2、相关方案推荐本博已有的 SDI 编解码方案本方案的SDI接收转HDMI输出应用本方案的SDI纯verilog图像缩放视频拼接应用本方案的SDI HLS图像缩放视频拼接应用本方案的SDI视频编码动态字符叠加输出应用本方案的SDI视频编码多路视频融合视频叠加应用FPGA的SDI…