业务订单分库分表二-扩容

来源:互联网 发布:神木法院淘宝网下载 编辑:程序博客网 时间:2024/06/05 03:19
一.原先业务订单情况
2个物理表, order_0000,order_0032

每个分组32个逻辑分表

原先元素分布:
逻辑分表号:0-31 在order_0000,32-63在order_0032

物理分表名=逻辑分表号/32%32

二.扩容

扩展成4个物理分表
每个逻辑分组有:16个逻辑分表
即 order_0000,order_0016,order_0032,order_0048

物理分表名=逻辑分表号/16*16

数据迁移:
order_0000中逻辑分表号:16-31的数据往order_0016迁
order_0032中,逻辑分表号:48-63的数据往order_0048迁

即只需迁移原先每个物理表一半的数据到新的物理表,二分裂变。

扩容的本质是物理表数增加,逻辑分组表数减少。

三.扩容具体过程
eg:
原先1个库,二个表,扩容成4个表。

原先物理表:
0000,0032

0000管理虚拟id范围为:0-31
0032管理虚拟id范围为:32-63

扩容后物理表:
0000,0016,0032,0048

具体流程:
0.准备好0016及0048两张新表。

1.对外停止交易,停止相应会引起订单状态变化的job

2.将0000表数据拷到0016,将0032拷到0048。

3.校验0016及0048中表数据与0000及0032的数据一致
从条数,明细等进行核对,相应订单明细记录状态都一致。

3.启用新的规则
根据用户id路由到表规则更改为:userId %64 /16 * 16 (原先:userId %32 /32 * 32)
根据订单号id路由到表规则更改为:取订单最后2位分表id / 16 * 16 (原先是/32 * 32)
这步做完后相应的查询流量已经变为新的查询。

4.开启交易,开启之前停掉的job

5.定时check数据,日志看是否有异常

6.找个时间点清除0000及0032中不用的数据
0000的虚拟id区间为:15-31的清掉
0032的虚拟id区间为:48-63的清掉

原创粉丝点击