分库分表扩容如何平滑迁移?

分库分表面试题发布于

一、取模扩容问题

user_id % 4 改为 % 8,大部分数据需要迁移。

二、方案一:停机迁移

  • 停机,写脚本把数据按新规则重新分配。
  • 简单但有停机时间。

三、方案二:双写 + 迁移

  1. 新数据同时写旧分片和新分片。
  2. 后台把旧数据迁移到新分片。
  3. 校验一致后,切读到新分片。
  4. 停写旧分片。 - 不停机但复杂。

四、方案三:一致性哈希

  • 新增节点只迁移相邻节点的部分数据。
  • 取模扩容影响小。

五、方案四:预留分片

  • 初始就分足够多的逻辑分片(如 1024),开始只分配少量库。
  • 扩容时只需把部分逻辑分片迁移到新库,无需改规则。
  • 推荐方案。

六、注意

  • 迁移过程保证数据一致性。
  • 做好回滚方案。