MySQL分库分表

背景

随着业务发展单库单表也越来越不能满足业务了,那么分库分表就势在必行了。

方案

hash取模方案

通过hash取模数据可以均分的分散到4张表中,不会出现热点问题,但是如果后面业务量增加4张表也不能满足业务了,需要额外拓展4张表,那么问题就来了,hash取模数就变成8,之前的历史数据就不能通过这个算法了,那么这个时候就需要进行数据迁移了,数据迁移带来的工作量使我们不想看到的。

range范围方案

range方案就是根据id返回,把数据放到对应的表中,因为id都是递增的那么新数据都会集中到一张表中,这样就会带来热点问题,单表的压力过大

group分组方案

1、首先id根据取值范围找到属于哪一个分组

2、找到分组之后,id通过跟表数量进行取模运算,定位到了对应的表

这种方案的好处就是可以进行横向扩展而不用进行数据迁移,也避免了热点问题,如果业务量继续增加需要额外增加4张表,那么我们只需要重新增加一个分组,维护好分组跟路由信息就可以了。

分库分表改造数据动态迁移

分库分表肯定要涉及数据迁移,数据迁移必定涉及一个全量和增量的数据,全量数据迁移可以借助数据迁移工具基于分库分表的路由规则进行迁移,在迁移之前做好数据备份

动态读写切换改造

由于是动态迁移,不停服迁移,肯定不能通过发布程序来切换数据源,所以,在程序层面进行改造,进行动态读写切换改造。

大致的思路:在程序里面手动去指定双数据源,预先在程序里面应该加载两个db的数据源,通过配置预先设定开关,然后动态进行读写切换

为了实现可监控、可灰度、可回滚,还需要进行灰度。从配置的维度来说,不仅仅是 切换的开关需要配置化,而且 需要保证灰度过程中切换比例,可以通过配置进行调控

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值