最近在做对老数据系统的迁移,我们遭遇了比较高难度的挑战,需要无错的完成转换工作,最好能提前在测试环境验证数据,确保完美上线。
先说说项目现况
首先,两边数据结构差异很大,只有一些相似的领域模型概念。
其次,老系统中有较多的非法NULL值和很多不正确的数据。
最后,数据库经历过三波人设计和开发,里面有技术包袱。
虽然问题比较多,但是我们有以下这些资源
1 新系统有基于实体的元数据字典
2 老系统有一份相对比较完整的数据库文档
3 有对老系统非常熟悉的人员,可以提供专家级业务意见
4 相关人员对数据库的SQL语句特别的擅长
5 有基于实体模型的数据库访问组件
先看看一般的升级手段!
1 手工
2 SQL脚本
3 程序
我们使用什么方案来升级呢?
手工是不可能完成的,SQL脚本应付不了复杂的环境,程序虽然梦幻但是工作量很大,实际上还有一些一次性工作,例如权限,角色等设置,这个时候程序的价值其实不大。
这里我们准备分3个阶段
1 编写清理错误的SQL脚本, 清理无用的孤岛数据和修复错误数据
2 编写基础数据和业务表的升级程序,渐进式的数据迁移
3 手工加权限,处理部门等信息。
写到这里方案差不多出来了,来完善目标
1 正确性:每一个字段必须单独检查,后续有多少字段未处理,进度可以反向推进业务
2 性能:转换程序最好可以在8个小时甚至在2个小时内完成
3 高效:数据转换是一件悲伤到逆流成河的事情,错了最好马上秒级还原并马上修正再次验证
4 反复:每一个小的流程可以识别自身状态,整体反复执行
5 唯一:最后生成的数据有唯一的数据主键编号,方便还原问题。
6 快速:充分利用SQL脚本,快速转换数据
网友评论