MySQL之分库分表

article/2025/8/22 2:27:03
  • 为什么要分库分表
    • 用户请求量太大
      • 单服务器TPS、内存、IO都是有上限的,需要将请求打散分布到多个服务器
    • 单库数据量太大
      • 单库处理能力有限;单库所在服务器的磁盘空间有限;单库的操作IO有瓶颈
    • 单表数据量太大
      查询、插入、更新操作都会变慢;加字段、加索引、机器迁移都会产生高负载、影响服务

  • 如何解决
    • 垂直拆分
      • 垂直分库
        微服务架构,业务切割的足够独立,数据也会按照业务切分,保证业务数据隔离,大大提升了数据库的吞吐能力。
        在这里插入图片描述
      • 垂直分表
        表中字段太多切包含大字段的时候,在查询是对数据库的IO、内存会受到影响,同时更新数据时,产生的binlog文件会很大,MySQL在主从同步时也会有延迟的风险。
        在这里插入图片描述
        在这里插入图片描述
    • 水平拆分
      • 水平分表
        针对数据量巨大的单张表(如职位申请投递表,order),按照规则把一张表的数据切分到多张表里面去。但是这些表还是在同一个库中,所以库级别的数据库操作还是有IO瓶颈的。
        在这里插入图片描述

      • 水平分库
        将单张表的数据切分到多个服务器上,每个服务器具有响应的库与表,只是表中数据集合不同。水平分库分表能够有效的缓解单机和单库的性能瓶颈和压力,突破IO、连接数、硬盘资源等瓶颈。
        在这里插入图片描述

      • 水平分库规则:
        数据获取时,不跨库、不跨表,保证同一类数据都在同一个服务器上获取。

      • 水平分表规则:

        • RANGE(范围)
          时间:按照年、月、日切分。如 order_2022、order_202208、order_20220801
          地域:按照省或市切分。如 order_beijing
          大小:从0到100万一个表。
        • HASH(哈希)
          用户ID取模
        • 不同的业务使用的切分规则是不一样的,根据上面提到的切分规则,举例如下:
          • 站内信:
            • 用户维度:用户只能看到发送给自己的信息,其他用户是不可见的,这种情况下是按照用户ID hash分库,在用户查看历史记录翻页查询时,所有的查询请求都在同一个库内。
          • 用户表:
            • 范围法:以用户ID未划分依据,将数据水平切分到两个数据库实例,如:1到1000万在一张表1000万到2000万在一张表,这种情况会出现单表的负载较高。
            • 按照用户ID hash尽量保证用户数据均衡分到数据库中。
          • 流水表:
            • 时间维度:可以根据每天新增的流水来判断,选择按照年份分库,还是按照月份分库,甚至也可以按照日期分库。
          • 职位申请投递表->订单表:
            求职者(C端)投递企业(B端)的职位产生的记录称之为订单表。在线上的业务场景中,C端用户看自己的投递记录,可以看到每次的投递到了哪个状态;B端用户查看自己收到的简历,对于合适的简历会进行下一步沟通,同一个公司内的员工可以协作处理简历。
            为了同时满足C端和B端用户的业务场景,采用空间换时间,将一次的投递记录存为两份,C端的投递记录以用户ID为分片键,B端收到的简历按照公司ID为分片键。
            在这里插入图片描述
          • 主键选择:
            分库分表继续使用主键自增,容易导致主键重复。
            • UUID:本地生成,不依赖数据库,缺点是因为太长和无序性导致索引树经常变更导致的性能太差。不推荐
            • SNOWFLAKE:百度的UidGenerator、美团的Leaf,都是基于SNOWFLAKE算法实现的。
          • 数据一致性:
            • 强一致性:XA协议 -> 并发能力差
            • 最终一致性:TCC、saga、Seata -> 并发能力强
          • 数据库扩容:
            • 成倍增加数据节点,基于平滑扩容 -> 2变4;4变8,8变16…
            • 成倍扩容后,表中的部分数据请求已被路由到其他节点上,可以清除。
          • 业务层改造:
            • 基于代理层方式:MyCat、Sharding-Proxy、MySQL Proxy -> 只需指定一个连接池
            • 基于应用层方式:Shardding-jdbc -> 需指定多个连接池
          • 分库后面临的问题:
            • 事务问题:一次投递需要插入两条记录,且分布在不同的服务器上,数据需保证一致性。
            • 跨库跨表的join问题
              • 全局表(字典表):基础数据,所有库都拷贝一份。
              • 字段冗余:字段少可以使用字段冗余,就不用join查询。
              • 系统层组装:可以在业务层分别查询出来,然后组装起来,逻辑较复杂。
            • 额外的数据管理负担和数据运算压力:数据库扩容、维护成本变高。

其他章节 -> 跳转

end...

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

相关文章

【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瓶颈:排…

MySQL-如何分库分表?一看就懂

一、为什么要分库分表 如果一个网站业务快速发展,那这个网站流量也会增加,数据的压力也会随之而来,比如电商系统来说双十一大促对订单数据压力很大,Tps十几万并发量,如果传统的架构(一主多从)&…

黑盒测试是用什么软件,黑盒测试的主要方法和常用的工具有什么?

黑盒测试是测试人员比较常用的一种测试方法,它主要是通过测试来检测每个功能是否都能正常使用的。黑盒测试的方法是有许多的,但有一些方法是比较主要的,比如边界值测试、等价类划分、决策表以及场景法等等。除了方法外,黑盒测试工…

黑盒测试简介和常用方法

黑盒测试简介和常用方法 定义 黑盒测试俗称功能测试,它站在用户的角度上主要是对系统或软件的界面、功能上进行测试。它把程序当成不能打开的盒子,这样不用考虑系统内部的逻辑和内部特性,只需要在程序的外部接口上检查程序是否能按照软件设计…

黑盒测试的测试方法

一般我们在做软件测试的时候,会遇到黑盒测试,白盒测试,我们今天主要说的是黑盒测试的 主要测试方法有那些。接下来就是干货了。 最常见的是 边界值 等价类 错误推测法 场景法 因果图法 判定表组成法 正交实验设计 下面是详细的解释: 前言:在期末考到来的时候复习…