分库分表扩容如何平滑迁移?
发布于
一、取模扩容问题
user_id % 4 改为 % 8,大部分数据需要迁移。
二、方案一:停机迁移
- 停机,写脚本把数据按新规则重新分配。
- 简单但有停机时间。
三、方案二:双写 + 迁移
- 新数据同时写旧分片和新分片。
- 后台把旧数据迁移到新分片。
- 校验一致后,切读到新分片。
- 停写旧分片。 - 不停机但复杂。
四、方案三:一致性哈希
- 新增节点只迁移相邻节点的部分数据。
- 取模扩容影响小。
五、方案四:预留分片
- 初始就分足够多的逻辑分片(如 1024),开始只分配少量库。
- 扩容时只需把部分逻辑分片迁移到新库,无需改规则。
- 推荐方案。
六、注意
- 迁移过程保证数据一致性。
- 做好回滚方案。