信创适配的主要目的是确保原有的系统或软件可以正常运行在信创环境(如国产CPU、操作系统、数据库等)上。这涉及到核心芯片协议、基础硬件、操作系统、数据库、中间件、服务器以及应用软件等多个层面的匹配与优化,本文主要以国产数据库替换展开。
目前市面上国产数据库前十排名:
除去带有公司色彩的数据库外,人大金仓、达梦的占有率比较大,经过前期调研,我们选用人大金仓作为mysql替换对象,原因有二,一是它是基于pg,二是他有成熟的迁移工具。
由于人大金仓本身与mysql有诸如内置函数、语法上的差异,所以无法用一套数据库访问、兼容两种不同的数据库,经过调研,人大金仓与mysql有超过70%可以复用,其他的需要重新编写,所以有两种实现方案。
方案1:
同一套mapper.xml兼容,即遇到无法复用的,使用新的方法替换,遇到可以复用的直接使用,优点是无需数据源切换,缺点是不好维护,且原有业务实现需要调整。
方案2:
使用两套mapper.xml,从根本上区分。优点是无需兼容,无需改变原有业务,仅通过数据源切换即可实现,缺点是需要维护两套数据层访问,会增加项目建设周期。
经过工作量评估,我们采用方案2。
具体实现:
1)数据层分离
2)nacos配置层切换数据源
mybatis-plus:
global-config:
db-config:
# column-format: "`%s`"
column-format: "\"%s\""
mapper-locations: classpath*:/mapper/kingbase/**/*.xml
# mapper-locations: classpath:/mapper/mysql/**/*.xml
注:column-format: "\"%s\"",是给人大金仓数据库表的字段添加上"",人大金仓(pg)中字段加双引号的原因主要是为了正确地引用标识符和处理大小写敏感性。然而,为了避免混淆和潜在的错误,建议在可能的情况下尽量避免使用双引号来引用字段名。
3)为避免sys_开头的业务表,与人大金仓(pg)的内部系统表混淆导致sql执行报错,可以显式的使用业务库的Schema(模式)来避免,如:select "id","name" from public.sys_user
应用的数据库由mysql转换成人大金仓后,涉及数据迁移,一般可以使用人大金仓自带的KingbaseDTS来做数据迁移,建议先迁移表结构,修复转换错误的数据类型后,再开展数据迁移,目前该工具不支持增量表迁移,只能全量迁移。
主要分为数据源配置与迁移任务创建,具体可见人大金仓官网