ReturnTmp's Blog ReturnTmp's Blog
首页
基础课程
编程语言
框架技术
运维笔记
人工智能
随笔摘录
  • 友链
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

ReturnTmp

分享有趣好玩的计算机知识
首页
基础课程
编程语言
框架技术
运维笔记
人工智能
随笔摘录
  • 友链
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • GLIBC_2.28 not found 问题解决
  • Monorepo 多项目单仓库
  • Renovate 第三方依赖更新监控
  • 【IDEA】Maven 构建项目生成文件解析
  • K8s

  • Zotero 使用指南
  • package-lock.json 是否提交问题
  • 『ARM』和『x86』处理器架构解析指南
  • GlassFish 安装配置
  • 手把手教你安装配置『Oracle Database 19c』
  • Oracle Database 19c 彻底卸载
  • 语雀故障回顾
  • OpenStack 云计算平台 Nova 计算服务学习指南
  • Vue devServer 教程
  • Swagger 导出 API 文档
  • MapStruct POJO 映射框架指南
  • IDEA 代码热部署和热加载
  • SpringBoot 启动参数配置
  • Nacos 入门指南
  • seleuim 指南
  • Spring 服务降级熔断
  • Maven BOM 解析
  • .vscode 文件夹
  • Spring Security Token 认证
  • SpringBoot 基于 Actuator 和 Admin 实现应用监控管理
  • SPM/SCM 流量跟踪体系
  • Netty 入门
  • Flyway 数据库版本管理实战指南
  • Swagger 2 和 3 安装区别
  • MP 配置分页
  • MySQL 分库分表
    • 前言
    • 类型
      • 1. 水平分库
      • 2. 垂直分库
      • 3. 水平分表
      • 4. 垂直分表
    • 常见问题
    • 步骤
    • 参考链接
  • Git Commit 提交规范,变更日志、版本发布自动化和 Emoji 提交标准
  • VSCode 插件 i18n Ally 进行国家化配置
  • Vue3 组合式 全局挂载
  • TS 教程
  • 架构解析:同城双活、异地多活、单元化架构
  • Spring 跨域配置
  • SpringCloud 微服务实战
  • Sentinel 流量治理组件教程
  • leetcode 上分
  • JMeter 压测
  • Netty IM 系统
  • IDEA 插件开发
  • SpringBoot 邮件服务 集成配置 详解
  • Maven 依赖包冲突问题解决
  • 社区项目 forest 修改
  • Maven 项目命名规范
  • 新版 PyCharm 设置 Conda 虚拟环境
  • 框架工具
ReturnTmp
2023-11-28
目录

MySQL 分库分表

# 前言

MySQL 分库分表是一种数据库分割和划分数据表的技术。它将原本存储在单个数据库中的数据分散到多个数据库中,将原本单个表中的数据分散到多个数据表中。通过这种方式,可以提高数据库的查询性能和扩展性,同时降低数据库的负载

当数据库中存储的数据量庞大,且并发访问量高时,单个数据库可能无法满足快速查询和高并发的需求。此时,通过分库分表可以将数据分散存储,提高查询效率和负载均衡,进而提高系统的性能

常见的分库分表中间件包括 MyCAT、Atlas、ShardingSphere 等。这些中间件可以提供高性能的分库分表功能,并且具有一些自动化的管理工具和特性

但是上面这种方式会造成应用程序的侵入,如果成本允许的情况下,使用诸如 PingCAP TiDB,阿里云 DRDS等分布式数据库方案会更合适,但对应用程序没有侵入性,同时也可以比较好的支撑业务增长和系统快速迭代

# 类型

image.png

# 1. 水平分库

水平分库是指将原本存储在一个数据库中的数据分散到多个独立的数据库中。实现水平分库的方法一般有两种:

  • 按数据范围分库:根据数据的某个字段的取值范围,将数据分散到不同的数据库中。比如,根据用户 ID 的奇偶性将数据分散到两个数据库中。
  • 按哈希算法分库:根据数据的哈希值,将数据均匀地分散到多个数据库中。这种分库方式可以保证数据在各个库中的分布相对均衡。

# 2. 垂直分库

垂直分库是指将原本存储在一个数据库中的数据根据表的关系分散到多个数据库中。实现垂直分库的方法一般有两种:

  • 按功能分库:将不同功能的数据分散到不同的数据库中。比如,将用户信息和订单信息分别存储在不同的数据库中。
  • 按表的关系分库:将数据库中的表按照其关系划分到不同的数据库中。比如,将用户表和订单表分别存储在不同的数据库中。

# 3. 水平分表

水平分表是指将原本存在单个数据表中的数据分散存储到多个数据表中。实现水平分表的方法一般有两种:

  • 按数据范围分表:根据数据的某个字段的取值范围,将数据分散到不同的数据表中。比如,根据用户 ID 的奇偶性将数据分散到两个数据表中。
  • 按哈希算法分表:根据数据的哈希值,将数据均匀地分散到多个数据表中。这种分表方式可以保证数据在各个表中的分布相对均匀。

# 4. 垂直分表

垂直分表是指将原本存在单个数据库表中的字段根据字段的不同特性分散到多个数据表中。实现垂直分表的方法一般有两种:

  • 按类型分表:将不同类型的字段分散到不同的数据表中。比如,将用户的基本信息和扩展信息分别存储在不同的数据表中。
  • 按字段关系分表:将字段之间有关联的数据分散存储到不同的数据表中。比如,将用户的基本信息和订单信息分别存储在不同的数据表中。

# 常见问题

分库分表涉及到对数据库访问部分的重构,需要通过分布式访问框架或代码层面进行适配。因此,对业务代码的影响会比较大,需要进行大量修改和优化

跨库查询和跨库事务是分库分表中需要解决的难点。对于跨库查询,可以通过分布式查询引擎或中间件进行处理;对于跨库事务,可以使用两阶段提交等分布式事务方案

分库分表会增加系统的复杂性,包括数据一致性、数据迁移、数据恢复等方面的挑战。因此,在引入分库分表之前,需要充分评估系统的可扩展性和团队的技术实力

# 步骤

文档:数据分片 :: ShardingSphere (apache.org) (opens new window)

# 参考链接

  • MySQL 分库分表操作:解读分布式数据库技术和最佳实践-PingCAP |  平凯星辰 (opens new window)
  • MySQL 分库分表怎么实现?| 详细教程与实例-PingCAP |  平凯星辰 (opens new window)
编辑 (opens new window)
上次更新: 2023/11/28, 12:55:10
MP 配置分页
Git Commit 提交规范,变更日志、版本发布自动化和 Emoji 提交标准

← MP 配置分页 Git Commit 提交规范,变更日志、版本发布自动化和 Emoji 提交标准→

最近更新
01
百度网盘加速
03-24
02
新版 PyCharm 设置 Conda 虚拟环境
03-24
03
腾讯云域名转到阿里云
03-24
更多文章>
Theme by Vdoing | Copyright © 2023-2024 ReturnTmp | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式