分库分表数据库的扩容

现在做互联网开发的不懂点分布式,不懂点分库分表都不好意思说自己是互
联网搬砖人员。昨晚经常性失眠,根据前几天看的redis原理想到一个数据库的扩容方案。
一般分库分表都是基于一个字段或者多个字段组合的hash值进行取模运算进行分库分表的,说一个普通的,比如订单表进行分库分表,以订单id为key进行hash运算得到a=hash(id),数据库的数量为d,表的数量为t。b=a%d,则b是数据库的下标也就是数据库(b),c=(a/d)%t,则c代表的是表的下标及表(t)。比如订单号的hash值a=100,数据库数量为4,表数量为4。那么这个订单应该在b=100%4=0,也就是第一个数据库中,c=(100/4)%4=1,也就是表2。
以上述分库分表策略为基础进行扩容,扩容空间为原空间的2倍。比如4库变8库,具体操作为将下标为i的库中的数据全部拷贝至下标为i+4库中。然后对每个库每个表进行遍历去除不正确数据,比如上边hash值为100的订单原来位于0库2表。再计算时会在b=100%8=4库中,所以0库中这条数据需要删除,4库中的数据保留。扩表也是同样的道理。
这张方法的好处就是不用停库,只要把数据从i库拷贝到i+4库之后,线上程序就可以从4个数据库切换至8个数据库了。切换之后取数据或者插入数据都不会有影响,后台数据库再慢慢清除不用数据即可。
原理大致是比如原来n库,扩容至2n库时原来t库数据只能存在n库或者t+n库。比如2用二进制表示为10,扩容之后数据就会在010和110中,也就是2库和6库。
另外说一下数据容量问题,如果有32个库有32张表每个表500w数据,那么数据总量是5亿左右,那么64个库64张表总数据可以达到200亿。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值