切分策略
范围切分
通过某个字段的大小范围来决定数据放在哪张库
优点:简单,可扩展 缺点:写流量会集中在某个表
中间表映射
优点:灵活 缺点:引入了新的单点,增加了流程的复杂度
hash切分
选取一个sharding_key, 利用取mod等操作,将key映射到某个节点
优点:数据分片比较均匀,不容易出现热点和并发访问的瓶颈 缺点:后续扩容需要迁移数据、存在跨节点查询的问题
分表字段选择
选择原理:减少跨库,跨表查询
资源准备和代码改造
核心流程:
- 数据库资源准备
- 分库分表规则配置
- 代码改造
- 写入:单写老库、双写、单写新库
- 读取:读老、读新、部分读老部分读新
- 灰度:有灰度读写切换的能力
数据迁移
增量数据同步
- 同步双写
- 异步双写 写老库,监听binglog异步同步到新库
- 中间件同步工具
全量数据迁移
保证新库有全部数据
- 自研迁移任务
- 中间件同步工具
控制好同步速率
一致性校验
确保新库数据正确,达到切换标准
核心流程:
- 读取老库数据
- 读取新库数据
- 比较新老数据
- 不一致进行补偿
- 新库存在,老库不存在;新库删除数据
- 新库不存在,老库存在;新库插入数据
- 新库存在、老库存在,比较所有字段
灰度切换
定义好灰度的规则,放量后观察一段时间