MySQL分库分表原理

MySQL分库分表原理MySQL 分库分表原理前言数据库为什么要分库分表影响数据库性能的三个要素数据量磁盘数据库连接 1 分库分表的原理和实现 1 1 什么是分区 分表 分库分区分表分库 1 2 什么时候考虑使用分区 分区解决的问题分区的实现方式 简单 例如 1 3 分库分表概述 1 4 适用场景 1 5 业务分库 又叫 mysql 垂直拆分 1 6 业务分表 又叫水平拆分 1 6 1 业务分表带来的问题 1 6 2 路由问题 1 6

前言

数据库为什么要分库分表

影响数据库性能的三个要素

数据量

磁盘

数据库连接

1、分库分表的原理和实现

1.1 什么是分区、分表、分库

分区

就是把一张表的数据分成N个区块,在逻辑上看最终只是一张表,但底层是由N个物理区块组成的,分区实现比较简单,数据库mysql、oracle等很容易就可支持。

分表

就是把一张表按一定的规则分解成N个具有独立存储空间的实体表。系统读写时需要根据定义好的规则得到对应的字表明,然后操作它。

分库

一旦分表,一个库中的表会越来越多

1.2 什么时候考虑使用分区?

一张表的查询速度已经慢到影响使用的时候。

sql经过优化
数据量大
表中的数据是分段的
对数据的操作往往只涉及一部分数据,而不是所有的数据





分区解决的问题

主要可以提升查询效率

分区的实现方式(简单),例如:

mysql5 开始支持分区功能 CREATE TABLE sales ( id INT AUTO_INCREMENT, amount DOUBLE NOT NULL, order_day DATETIME NOT NULL, PRIMARY KEY(id, order_day) ) ENGINE=Innodb PARTITION BY RANGE(YEAR(order_day)) ( PARTITION p_2010 VALUES LESS THAN (2010), PARTITION p_2011 VALUES LESS THAN (2011), PARTITION p_2012 VALUES LESS THAN (2012), PARTITION p_catchall VALUES LESS THAN MAXVALUE); 

1.3 分库分表概述

在这里插入图片描述
读写分离分散数据库读写操作压力,分库分表分散存储压力,以及数据库连接压力

1.4 适用场景

在这里插入图片描述
类似读写分离,分库分表也是确定没有其他优化空间之后才采取的优化方案。那如果业务真的发展很快岂不是很快要进行分库分表了?
那为何不一开始就设计好呢?
按照架构设计的“三原则”(简单原则,合适原则,演化原则),简单分析一下:
首先,这里的“如果”事实上发生的概率比较低,做10个业务有一个业务能活下去就很不错了,更何况快速发展,和中彩票的概率差不多。
如果我们每个业务上来就按照淘宝、微信的规模去做架构设计,不但会累死自己,还会害死业务。
其次,如果业务真的发展很快,后面进行分库分表也不迟。因为业务发展好,相应的资源投入就会加大,可以投入更多的人和更多的钱,那业务分库带来的代码和业务复杂问题就可以通过加人来解决,成本问题也可以通过增加资金来解决。
什么情况下要开始准备分库分表呢?
例如,你的交易业务表以及有1000W的数据了,而且数据的增长速度,按照每个月50W条的数据增长,那么就要和DBA商议准备做数据迁移和分库分表的打算了。以为一年后将会有1600W条数据,所以必须要分库分表了。
















1.5 业务分库(又叫mysql垂直拆分)

在这里插入图片描述
在这里插入图片描述

1.6 业务分表(又叫水平拆分)

在这里插入图片描述
在这里插入图片描述

1.6.1 业务分表带来的问题:

1.6.2 路由问题

在这里插入图片描述

1.6.2 数据库操作问题

在这里插入图片描述

1.6.3 数据库分库分表的实现方法

在这里插入图片描述
类似读写分离,具体实现也是“程序代码封装”和“中间件封装”,但具体实现复杂一些,因为还有要判断SQL中具体操作的表,具体操作(例如count、order by、group by等),根据具体操作做不同的处理。

2 读写分离的原理和实现

2.1、什么是读写分离

读写分离,基本的原理是让主数据库处理事务性增、改、删操作(INSERT、UPDATE、DELETE),而从数据库处理SELECT查询操作。数据库复制被用来把事务性操作导致的变更同步到集群中的从数据库。

2.2、为什么要读写分离呢?

因为数据库的“写”(写10000条数据到oracle可能要3分钟)操作是比较耗时的。

但是数据库的“读”(从oracle读10000条数据可能只要5秒钟)。

所以读写分离,解决的是,数据库的写入,影响了查询的效率。

2.3、什么时候要读写分离?

2.4 主从复制、读写分离的基本设计

一台主、多台从,主提供写操作,从提供读操作。

读写分离的实现:

我们只需要实现读写分离,主从复制数据一般由数据库级来实现同步,当然也可以自己去实现同步,只是需要考虑的点比较多。

3 分库分表、读写分离总结:

1.分区

对业务透明,分区只不过把存放数据的文件分成了许多小块,根据一定的规则把数据文件(MYD)和索引文件(MYI)进行了分割,分区后的表呢,还是一张表。

2.分表

当数据量大到一定程度的时候,都会导致处理性能的不足,这个时候就没有办法了,只能进行分表处理。也就是把数据库当中数据根据按照分库原则分到多个数据表当中,这样,就可以把大表变成多个小表,不同的分表中数据不重复,从而提高处理效率。

3.分库

分表和分区都是基于同一个数据库里的数据分离技巧,对数据库性能有一定提升,但是随着业务数据量的增加,原来所有的数据都是在一个数据库上的,网络IO及文件IO都集中在一个数据库上的,因此CPU、内存、磁盘IO、网络IO都可能会成为系统瓶颈。

当业务系统的数据容量接近或超过单台服务器的容量、QPS/TPS接近或超过单个数据库实例的处理极限等此时,往往是采用垂直和水平结合的数据拆分方法,把数据服务和数据存储分布到多台数据库服务器上。

4.读写分离方案

当数据库读远大于写,查询多的情况,就可以考虑主数据负责写操作,从数据库负责读操作,一主多重,从而把数据读写分离,最后还可以结合redis等缓存来配合分担数据的读操作,大大的降低后端数据库的压力。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/229153.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月16日 下午5:21
下一篇 2026年3月16日 下午5:21


相关推荐

  • CAS单点登录(三)–服务端改造(登录页及登录方式的自定义)

    CAS单点登录(三)–服务端改造(登录页及登录方式的自定义)上一篇文章(http://blog.csdn.net/u012116457/article/details/52161201)提到,为了更好的满足我们的要求,还需要对服务端进行改造。最近发现了一个巨牛的人工智能教程,不仅是零基础,通俗易懂,而且非常风趣幽默,像看小说一样!所以分享给大家,感兴趣的童鞋可以看看。点这里可以跳转到教程。1.新建cas_server为了方便,首先我们现在…

    2022年6月5日
    98
  • pycharmpip不是内部或外部命令,也不是可运行程序_pip安装的包pycharm识别不了

    pycharmpip不是内部或外部命令,也不是可运行程序_pip安装的包pycharm识别不了解决pip不是内部或外部命令问题

    2022年8月29日
    6
  • matlab画图颜色属性「建议收藏」

    matlab画图颜色属性「建议收藏」各种颜色属性选项选项意义选项意义’r’红色’m’粉红’g’绿色’c’青色32’b’兰色’w’白色’y’黄色’k’黑色各种线型属性选项选项意义选项意义’-‘实线’–‘虚线’:’点线’-.’点划线各种标记点属性选项选项意义选项意义’.’用点号绘制各数据点’^’用上三角绘制各数据点’+’用’+’号绘制各数据点’v’…

    2022年5月6日
    91
  • 系统架构师(1)计算机组成与结构[通俗易懂]

    系统架构师(1)计算机组成与结构[通俗易懂]1.计算机硬件组成计算机得硬件基本系统由五大部分组成运算器、控制器、存储器、输入设备、输出设备存储器分为内部存储器:内存,容量小。特点是速度快,临时存放数据。外部存储器:硬盘,光盘。特点是容量大,速度慢,能长期存储数据。输入设备:键盘、鼠标。输出设备:音响、显示器。主机:CPU+主存储器…

    2022年5月30日
    84
  • 一个指针占几个字节?原理是什么呢?

    一个指针占几个字节?原理是什么呢?一个指针占几个字节的问题,感觉会C语言的同学都知道。但是在面试过程中,面了几个同学,不是答忘记了,就是两个、四个的瞎蒙。。。那么,一个指针到底占几个字节呢?其实,这个问题很简单,稍微上网一搜,你就知道:一个指针在64位的计算机上,占8个字节;一个指针在32位的计算机上,占4个字节。这么简单的问题,为什么面试官愿意问呢?其实这个问题不是在考你的记忆能力,是在考察你的计算机基础能力。就比如,…

    2022年6月26日
    35
  • scanf格式控制符的完整格式

    scanf格式控制符的完整格式

    2021年9月27日
    63

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号