作者 | 何蔚
一、背景在这个数字化时代,企业的复杂业务逻辑运转需要依赖复杂的业务服务来完成 。这些业务服务通常会经历变更、拆分、合并和上云等过程,最终与一些商业软件和云平台深度融合 。
以之前服务过的客户为例,他们的系统多年来一直在.NET生态和Azure云上运行,并与微软系数据库系统进行绑定 。但是,随着市场的变化,客户想要摆脱对单一商业软件和云平台的依赖,以便在续约谈判中争取更多优惠,而不是被厂商随意操纵 。他们面临的其中一个挑战是必须将数据库系统迁移到PostgreSQL,以节省许可费用并迁移到更优惠的云平台 。
二、技术挑战在过去十几年中,该客户在SQL Server积累了大量的用户数据、系统数据,业务代码和测试代码也是面向SQL Server和SQL Server Compact(SQL CE)编写的 。我们为客户梳理出如下的技术挑战:
【数据库迁移:从 SQL Server 到 PostgreSQL】
- T-SQL转换
- 自动化测试数据的迁移
- 高效加载测试数据
- 交付计划
- T-SQL的形态
- T-SQL的数量
文章插图
以我们的客户为例,各个产品线十多年的代码混杂在一起 , 难以清晰拆分 。此外,用户数据量庞大,迁移至新数据库系统需要耗费数月时间 。因此,我们采取了一次性交付代码的策略,并同时支持对两种数据库系统(多方言SQL)的访问 。
2.T-SQL的形态以我们的客户为例 , T-SQL以两种形态存在于代码库中:
- XML资源文件(resx)中的完整T-SQL
- 代码逻辑中的T-SQL片段
文章插图
在客户已有上下文和开发流程下,这个T-SQL改写流程具有以下优点:
- 采用客户开发人员熟悉的XML资源文件机制 , 降低理解和推广的成本 。
- 不引入额外的工具库即可达到切换SQL方言的功能,减少了改造的隐形成本,如升级老旧的库、框架带来的连锁升级问题 。
- Resx文件之间的单向覆盖,减少了需维护SQL的总数量,同时方便扩展至其它方言SQL 。
- 对原始SQL文件不做改动,从而避免对运行中的业务造成影响 。
- 运行时的SQL方言由用户数据动态决定,待用户数据全部迁移后 , 原始T-SQL和原始Embeded T-SQL可以直接删除,无须再修改代码 。
在我们的案例中,需要在一个交付周期内转换超过600个SQL,长度甚至达到数十行,如果手动改写不仅费时,而且容易出错 。因此,我们团队为客户量身定制了转换工具 , 集成了第三方开源库JOOQ 。该工具可以直接读取资源文件中的SQL语句,自动逐条转换 , 并生成PostgreSQL版的资源文件 。开发人员将代码中的SQL整理到资源文件后,使用该工具转换SQL的平均速度可以达到每条1-2秒 。
特别强调 , 在企业中使用第三方开源库和框架,必须根据开源许可证确认其允许商业使用 。否则 , 将会给企业带来法律风险 。
四、自动化测试数据的迁移完善的自动化测试是一张安全网,帮助企业第一时间发现破坏性修改 。当SQL从一种方言转换到另一种方言之后 , 基于旧数据库系统运行的测试 , 对于新方言SQL就不再适用 。为多种数据库系统而维护几套业务逻辑完全相同的测试,会极大增加测试的维护成本 。而且随着时间的推移,多套测试数据将会变得不再完全一致 。
推荐阅读
- 华为harmonyos有什么新功能
- 李丽珍惊艳时光的女神:艳绝影坛自信坦荡!拍戏从不要求清场
- 景甜,从易胖体质到88斤,用这5个方法你也瘦到90斤
- 《宁安如梦》才完结,又一重生大剧强势开拍,从女一到男二都眼熟
- 从容不迫的意思是什么意思 从容不迫的意思是什么
- 从容不迫的意思 从容不迫
- 理性消费作文 理性消费
- 与蒋雯丽偷情照被曝光,从内娱弃子到名导宠儿,他背后究竟谁撑腰
- 今冬干燥,应多吃哪种水果呢
- 张雨绮的脸,怎么从千颂伊一夜间崩成蔡明了?