切分策略

范围切分

通过某个字段的大小范围来决定数据放在哪张库

优点:简单,可扩展 缺点:写流量会集中在某个表

中间表映射

优点:灵活 缺点:引入了新的单点,增加了流程的复杂度

hash切分

选取一个sharding_key, 利用取mod等操作,将key映射到某个节点

优点:数据分片比较均匀,不容易出现热点和并发访问的瓶颈 缺点:后续扩容需要迁移数据、存在跨节点查询的问题

分表字段选择

选择原理:减少跨库,跨表查询

资源准备和代码改造

核心流程:

  • 数据库资源准备
  • 分库分表规则配置
  • 代码改造
    • 写入:单写老库、双写、单写新库
    • 读取:读老、读新、部分读老部分读新
    • 灰度:有灰度读写切换的能力

数据迁移

增量数据同步

  • 同步双写
  • 异步双写 写老库,监听binglog异步同步到新库
  • 中间件同步工具

全量数据迁移

保证新库有全部数据

  • 自研迁移任务
  • 中间件同步工具

控制好同步速率

一致性校验

确保新库数据正确,达到切换标准

核心流程:

  • 读取老库数据
  • 读取新库数据
  • 比较新老数据
  • 不一致进行补偿
    • 新库存在,老库不存在;新库删除数据
    • 新库不存在,老库存在;新库插入数据
    • 新库存在、老库存在,比较所有字段

灰度切换

定义好灰度的规则,放量后观察一段时间