mysql-分库分表

article/2025/8/22 1:38:07

在这里插入图片描述

1、为什么要分库分表

1、为什么要分库分表
出现数据库瓶颈,比如IO瓶颈,CPU瓶颈

1、IO瓶颈

(1)磁盘读IO瓶颈- 数据体积比较大:大量的写操作,磁盘IO读写必然慢,效率低大量的读操作,如果数据离散性强,会造成磁盘随机读问题,IO慢,效率低;如果是并发读取的是热点数据,那么不会造成磁盘IO,一次读取磁盘缓存到cache,其他请求都从cache拿取。- 缓存问题热点数据太多,数据库缓存放不下,每次查询时会产生大量的IO,降低查询速度,但是不必分库分表,可以先优化buffer参数。
(2)网络IO瓶颈,      - 请求的数据太多,网络带宽不够。数据总体积不一定决定分库分表!有时候往往是请求压力大而决定分库分表。由于请求响应的非对称性,网卡的请求速度很快 但是响应速度会很慢。在输出数据很大的时候,很容易造成IO

2、CPU瓶颈

(1)SQL复杂查询-> SQL优化,建立合适的索引,在业务Service层进行业务计算复杂SQL中包含join,group by,order by,非索引字段条件查询等,增加CPU运算的操作
(2)单表数据量太大,查询记录过多,容易查询时扫描的行太多,SQL效率低,CPU率先出现瓶颈

2、分库分表设计思路

一、按照拆分维度

垂直拆分

 根据不同的业务,拆分优点:拆分后业务清晰,拆分规则明确,系统之间整合或扩展容易。缺点:a、部分业务表无法join,只能通过API方式解决,提高了系统复杂度b、存在分布式事务问题。

水平拆分

 按照某个字段的做均匀规则,拆分优点:提高SQL执行效率,提升系统的稳定性跟负载能力缺点:跨库join性能较差

二、按照拆分结果

分表 拆分表,大表变小表,还在同一个DB中

水平分表

 概念:以字段为key,在同一个数据库内,把同一个表的数据按一定规则拆到多个表中。结果:每个表的结构都一样;每个表的数据都不一样,没有交集;所有表的并集是全量数据;场景:单表的数据体积大,无并发问题,但是写操作、读取大字段、复杂SQL会影响了SQL效率,加重了CPU负担,以至于成为瓶颈。分析:表的数据量少了,单次SQL执行效率高,自然减轻了CPU的负担。

垂直分表

概念:以字段为key,按照字段的活跃性、访问量、业务,将一个表按照字段分成多表,每个表存储其中一部分字段。结果:每个表的结构都不一样;每个表的数据也不一样,一般来说,每个表的字段至少有一列交集,一般是主键,用于关联数据;所有表的并集是全量数据;场景:- 主表和扩张表的访问请求出现偏移。- 系统并发量不大,表记录不多,但是字段特别多,单行磁盘存储空间大,数据库缓存的数据行减少或者不足,查询时会去读磁盘数据产生大量的随机读IO,产生IO瓶颈。- 单表字段多,混合高频数据和低频数据,加大请求压力。分析:大字段、字段多,业务混合热点数据、非热点数据,尽量设计为主表和扩展表,注意Join效能问题。

分库 拆分数据库,一个库变多个库,部署到不同服务器,可做微服务化拆分

水平分库

概念:
按表规则,将同一个表的数据按规则拆到不同的数据库中,每个库可以放在不同的服务器上

 结果:每个库的结构都一样;每个库的数据都不一样,没有交集;所有库的并集是全量数据;场景:系统绝对并发量上来了,分表难以根本上解决问题,并且还没有明显的业务归属来垂直分库。分析:库多了,io和cpu的压力自然可以成倍缓解。

垂直分库

概念:按照业务将表进行分类,分布到不同的数据库上面,每个库可以放在不同的服务器上,它的核心理念是专库专用结果:每个库的结构都不一样;每个库的数据也不一样,没有交集;所有库的并集是全量数据;场景:系统绝对并发量上来了,并且可以抽象出单独的业务模块。分析:数据微服务了,那么是否就该考虑对应的服务是不是应该服务化了

3、分库分表问题

(1)、自增ID问题

 自增ID问题解决办法a、为数据库设置不同步长。缺点:步长确定后,无法扩展新的mysql,不然生成步长的规则可能会发生变化。b、UUID形式,缺点是不能排序c、使用雪花算法或redis解决

(2)、数据关联(join)查询问题

需要借助其他方案存储数据关联关系。

(3)、数据同步问题

升级过程中(升级从库、双写迁移),分表分库会造成数据不一致和冗余的情况,必须做数据校验工作。

4、分库分表步骤

1.估计容量(当前容量+增常量)
2.选key==》均匀
3.分表规则、拆分策略==》hash、range....
4.双写 + 定时任务(校对数据)
5.切表、切库(数据一致后进行)

5、分库分表工具

sharding-sphere:前身是sharding-jdbc;http://shardingsphere.apache.org/index_zh.html
Mycat:http://www.mycat.io/

http://chatgpt.dhexx.cn/article/W62m4xgy.shtml

相关文章

mysql分库分表(一)

微信搜索:“二十同学” 公众号,欢迎关注一条不一样的成长之路 数据库分库分表策略的具体实现方案 相关文章: 1、 使用Spring AOP实现MySQL数据库读写分离案例分析 2、MySQL5.6 数据库主从(Master/Slave)同步安装与…

【MySQL】MySQL分库分表详解

目录 一、前言 1.1 数据量 1.2 磁盘 1.3 数据库连接 二、垂直拆分 or 水平拆分? 三、垂直拆分 3.1 垂直分库 3.2 垂直分表 3.3 垂直拆分的优缺点 四、水平拆分 4.1 水平分表 4.2 水平分库分表 4.3 水平拆分的优缺点 五、几种常用的分库分表的策略 5.1 根据数值范围 …

MySQL 分库分表

MySQL分库分表 概念 读写分离优化了互联网读多写少场景下的性能问题,考虑一个业务场景,如果读库的数据规模非常大,除了增加多个从库之外,还有其他的手段吗?实现数据库高可用,还有另外一个撒手锏&#xff…

MySQL之分库分表

为什么要分库分表 用户请求量太大 单服务器TPS、内存、IO都是有上限的,需要将请求打散分布到多个服务器 单库数据量太大 单库处理能力有限;单库所在服务器的磁盘空间有限;单库的操作IO有瓶颈 单表数据量太大 查询、插入、更新操作都会变慢&am…

【Mysql】分库分表

【Mysql】分库分表 文章目录 【Mysql】分库分表1. 介绍2. 拆分策略2.1 垂直拆分2.1.1 垂直分库2.1.2 垂直分表 2.2 水平拆分2.2.1 水平分库2.2.2 水平分表 1. 介绍 采用单数据库进行数据存储存在以下瓶颈: IO瓶颈:热点数据太多,数据库缓存不…

一文搞懂MySQL数据库分库分表

如果数据量过大,大家一般会分库分表。分库需要注意的内容比较少,但分表需要注意的内容就多了。 工作这几年没遇过数据量特别大的业务,那些过亿的数据,因为索引设置合理,单表性能没有影响,所以实战中一直没…

Mysql·分库分表

Mysql分库分表 在mysql中新建数据库用以表分库分表mycat解压后配置文件参数server.xml 主要配置mycat服务的参数,比如端口号,myact用户名和密码使用的逻辑数据库等rule.xml 主要配置路由策略,主要有分片的片键,拆分的策略&#xf…

MySQL分库分表,何时分?怎么分?

👨‍🎓 博主介绍: IT邦德,江湖人称jeames007,10年DBA工作经验 中国DBA联盟(ACDU)成员,目前从事DBA及程序编程 (Web\java\Python)工作,主要服务于生产制造 现拥有 Oracle …

MySQL 分库分表实践

文章目录 一、为什么要分库分表二、库表太大产生的问题三、垂直拆分1. 垂直分库2. 垂直分表 四、水平分表1. 配置水平分表2. 测试水平分表 一、为什么要分库分表 数据库架构演变 刚开始多数项目用单机数据库就够了,随着服务器流量越来越大,面对的请求也…

MySQL如何分库分表

1. 我们为什么需要分库分表 在分库分表之前,就需要考虑为什么需要拆分。我们做一件事,肯定是有充分理由的。所以得想好分库分表的理由是什么。我们现在就从两个维度去思考它,为什么要分库?为什么要分表? 1.1 为什么要…

MYSQL 之 分库分表

分库分表 关系型数据库本身⽐较容易成为系统瓶颈,单机存储容量、连接数、处理能⼒都有限。当单表的数据量 达到2000W或100G以后,由于查询维度较多,即使添加从库、优化索引,做很多操作时性能仍下降严 重。此时就要考虑对其进⾏切分…

MySQL-分库分表详解(一)

♥️作者:小刘在C站 ♥️个人主页: 小刘主页 ♥️努力不一定有回报,但一定会有收获加油!一起努力,共赴美好人生! ♥️学习两年总结出的运维经验,以及思科模拟器全套网络实验教程。专栏&#xf…

如何实现MYSQL分库分表

我们学习了在高并发下数据库的一种优化方案:读写分离,它就是依靠主从复制的技术使得数据库实现了数据复制为多份,增强了抵抗大量并发读请求的能力,提升了数据库的查询性能的同时,也提升了数据的安全性。当某一个数据库…

MySQL 分库分表,写得太好了!

https://www.toutiao.com/a6603492496779510276/?tt_frommobile_qq&utm_campaignclient_share&timestamp1549497188&appnews_article&utm_sourcemobile_qq&iid59568063679&utm_mediumtoutiao_android&group_id6603492496779510276 Mysql分库分表…

MySQL数据库怎么进行分库分表?

▲ 点击上方“分布式实验室”关注公众号 回复“1”抽取纸质技术书 提起分库分表,对于大部分服务器开发来说,其实并不是一个新鲜的名词。随着业务的发展,我们表中的数据量会变的越来越大,字段也可能随着业务复杂度的升高而逐渐增多…

超详细的mysql分库分表方案

我们都知道,随着业务量的增长,数据量也会随之增加,这个时候就需要关注业务大表,因为大表会影响查询性能,DDL变更时间很长,影响业务的可用性,同时导致从库延迟很大,如果业务做了读写分…

Mysql分库分表实战(一)——一文搞懂Mysql数据库分库分表

由于业务需要,需要对Mysql数据库进行分库分表,故而最近一直在整理分库分表的相关知识,现手上的工作也告一段落了,抽空将自己最近的学习结果转化为博文,分享给大家,本博文打算做成一个系列的,首先…

MySQL 常用分库分表方案,都在这里了!

点击上方关注 “终端研发部” 设为“星标”,和你一起掌握更多数据库知识 转自:尜尜人物 www.cnblogs.com/littlecharacter/p/9342129.htm 一、数据库瓶颈 不管是IO瓶颈,还是CPU瓶颈,最终都会导致数据库的活跃连接数增加&#xff0…

MySQL:互联网公司常用分库分表方案汇总

作者:尜尜人物 原文:cnblogs.com/littlecharacter/p/9342129.html 本文目录 一、数据库瓶颈 IO瓶颈CPU瓶颈 二、分库分表 水平分库水平分表垂直分库垂直分表 三、分库分表工具 四、分库分表步骤 五、分库分表问题 非partition key的查询问题非partition…

MySQL分库分表

1.分库分表产生的背景 采用单数据库存储存在以下的性能瓶颈: ①IO瓶颈:热点数据太多,数据库缓存不足,产生大量磁盘IO,效率较低。请求数据太多,带宽不够,网络IO瓶颈。 ②CPU瓶颈:排…