当前位置: 首页 > news >正文

Day05 04-MySQL分库分表介绍

文章目录

      • 第十七章 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.lryc.cn/news/93217.html

相关文章:

  • 基于SpringBoot+vue的毕业生信息招聘平台设计和实现
  • git一定要学会,加油
  • TVM面试题
  • CSS相关面试题
  • 6.11总结
  • Hazel游戏引擎(008-009)事件系统
  • 【C++】 STL(上)STL简述、STL容器
  • 【002 基础知识】什么是原子操作?
  • English Learning - L3 作业打卡 Lesson5 Day32 2023.6.5 周一
  • 深度学习应用篇-自然语言处理-命名实体识别[9]:BiLSTM+CRF实现命名实体识别、实体、关系、属性抽取实战项目合集(含智能标注)【上篇】
  • 腾讯安全SOC+荣获“鑫智奖”,助力金融业数智化转型
  • Python绘制气泡图示例
  • 数学建模经历-程序人生
  • 数字电子电路绪论
  • 电脑丢失dll文件一键修复需要什么软件?快速修复dll文件的方法
  • 你知道微信的转账是可以退回的吗
  • 【链表Part01】| 203.移除链表元素、707.设计链表、206.反转链表
  • 如何使用Postman生成curl?
  • CSS灯光效果,背景黑金效果
  • 这里推荐几个前端icon网站(动图网站)
  • 【图神经网络】用PyG实现图机器学习的可解释性
  • HarmonyOS ArkTS Ability内页面的跳转和数据传递
  • MySQL 8.0.29 instant DDL 数据腐化问题分析
  • Haproxy搭建负载均衡
  • SpringBoot:SpringBoot启动加载过程 ④
  • 抽象轻松JavaScript
  • 深入理解CSS字符转义行为
  • 【论文阅读】(2023.05.10-2023.06.03)论文阅读简单记录和汇总
  • FPGA开发-ddr测试
  • BUUCTF 大帝的密码武器 1