数据库发展经历了三个时代,分别成就了商业软件、互联网和云与数字化三种商业形态。当前进入新数据库时代,商业与开源、SQL与NewSQL交融,推动云和数字化发展。
国产化进程中面临MySQL“难民”问题,源于前轮“去IOE”采用开源数据库(如MySQL),而现需向真国产化数据库迁移,面临Oracle(MySQL归属)的法律风险。新时代需解决O(Oracle)、M(MySQL)、DB2兼容性问题。
解决多数据库语法兼容性有两种路径:独立开发多个数据库或插件式在单一数据库内实现多种兼容性。openGauss通过插件机制实现B兼容性数据库,采用独立语法、函数、通讯协议和冲突机制实现。
具体实现包括:
- 插件机制:包含so文件(功能实现)、control文件(版本号、插件库位置)和sql文件(动态注册函数、执行升级)。
- hook机制:在创建B兼容性数据库时自动执行create extension dolphin语句,插件初始化时注册钩子函数。
- 独立语法:通过hook在语法解析器执行时调用插件语法解析器,如rename table语法变换为MySQL兼容性语法。
- 独立函数:重建B兼容性函数缓存并替换server函数缓存,实现MySQL用户锁到openGauss锁机制的转换。
- 独立通讯协议:开启单独监听端口,兼容MySQL密码认证和SQL执行协议。
- 独立SQL执行:解决MySQL与PostgreSQL在错误信息、大小写、结果集等方面的冲突。
MDB系统提供异构数据库迁移全生命周期管理:
- 离线迁移工具:自动化对象和数据迁移,支持并发度和兼容性改造。
- 在线同步系统:实时捕获源库数据变更并同步到目标库,支持名称与数据转换。
- 数据校验:采用区块对比和逐行对比策略,确保迁移数据一致性。
MDB支持七种源端数据库(Oracle、MySQL、DB2、PostgreSQL、Informix、SQL Server、File)的SQL采集和兼容性分析,运行于Linux x86_64和arm64平台。数据同步采用开源Debezium组件,数据校验通过特征值处理与对比实现。