MySQL的分库分表

本文探讨了数据库性能优化中的分库分表策略。当数据库连接数不足和数据量过大成为系统瓶颈时,可以采取分库来缓解QPS压力,根据QPS和单库承受能力确定分库数量。同时,介绍了垂直拆分和水平拆分两种方法,垂直分表通过业务类型和访问频度减少表宽,水平分表通过id哈希解决数据量问题。最后,总结了不同切分方案针对的问题,如只分库解决连接数问题,只分表解决数据存储问题,而两者结合则能综合解决这两个问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 为什么要分库分表:

提升性能,增加可用性。


2. 何时需要进行分库:

当一个库的查询QPS过高,数据库的读写性能已经成为了整个服务器性能瓶颈,此时就需要考虑拆库,通过多个库来分担单个数据库的连接压力。

2.1 分多少个库合适?标注怎么选择?

例如整个服务器对数据库的查询QPS 是 3500(每秒3500个请求),假设单库可以支撑 1000个连接数的话,那么就需要拆分成4个库。

另外,没有分库时,如果单个数据库发生意外,发生故障的影响就是100%,分成4歌库,单个 库发生故障的影响就是25%,还有75%的数据可用,恢复起来也更快。但也不是分库越多越好,也考考虑资源占用问题。


3. 垂直分表与水平分表:

3.1 垂直拆分:

垂直分表就是把原来的表中的 很多列 拆分成多个表,这就解决了表的宽度问题。

通常垂直拆分按照以下原则进行:

  1. (按照业务类型,按照访问频度分表)把不常用的字段单独放到一个表中,把频繁使用到的字段、关联度高的字段放在一个表中;(把频繁使用到的字段集中放在同一个表中,这样访问一次表就可以一起获取多个列上的值,减少访问多个表的次数)
    (举例来说,IMUser用户信息一个表,IMMessage 单聊消息一个表,IMGroupMessage一个表)
  2. 把大字段独立存放在一个表中;

3.2 水平拆分:

水平分表是为了解决单表的数据量过大的问题。水平拆分的各个表的数据结构都是完全一致的。

常用的水平拆分的方法:
① 对id进行hash运算,例如取模:id % n, 那就是表的个数;


4. 切分方案VS解决的问题:

  1. 只分库不分表:
    数据库读写QPS过高,数据库连接数不足
  2. 只分表不分库:
    单表数据量过大(单表最佳记录数是500W),存储性能遇到瓶颈
  3. 既分库又分表:
    连接数不足 + 数据量过大引起的存储性能瓶颈
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值