关于数据库的分库分表

1. 为什么要对数据库进行分库分表

参考文章

对于关系型数据库来说,单机存储容量、连接数、处理能力都是有限的,当数据量打到1000W或者数据大小达到100G时,由于查询维度的多变,新增以及修改的增多,无论是对索引的优化,或者使用从表等众多操作,数据库的性能还是不理想, 这时我们就需要考虑数据的拆分了

切分类型 : 垂直切分,水平切分

1.1 垂直(纵向)切分

1.1.1 垂直分库

垂直分库是指从业务角度出发,对数据库进行解耦,不同功能的业务表放置到不同的库中,将大库拆分成不同的小库,类似于"微服务"的理念
在这里插入图片描述
优点: 数据解耦,可以减小数据库的压力
缺点: 不能进行跨库的查询,如果需要不同业务的数据,需要二次开发

1.1.2 垂直分表

垂直分表是指作用于单表中的列,对于数据表中列数过多的表,将使用频率较高的字段归类到一个表中,拆分为大小表,通过大表联动小表,处理数据,这样方便操作表,并且可以有效的避免跨页的查询,造成额外的性能开销

数据库底层是使用页存储的,并且mysql是行存储,如果每一行的数据过多,则会导致跨页存储的问题
垂直分表之后,每一行存储的数据就变少,每一页存储的数据会增多,大大增加了数据查询的命中率,提高了数据库性能和查询效率

小结:
垂直切分的优点:

  1. 对数据从业务上进行了解耦,可以帮助业务更加清晰
  2. 类似于微服务的管理方式,对不同业务的数据库也可以进行监控,优化和扩展等
  3. 在并发场景下,垂直切分在一定程度上提升了IO性能,数据库的连接数,单机的硬件资源和瓶颈问题

垂直切分的缺点:

  1. 分库之后,不同业务的数据进行了隔离,无法join查询,增加了复杂度和工作量
  2. 依然存在单表数据量过大的问题,需要介入 水平拆分

1.2 水平(横向)拆分

当一个数据库无法再细粒度的垂直切分时,出现单表数据量过大,发生了读写或者存储性能问题的情况下,就需要考虑到水平的切分

在这里插入图片描述

水平切分分为 库内的分表,和分库分表

库内分表,解决了单一表中数据量过大的问题,但是没有将表分布到不同的数据库里 , 对于当前数据库的性能还是没有改变, 大家还是竞争的同一个CPU,同一个IO,所以建议分库分表

水平切分的优点:

  1. 解决了单表压力过大的问题,并发情况下的读写瓶颈的单缓解,提高了系统的稳定性和负载能力
  2. 对于应用端的改动较小

水平切分的缺点:

  1. 分库分表后分布式一致性难以保证
  2. 多表或者跨页的查询增加了复杂度和开发量
  3. 数据的扩展和维护难度增大

分库分表之后全局唯一ID生成策略:
参考美团leaf框架

2.分库分表相关问题

参考

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值