为什么要分表分库?

一、为什么要分表分库

   数据库数据会随着业务的发展而不断增多,因此数据操作,如增删改查的开销也会越来越大。再加上物理服务器的资源有限(CPU、磁盘、内存、IO 等)。最终数据库所能承载的数据量、数据处理能力都将遭遇瓶颈。
  数据库存在IO和CPU瓶颈:

  • IO瓶颈:

第一种: 磁盘读的IO,数据库缓存放不下,每次查询是产生大量IO,降低查询速度。

第二种:网络IO,请求数据太多,带宽不够。

  • CPU瓶颈:

第一种:sql语句,SQL语句中包含函数(join,group by,count…),非索引字段条件查询等等,增加CPU运算操作。

第二种: 单表数据量太大,查询是扫描的数据太多,SQL执行效率低下,CPU瓶颈就出现了。

二、如何分库

1、水平分库

  • 以“字段”为依据,按照一定策略(hash、rang、time),将一个库中的数据拆分到多个库中。
  • 每个数据库的结构都一样。
  • 所有数据库中的数据并集就是全量数据。
    在这里插入图片描述
    场景: 提高数据查询性能,把一个库承担负载分担给了多个库。

2、垂直分库

  • 以表为拆分依据,按照业务规则不同,将不同表拆分到不同库中。
  • 每一个库的结构是完全不一样。
  • 每个库中的数据也不一样,没有交集。
  • 所有库的数据的并集就是全量数据。
    在这里插入图片描述

三、如何分表

1、水平分表

  • 以“字段”为依据,按照一定策略(hash、rang、time),将表中的数据拆分到多个表中。
  • 每个表的结构完全一样。
  • 每个表中的数据完全不一样,并且没有交集。
  • 所有表并集就是全量数据。
    在这里插入图片描述

2、垂直分表

  • 以“字段”为依据,表中字段过多时,按照规则,将表中的字段拆分到不同的表(主表/从表)。
  • 每个表的结构是不一样的。
  • 每个表中的数据也不一样的,每个表的字段至少有一个交集,一般是主键,关联数据。
  • 所有表的并集就是全量数据。
    在这里插入图片描述
    场景: 表的记录不多,但是字段多,并且热点数据和非热点数据在一起,一行记录存储需要空间比较大。

四、拆分原则

1、能不拆分尽量不拆分,如果要拆分一定选择合适的拆分规则。
2、数据拆分尽量通过数据冗余或表分组来降低跨库join的可能。
3、跨库join是共同难题,所以业务读取尽量少使用多表join。

五、分库分表的好处

1、水平拆分优点

  • 单库单表的数据保存在一定量级,有助于提升性能。
  • 切分表的结构相同,应用层改造较少,只需要增加路由规则就OK。
  • 提供了系统稳定性和负载能力。(并发性能提高)

2、垂直拆分优点

  • 拆分后业务明确。
  • 系统进行整合和扩展就比较容易。
  • 易于实现动静分离,冷热分离的数据库表的数据模式。

六、分库分表带来的问题

1、垂直拆分带来的问题

  • 部分业务表无法join,只能通过接口方式,提高了系统的复杂度
  • 存在单表性能瓶颈,不易扩展。
  • 事务处理复杂

2、水平拆分带来的问题

  • 拆分规则难以抽象
  • 分片事务一致性难以解决
  • 维护难度极大
  • 跨库join性能差

3、共同问题

  • 分片规则和策略
  • 分布式全局唯一ID
  • 多数据源管理问题
  • 跨库跨表join问题
  • 跨节点合并排序分页问题
  • 事务复杂
  • 数据管理难度加大
数据库设计经验中进行分表分库的主要原因是为了解决性能瓶颈和高并发的问题。当业务发展迅速,单个数据库成为了性能瓶颈时,分库分表可以有效地提高数据库的处理能力和性能。 分表是将一个大表按照一定的规则拆分成多个小表,每个小表只包含部分数据。这样可以减少单个表的数据量,提高查询效率,降低锁竞争,减轻数据库的负载压力。常见的分表规则有按照时间范围、按照哈希值等。 分库是将一个数据库分成多个独立的子数据库,每个子数据库可以运行在不同的机器上。这样可以将不同的业务数据分开存储,避免了单个数据库的性能瓶颈,提高了数据库的并发处理能力。 进行分表分库也会带来一些问题。比如,跨表查询和跨库查询可能会变得复杂,需要额外的处理。同时,数据一致性的维护也会变得更加复杂,需要考虑分布式事务的处理。此外,对于分表分库的中间件选择也需要谨慎考虑,以满足业务需求并保证系统的稳定性。 综上所述,在数据库设计中进行分表分库可以提高数据库的性能和并发处理能力,但也会引入一些额外的问题和挑战。因此,在设计和实施分表分库时,需要综合考虑业务需求、系统架构和数据库性能等因素,做出合理的决策。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [分布式 微服务 项目 我们为什么要分库分表?](https://blog.csdn.net/qq_44866828/article/details/124098306)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值