MySQL的分库分表

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群版 2核4GB 100GB
推荐场景:
搭建个人博客
云数据库 RDS MySQL,高可用版 2核4GB 50GB
简介: 1分库分表的几种形式把一个实例中的多个数据库拆分到不同的实例一后有的节点还是无法负担写负载把一个库中的表分离到不同的数据库中终极大招水平拆分!即分片处理(通常所说的分库分表即此)不同于MySQL的分区表是在同一个...

1分库分表的几种形式

把一个实例中的多个数据库拆分到不同的实例

img_adfa61138340b6d5adb1bdb2e9d8acf8.png

一后有的节点还是无法负担写负载

把一个库中的表分离到不同的数据库中

img_8313665538a9fc232fa0c82172cfe915.png

终极大招水平拆分!即分片处理(通常所说的分库分表即此)

不同于MySQL的分区表是在同一个节点中的同一个数据库建立的
而分片后通常是存在不同的物理节点上
由于技术难度极高,难以维护,情非得已,谨慎操作

2分片前的准备

对一个库中的相关表进行水平拆分到不同实例的数据库中


img_f3ad12b95f96a194f4f3682441a41f60.png

选择分区键

  • 尽量避免跨分区查询的发生(无法完全避免)
  • 尽量使各个分片中的数据平均

存储无需分片的表

  • 每个分片中存储一份相同的数据
    对于数据量不大且并不经常被更新的字典类表,经常需要和分区表一起关联查询,每个分片中存储一份冗余的数据可以更好提高查询效率,维护其一致性就很重要了
  • 使用额外的节点统一储存
    没有冗余问题,但是查询效率较差,需要汇总

在节点上部署分片

  • 每个分片使用单一数据库,并且数据库名也相同
    结构也保持相同,和单一节点时的一致
  • 将多个分片表存储在一个数据库中,并在表名上加入分片号后缀
  • 在一个节点中部署多个数据库,每个数据库包含一个切片

分配分片中的数据

期望尽量平均分配

  • 按分区键的Hash值取模来分配分片数据
    可以相对平均的分配数据,但是难以人为控制江苏数据分配到哪个分片中
  • 按分区键的范围来分配分片数据
    常用于分区键为日期或数值类型,可以清楚知道数据被分配到哪个分片中,但易产生分配不均及访问量不均
  • 利用分区键和分片的映射表来分配分片数据
    前面两种都无人发灵活地控制哪些数据存储在哪些分片中于是有此法
    可使用缓存方式读写 映射表,防止成为数据库瓶颈

生成全局唯一ID

  • 使用auto_increment_incrementauto_increment_offset服务器变量让MySQL以期望的值和偏移量来增加auto_increment列的值
    方法简单,不依赖于某节点,比较普遍采用但需要非常仔细的配置服务器,不适用于一个节点包含多个分区表情况
  • 使用全局节点来生成ID
    在一个全局数据库节点中创建一个包含auto_increment列的表,APP通过该表生成唯一数字,但该表易成为系统瓶颈
  • 在Redis等缓存nosql服务器中创建全局ID
    避免了MySQL性能低的问题
相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
2月前
|
存储 SQL 关系型数据库
MySQL分库分表
MySQL分库分表
53 0
|
2月前
|
关系型数据库 MySQL Java
MySQL单表膨胀优化之MyCat分库分表
MySQL单表膨胀优化之MyCat分库分表
91 0
|
2月前
|
SQL 关系型数据库 MySQL
②⑩① 【MySQL】什么是分库分表?拆分策略有什么?什么是MyCat?
②⑩① 【MySQL】什么是分库分表?拆分策略有什么?什么是MyCat?
76 0
|
2月前
|
SQL 存储 关系型数据库
Mysql系列-5.Mysql分库分表(中)
Mysql系列-5.Mysql分库分表
49 0
|
2月前
|
中间件 关系型数据库 Java
MySQL数据库分库分表方案
MySQL数据库分库分表方案
204 0
MySQL数据库分库分表方案
|
2月前
|
NoSQL 关系型数据库 MySQL
实时计算 Flink版操作报错之同步MySQL分库分表500张表报连接超时,是什么原因
在使用实时计算Flink版过程中,可能会遇到各种错误,了解这些错误的原因及解决方法对于高效排错至关重要。针对具体问题,查看Flink的日志是关键,它们通常会提供更详细的错误信息和堆栈跟踪,有助于定位问题。此外,Flink社区文档和官方论坛也是寻求帮助的好去处。以下是一些常见的操作报错及其可能的原因与解决策略。
|
12天前
|
算法 关系型数据库 MySQL
MySQL分库分表
【7月更文挑战第11天】分库分表策略涉及数据源、库和表的划分,如订单表可能分布于多层结构中。面试时,主键生成是关键点。自增主键在不分库分表时适用,但在分表场景下会导致冲突。例如,按`buyer_id % 2`分两张表,自增ID无法保证全局唯一。因此,需要全局唯一且能自增的ID,如雪花算法,兼顾性能和高并发需求。
12 1
|
18天前
|
SQL 关系型数据库 MySQL
mysql面试之分库分表总结
mysql面试之分库分表总结
35 0
|
1月前
|
算法 Java 数据库连接
【分库分表】基于mysql+shardingSphere的分库分表技术
【分库分表】基于mysql+shardingSphere的分库分表技术
31 0
|
2月前
|
存储 关系型数据库 MySQL
【MySQL系列笔记】分库分表
分库分表是一种数据库架构设计的方法,用于解决大规模数据存储和处理的问题。 分库分表可以简单理解为原来一个表存储数据现在改为通过多个数据库及多个表去存储,这就相当于原来一台服务器提供服务现在改成多台服务器组成集群共同提供服务。
85 8