1、背景
原先把部分数据data写入到老的数据库table_a,然后要把table_a废弃了,希望把这部分数据data写入到新数据库table_b。
2、没有经验的我,刚开始的想法是,这还不简单,直接把数据写入table_a的代码换成写入到table_b?
3、在生产环境上,这样做太草率了,那你怎么处理接下来的两个问题:
- 问题一:怎么保证写入table_b的数据是正确的?
- 问题二:万一写入table_b出问题了怎么办?
4、稍会有工作经验的人,可能想到了使用灰度写入,灰度内写入到table_b,灰度外写入到table_a,这是稍微保险的方式,如果发现写入的数据有问题,可以直接把灰度关了走老逻辑。但是这种方式只解决了问题二,问题一呢?
5、终极解决方案是:
先开始双写模式,即同时把数据写入到两张表中,经过一段时间后,手动或者脚本比对新写入的数据是否正确,注意写入table_b的操作最好trycatch异常,否则由于写入到table_b的问题影响到了正常流程,这是在生产环境不允许的,这个阶段即使写入到table_b失败,只要table_a还有正确数据就行;
如果写入table_b的数据能保证是正确的情况,然后,使用灰度将双写模式慢慢切换到只写入新表table_b中;
最后,将table_a中的老数据同步到table_b,这样就完美的将数据从老数据库切换到新数据库了,切库逻辑就是如此。