如何做业务数据的平滑迁移
1. 增量双写DB迁移场景写旧表写新表放在同一个事务内即可保证一致性跨DB、或从DB迁移到其它NoSQL存储场景先写旧表再写新表在写失败时做好兜底重试2. 刷存量数据在增量双写灰度开全后能确保新写入的数据在新表、旧表一致但还需要补刷历史存量数据。离线导出全量数据的业务id查旧表、并写新表确保所有存量数据的新表字段都写入值。3. 数据全量比对确保新旧一致有两种比对方式复用上述刷数据任务通过开关控制仅做比对、不刷数据离线对账参考之前写的文章)sql示例-- 1比较两个表的条数是否一致 select count(1) from table_a; -- 查出左表的条数 select count(1) from table_b; -- 查出右表的条数 -- 2比较数据内容是否一致 -- 2.1只存在于左表的数据左连接查询左表记录都会保留右表字段为空则说明右表缺少数据 select * from table_a left outer join table_b on table_a.biz_fieldtable_b.biz_field where table_b.biz_field is null; -- 2.2只存在于右表的数据右连接查询右表记录都会保留左表字段为空则说明左表缺少数据 select * from table_a right outer join table_b on table_a.biz_fieldtable_b.biz_field where table_a.biz_field is null; -- 2.3两个表存在差异的数据内连接查询比对各个字段是否一致 select * from table_a inner join table_b on table_a.biz_fieldtable_b.biz_field where (table_a.field_1 table_b.field_1 or table_a.field_2 table_b.field_2 or table_a.field_3 table_b.field_3);4. 增量双读比对上述全量比对只代表存量数据的一致性还要确保增量数据也是一致的。在所有查询场景中同时读旧表、新表并做比对。为了避免遗漏可做到公共查询逻辑里。5. 切新读双读比对观察一致后查询场景灰度切换到读新表同时确保所有的离线依赖都迁到新表数据源6. 停旧写在停写旧表之前检查旧表已无在线业务方查询、无离线依赖最终停写旧表