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

【MySQL篇10】:四种分库分表详解

文章目录

  • 分库分表:应对海量数据量
    • 1. 垂直分库
    • 2. 垂直分表
    • 3. 水平分库
    • 4. 水平分表
    • 总结分库分表策略

分库分表:应对海量数据量

随着业务的发展,单个数据库实例或单张表的数据量可能会变得非常庞大,导致查询性能下降、写入压力增大、维护困难等问题为了解决这些问题,我们需要采用分库分表 (Sharding) 的技术

分库分表的核心思想是将一个大型数据库或表的数据分散到多个较小、更易于管理的数据库或表中这样可以有效地降低单个数据库或表的负载,提高整体系统的吞吐量可扩展性

分库分表主要有两种策略:垂直分库分表水平分库分表

1. 垂直分库

  • 定义: 垂直分库是根据业务功能或模块将不同的表分散到不同的数据库中简单来说,就是将原本在一个数据库中的不同业务的表,分别放到各自独立的数据库中
  • 类比: 想象一下你有一个大仓库,里面存放着各种各样的物品:食品、服装、电子产品等等垂直分库就像是你在仓库里划分出不同的区域,一个区域专门存放食品,一个区域专门存放服装,一个区域专门存放电子产品
  • 优点:
    • 职责清晰: 每个数据库负责一个独立的业务模块,方便管理和维护
    • 隔离性好: 不同业务之间的数据库相互独立,互不影响,提高了系统的稳定性和可用性
    • 易于扩展: 可以根据不同业务的需求独立扩展数据库资源
  • 缺点:
    • 跨库 Join 困难: 如果需要跨越不同数据库进行 JOIN 操作,会比较复杂,通常需要通过应用层进行关联查询或数据冗余
    • 事务管理复杂: 跨库事务需要分布式事务支持,增加了复杂性
  • 适用场景: 适用于业务模块划分清晰,不同模块之间关联较少的情况;对于微服务架构,每个微服务对应一个数据库,是根据业务进行拆分的,这个其实就是垂直拆分

2. 垂直分表

  • 定义: 垂直分表是将一张表的列按照其重要性或访问频率进行拆分,将不经常访问或字段较多的列拆分到单独的表中
  • 类比: 想象一下你的身份证信息,上面有很多字段:姓名、性别、出生日期、住址、民族等等垂直分表就像是将身份证上的信息拆分成两部分:一部分是经常需要用到的核心信息(姓名、性别),另一部分是不经常用到的详细信息(住址、民族)
  • 优点:
    • 提高查询效率: 经常访问的字段放在一起,可以减少磁盘 I/O,提高查询速度
    • 减少数据冗余: 可以避免在主表中存储大量不常用字段
  • 缺点:
    • Join 操作: 查询完整数据时需要进行 JOIN 操作,可能会增加一些开销
    • 维护复杂: 需要同时维护多张表
  • 适用场景: 适用于单张表字段过多,且部分字段访问频率较低的情况

3. 水平分库

  • 定义: 水平分库是根据某种规则(如用户 ID、订单号等)将一张表的数据分散到多个数据库中的多张表中每个数据库中的表结构是相同的,只是存储的数据范围不同
  • 类比: 想象一下你有一个巨大的图书馆,里面有很多书水平分库就像是你在不同的城市建立了多个图书馆,每个图书馆都存放一部分书,但每个图书馆的内部结构(书架、分类等)是相同的你可以根据书名的首字母或者作者来决定这本书应该放在哪个城市的图书馆
  • 优点:
    • 突破单库容量限制: 可以存储海量数据,突破单个数据库的存储容量限制
    • 提高并发能力: 读写请求可以分散到多个数据库,提高了系统的并发处理能力
    • 易于扩展: 可以根据数据量的增长增加数据库节点
  • 缺点:
    • 分片规则复杂: 需要设计合理的分片规则,否则可能导致数据分布不均匀
    • 跨库查询复杂: 跨越多个数据库进行查询需要分布式查询支持
    • 维护和管理复杂: 需要管理多个数据库实例
  • 适用场景: 适用于数据量巨大,需要突破单库容量限制的情况

4. 水平分表

  • 定义: 水平分表是根据某种规则(如用户 ID、订单号等)将一张表的数据分散到同一个数据库中的多张表中每个表结构是相同的,只是存储的数据范围不同
  • 举例: 对于类似历史(积分)排行榜一类的表,就可以按照月份、赛季等进行水平拆分,加快查询效率,需要查询某个月份、赛季排行,直接拼接含有月份、赛季信息排行的表名(分表表名一般与分表依据有关),到专属的分表中查询即可
  • 优点:
    • 提高查询效率: 查询时只需要在部分表中进行扫描,减少了扫描范围
    • 提高并发能力: 读写请求可以分散到多个表中,提高了表的并发处理能力
  • 缺点:
    • 分片规则复杂: 需要设计合理的分片规则
    • 跨表查询复杂: 跨越多个表进行查询需要分布式查询支持
  • 适用场景: 适用于单张表数据量巨大,但单个数据库容量尚可,主要想提高单表性能的情况

总结分库分表策略

策略拆分维度拆分对象优点缺点适用场景
垂直分库业务功能数据库职责清晰,隔离性好,易于扩展跨库 Join/事务复杂业务模块划分清晰,关联较少
垂直分表字段提高查询效率,减少数据冗余Join 操作,维护复杂单表字段多,部分字段访问频率低
水平分库数据行数据库突破单库容量限制,提高并发能力,易于扩展分片规则/跨库查询/维护复杂数据量巨大,需要突破单库容量限制
水平分表数据行提高查询效率,提高并发能力分片规则/跨表查询复杂单表数据量巨大,但单库容量尚可,提高单表性能

通常情况下,实际应用中会结合使用 垂直分库水平分库分表 策略,根据具体的业务场景和数据量来选择最合适的分片方案

http://www.lqws.cn/news/454339.html

相关文章:

  • 云蝠智能大模型呼叫系统:为企业提供专业的智能客户联络
  • 第3讲、LangChain性能优化:上下文缓存与流式响应实战指南
  • 通过Radius认证服务器实现飞塔/华为防火墙二次认证:原理、实践与安全价值解析
  • django serializer __all__中 额外添加外键里的某一个属性
  • King’s LIMS 系统引领汽车检测实验室数字化转型
  • Unity3d中使用Mirror进行自定义消息通信
  • 解锁决策树:数据挖掘的智慧引擎
  • YOLO系列模型基础与实战(YOLO系列发展线)
  • YOLOv11改进 | RCS-OSA与C3k2融合架构技术详解
  • 容器技术技术入门与Docker环境部署
  • 在 CentOS 7.9 中 Node 18.20.2 安装指南
  • HTTP 请求方法与状态码
  • MySQL慢SQL优化全攻略:从诊断到调优
  • day30 导包
  • html和css实现文本打断换行、自动换行
  • postgresql DDL脚本
  • 电影感户外柔和光线人像街拍摄影后期Lr调色教程,手机滤镜PS+Lightroom预设下载!
  • 高防IP怎么选
  • 开源CMS vs 闭源CMS:二次开发究竟有何不同?
  • 工具:Autosar:DBC转ARXML
  • PLuTo 编译器示例17-20
  • 24. 开发者常用工具:抓包,弱网模拟,元素检查
  • TDengine 与开源可视化编程工具 Node-RED 集成
  • 基于微信小程序的美食点餐订餐系统
  • tkinter Text 组件学习指南
  • Python函数:全面教程
  • 【秒杀系统设计】
  • Logback 在java中的使用
  • VS2022 C#【自动化文件上传】AutoFileUpload 新需求 V13
  • 从“数据困境”到“数据生态”:DaaS重塑三甲医院医疗数据治理