Day05 04-MySQL分库分表介绍

news2024/7/6 19:18:57

文章目录

      • 第十七章 MySQL分库分表
        • 17.1 什么是分库分表
        • 17.2 为什么要分库分表
        • 17.3 垂直切分
          • 17.3.1 垂直分库
          • 17.3.2 垂直分表
        • 17.4 水平切分
          • 17.4.1 水平分库
          • 17.4.2 水平分表
          • 17.4.3 常见的水平切分规则

第十七章 MySQL分库分表

17.1 什么是分库分表

MySQL数据库常见的优化方案中,有一种方案就是“分库分表”。那么什么叫“分库分表”呢?其实“分库分表”,从名字上就可以理解是什么意思:

  • 分库:将一个数据库拆分成若干数据库,其中的表分布到不同的数据库中。

  • 分表:将一个表拆分成若干的小表,其中的数据分布在多张表中。

一个大的数据库可以拆分成为小个数据库,一个大的表也可以拆分成为若干个小的表。拆分之后得到的小的数据库、小的表中的数据量肯定会变少,这样就可以在一定程度上提升查询时候的效率。

17.2 为什么要分库分表

在企业中,随着时间的积累和用户的积累,数据库中的数据量会变得越来越大。如果一张表中的数据量变得非常的庞大了,例如有数千万行数据,此时在这张表中查询数据的时候,将会变得非常的慢。而且,如果这个时候涉及到了多表的联合查询,将会更加耗时,甚至对于性能不高的机器来说,可能还会直接卡死。

因此,我们就需要对这些数据表“减负”,将一个数据库中的数据,分布到多个数据库中存储;将一张表中的数据,分布到多张表中存储。这样可以有效地减少单个表中的数据量,从而达到提高查询效率的目的。

在进行库表切分的时候,常见的有两种方式来实现:垂直切分 和 水平切分。

17.3 垂直切分

17.3.1 垂直分库

垂直分库就是将一个数据库中的表,拆分到多个切分之后的数据库中。在拆分的时候,需要以表为切分的依据,按照不同的业务场景,将数据表拆分到不同的数据库中。

如下图所示:

切分之前的数据库中,涵盖的数据太多、太复杂,一个电商系统中很多的业务场景下用到的数据表,都在一个数据库中。如果需要对这样的数据库进行垂直切分,需要首先提炼出不同的业务场景,例如用户信息的数据库、商品信息的数据库、订单信息的数据库。然后将原来数据库中的表,根据业务场景,拆分到不同的数据库中即可。

例如:订单表、订单详情表,这些都是与订单相关联的数据,就可以将它们拆分到订单数据库中。

垂直切分库

17.3.2 垂直分表

垂直分表就是将一个数据表中的数据,拆分到多个切分之后的数据表中。在拆分的时候,需要以字段为切分的依据,将不同属性的字段拆分到不同的数据表中。

如下图所示:

原来的学生表中的字段非常的多,涵盖的学生的信息也非常的全面。但是这些字段其实是可以分为不同的属性的,在需要垂直分表的时候,就可以将这样的数据表,按照不同的字段属性,对表进行拆分。

例如:sid、sname、age、gender都是属于学生的基本信息的,可以将其拆分到学生基本信息表中。

垂直切分表

17.4 水平切分

17.4.1 水平分库

水平分库就是将一个数据库中的表,拆分到多个切分之后的数据库中。在拆分的时候,需要以某字段的值为依据,按照一定的切分规则,将数据拆分到不同的数据库中。切分之后的数据库中每个表的结构都是一样的,但是数据是完全不同的。

17.4.2 水平分表

水平分表就是将一个数据表中的数据,拆分到多个切分之后的数据库中。在拆分的时候,需要以某字段的值为依据,按照一定的切分规则,将数据拆分到不同的数据表中。切分之后每一个表的结构是完全相同的,但是表中的数据是完全不同的。

17.4.3 常见的水平切分规则
  • 范围切分:根据指定的字段,切分若干范围,将不同范围的数据切分到不同的表中。

    例如:学生表中,主键为sid,且单调递增。

    在范围切分的规则中,可以将 [0, 100] 的学生切分到一个表中,[101, 200]的学生切分到一个表中,以此类推。

  • 哈希切分:根据指定的字段,根据哈希值,将不同范围的数据切分到不同的表中。

    例如:学生表中,主键为sid,且单调递增。

    在哈希切分的时候,可以提前制定好需要分的表的数量,用哈希值求模的方式,将数据拆分到不同的表中。

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

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

相关文章

新的管理中心应用

大家好,才是真的好。 Notes/Domino 14 Drop1如约而至,让我们有了很多内容要写。首先是管理新特性,就像上篇和大家介绍的,感受最直接的就是新的管理中心应用AdminCentral。 以目前的Drop1环境来看,管理中心应用主要功…

plus.runtime.version总是13.8.4

引言 最近在uniapp中使用到了plus.runtime.version,但是在开发环境下一直无法获取到真正的版本号,他的值一直都是13.8.4,在全局进行搜索也没有发现哪里设置了13.8.4,后来查阅了相关资料才知道这并不是自己写错了。 场景复现&…

你知不知道ai如何绘画的

有没有想要自己能绘画一幅有艺术感的画呢?想自己也能将自己所想的事、物或景绘画出来呢?其实你不用担心你的绘画功底不行,因为现在有一门ai绘画的技术,它可以将你提供的信息用智能技术自动绘画,你也可以把它当做一门新…

数字IC前端学习笔记:仲裁轮询(一)

相关文章 数字IC前端学习笔记:LSFR(线性反馈移位寄存器) 数字IC前端学习笔记:跨时钟域信号同步 数字IC前端学习笔记:信号同步和边沿检测 数字IC前端学习笔记:锁存器Latch的综合 数字IC前端学习笔记&am…

【面试必问】Spring核心之面向切面编程(AOP)

tip:作为程序员一定学习编程之道,一定要对代码的编写有追求,不能实现就完事了。我们应该让自己写的代码更加优雅,即使这会费时费力。 💕💕 推荐:体系化学习Java(Java面试专题&#…

【数据结构】八大排序算法

目录 一、直接插入排序 二、希尔排序 三、选择排序 四、堆排序 五、冒泡排序 六、快速排序 1、递归版本 1.1 hoare 法 1.2 挖坑法 1.3 前后指针法 2、非递归版本 3、快速排序的优化 3.1 三数取中 3.2 小区间优化 七、归并排序 1、递归版本 2、非递归版本 八、计数排序 …

【Spring Security】的RememberMe功能流程与源码详解

文章目录 前言原理 基础版搭建初始化sql依赖引入配置类验证 源码分析 进阶版集成源码分析疑问1疑问2 鉴权 升级版集成初始化sql配置类验证 源码分析鉴权流程 扩展版 前言 之前我已经写过好几篇权限认证相关的文章了,有想复习的同学可以查看【身份权限认证合集】。今…

Ada Tutorial(3)SPARK2——Post condition + Loop Invariant 后置条件 + 循环不变量

文章目录 divmod循环不变量 v.s. 后置条件扩展思考 divmod -- divmod.adb package body DivMod with SPARK_Mode isprocedure DivMod(X : Positive; N : Positive; K : out Natural; Remainder : out Natural)isY : Natural : X;beginK : 0;while Y > N loopY : Y - N;K : …

MySQL 日期与时间函数

一、获取日期、时间 函数用法CURDATE(),CURRENT_DATE()返回当前日期,只包含年、月、日CURTIME() , CURRENT_TIME()返回当前时间,只包含时、分、秒NOW() , SYSDATE(),CURRENT_TIMESTAMP() , LOC…

为什么企业和品牌一定要创建百度百科词条呢?

在企业和品牌宣传推广方面,百度百科作为一个权威的知识平台,早已成为了宣传阶段非常重要的一环。本文伯乐网络传媒将从以下几个方面探讨为什么企业和品牌一定要创建百度百科词条。 一、提升企业和品牌知名度 在信息时代,信息的获取渠道变得更…

PySpark简单使用(零)

介绍 Spark是Apache基金会旗下的顶级开源项目,用于对海量数据进行大规模分布式计算。PySpark是Spark的Python实现,是Spark为Python开发者提供的编程入口,用于以Python代码完成Spark任务的开发PySpark不仅可以作为Python第三方库使用&#xf…

【深入浅出 Spring Security(九)】解决跨域问题和 Axios 所需配置

跨域 一、SpringMVC 跨域的解决方案CrossOrigin(注解的方式解决)addCorsMappings(实现WebMvcConfigurer接口,重写方法) 二、Spring Security 跨域的解决方案前后端跨域测试(前端相关配置) 啥是跨…

计算机提示“找不到vcruntime140.dll,无法继续执行代码可”以这样子修复

首先,对于那些不熟悉的人来说,vcruntime140.dll是一个关键文件,用于在Windows操作系统上运行使用C语言编写的大型应用程序。如果你正在运行或安装这样的应用程序,但找不到vcruntime140.dll文件,那么你的应用程序可能无…

word插入图片为何无法显示?

word是我们常用的软件,在使用过程中,我们难免会遇到这样或那样的问题,解决问题的思路我认为首先要找出原因,然后再想办法解决才是最好的方案。 如果在 Word 文档中插入的图片无法显示,可能是以下原因之一:…

安装ORB-SLAM2纯记录(caffe)

ubuntu20.04 显卡配置3050TI 显卡驱动: NVIDIA-SMI 525.116.04 Driver Version: 525.116.04 cuda:Cuda compilation tools, release 11.0, V11.0.221 eigen:3.4.0 opencv 3.4.9 opencv下载链接 pangolin :高翔SLAM十四讲中的 没有安装最新版本 安装pangolin时候出…

有趣的图(二)(56)

小朋友们好,大朋友们好! 我是猫妹,一名爱上Python编程的小学生。 和猫妹学Python,一起趣味学编程。 今日主题 咱们书接上回,上次学了图的基本概念,你都学会了吗? 咱们今天要学习内容如下&a…

通过Appium Desktop实现录制功能并导出自动化脚本

1、我们进入下面这个界面 图中红色标记1为 “top by coordinates” 按钮, 这是一种通过坐标定位元素的方式。 图中红色标记2为 “Start Recording” 按钮, 选中表示处理录制状态。 2、点击“top by coordinates” 按钮,再点击 “Start Recor…

vue3基础知识的简单应用

vue3基础知识的简单应用 vue3基础知识的简单应用运行结果 vue3基础知识的简单应用 父组件代码 <template><div class"home"><img alt"Vue logo" src"../assets/logo.png"><HelloWorld msg"Welcome to Your Vue.js A…

linux opencv4.2静态库编译及链接

1. 编译静态库 拉取opencv源码&#xff1a; https://github.com/opencv/opencv.git进入源码根目录&#xff0c;在platforms/linux目录下创建编译脚本build_linux.sh cd platforms/linux vi build_linux.sh脚本里配置cmake编译参数&#xff0c;这里编译静态库需要将 -DBUILD_S…

华为OD机试真题 JavaScript 实现【勾股数元组】【2022Q4 100分】,附详细解题思路

一、题目描述 如果三个正整数A、B、C ,ABC则为勾股数 如果ABC之间两两互质&#xff0c;即A与B&#xff0c;A与C&#xff0c;B与C均互质没有公约数&#xff0c; 则称 其为勾股数元组。 请求出给定n~m范围内所有的勾股数元组。 二、输入描述 起始范围 1 < n < 10000 n &…