【中】分库分表扩展
2026/3/9大约 2 分钟
一、如果有一张订单表,以商户进行拆分,怎么设计让系统从单表平滑的迁移到分表去
历史数据处理
历史的自增id不用管,新的数据采用雪花算法id,写一个脚本批量的把数据写入到新的表里面去
系统双写
- 改造订单系统,数据双写。 基于原本的service,再写一个新的service,所有设计到表变动的地方,都进行两个库的变动。写入新库失败不会抛异常
- 查询还是查询之前的库
- 写个数据校验的脚本,每天进行数据校验
灰度测试
- 在数据没问题了后,可以开启灰度测试
- 可以随机让百分之5的用户去请求全新的数据,以用户id进行hash来处理,确保每个用户要么访问旧的数据,要么访问新的数据
全量切换
- 灰度测试通过,通过开关全量切入新的数据
- 后续整改删除兼容代码
二、订单表应该如何去设计分表
看情况,如果不会设计到跨商户查询,比如菜鸟驿站这样,并且数据倾斜不是很大。可以使用商户分表。
如果是电商系统,可以使用orderId来分表。因为用户订单会涉及到多商户,且大小商户会有数据倾斜问题。
大数量查询的问题,如果是,如果是 单个商户的,数据分片是一致的,只需要查询一次, 如果是多商户的,sharingshpere会帮我多线程查询再汇总。 那如果类似电商系统的数据量极大呢? ES