【数据库】分表方案

mysql分库分表方案:

分表:

分表方案:
1.为什么需要分表?
答:单表数据量过大,数据增长太快影响接口的响应速度,单mysql实例的负载并不高,这种情况下,使用分表。

2.分表的方案有哪些?
一般由垂直分表和水平分表,垂直分表(切分字段),水平分表(切分记录)
使用垂直分片,代码的改动比较大,容易出错,一般不会用这种方式。

使用水平分表,按照阿里mysql实践,建议单表不超过500w,可以拆分多个子表。
3.水平分表怎么拆分呢?
水平拆分的方案
方案1:按照id范围分表,比如1-500w到表A ,500w-100w到表b,需要去评估未来可能的数据量,如果分大了,性能还有问题,分小了子表太多。
好处:简单粗暴,分配的数据到子表,后续新增数据可以不用动
缺点:(对于非递增id不适合),子表量不可控,且子表数据量过大的情况,也会造成性能问题

如果预估到未来的大致范围内的数据量,评估方案1,方案2都可,根据实际情况选择
方案2:按照hash算法来分,用id做hash算法取模,相同余数放到同一个子表里,这种分法相对比较均匀。但是后续子表数据量大了,还需要去分表
好处:分配比较均匀,每个子表的数据量都差不多
缺点:随着数据量的增加,单个子表的数据量增大会造成二次分表

3.使用路由表,有路由表去分配,数据去哪个表里,这样后期新增数据,只需要配置路由表即可
好处:解决子表数据的迁移工作,可以灵活分配数据到各个子表
缺点:数据量过大,路由表数据量的维护也会增加,就会造成路由表成为问题

一般来讲,分表方案是不得已而为之的一种解决方案,任何架构设计都不是一蹴而就的,没有任何一种架构设计能满足所有
的场景,设计方案就是从众多方案中选择最合适的方案。单表数据量比较大,而数据库实例不大的情况,首先考虑,优化数据库配置,优化代码,也可以考虑使用缓存,引入redis,elasticsearch等,最后才去考虑分表。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值