一种在异构数据库之间迁移数据对象的方法及系统与流程

文档序号:31053235发布日期:2022-08-06 08:55阅读:83来源:国知局
1.本发明涉及计算机及网络通信
技术领域
:,特别涉及一种异构数据库之间迁移数据对象的方法及系统。
背景技术
::2.随着数据处理技术时代的到来,企业高速发展的同时也促成了数据量的爆发式增长,数据量爆发式增长就需要频繁的扩容或者增加数据库。现代化企业运营中,各部门系统长时间独立建设,系统内用于底层数据存储的数据库管理系统也是各有不同。随着企业规模的扩大和业务的升级,原有的数据中心的架构体系、系统性能及存储容量逐渐不能满足业务的需要,因而需要进行企业信息系统的改造和升级,数据迁移是其中非常重要的环节。数据迁移,又称之为数据移植,是指从一种数据环境(源数据库)中提取数据,根据需要,迁移或移植到另一种数据环境(目标数据库)中。异构数据库是指具有不同数据模型、不同体系结构,或者虽是同一类型但为不同厂家研制的数据库,如同为关系型数据库的sqlserver和oracle等。异构数据库间数据迁移,即在如上所述数据库之间无损地,接近等价地移植数据。对于异构数据库间的数据迁移,传统方案多采用基于数据库或数据接口硬编码数据迁移程序,或人工录入的方式。但前者开发成本较高,重用性较差;后者所需时间和人力都非常大,且很难保证数据的准确性。3.在异构数据库数据对象迁移的过程中,工具的选择变得尤为重要,现在的解决办法基本都是:借助通用的数据库管理和开发工具来进行异构数据库的迁移,比如可以使用类似于navicat的数据传输功能来同步mysql和oracle。或者使用powerdesigner这种建模工具的逆向工程功能,将源数据表生成物理模型,最后根据物理模型来创建目标数据表。4.但这些方式仍有不足:一方面,如果要迁移的数据库表很多,那么使用可视化工具会很慢,而且容易出错,使用此类方法迁移效率低并且支持的数据库有限;另一方面,这些软件都是商业软件,使用者需要支付一笔费用,而且不是国产自主可控的,随时都有被禁止使用的风险。在此环境下,开源数据库或者国产自研的数据库变得尤为重要。技术实现要素:5.针对现有技术存在的问题,本发明的目的在于通过应用软件和sdk软件开发应用包的方式,能够快速便捷的实现异构数据库之间数据对象的迁移,并支持生成sql语句以及主流编程语言的实体类。6.为实现上述目的,本发明提供一种在异构数据库之间迁移数据对象的方法,所述方法应用于具有应用层、引擎层和存储层的应用软件,包括以下步骤:7.s1.通过应用层为应用软件使用者提供软件界面和sdk软件开发应用包的接入方式;8.s2.通过引擎层读取使用者的配置信息,将待迁移数据库中的数据对象解析成通用数据对象模型,再将通用数据对象模型生成目标数据库语言或者生成编程语言实体类;9.s3.通过存储层将目标数据库语言或者编程语言实体类写入到目标数据库中,并生成日志文件。10.进一步,步骤s1中,配置信息包括待迁移数据库的数据源驱动器、数据库链接、用户名、密码以及需要生成数据对象的目标数据库的数据源驱动器或者自定义驱动器文件位置、数据库链接、用户、密码;在应用层会对待迁移数据库和目标数据库进行连通性测试;连通性测试通过后使用sdk软件开发应用包,形成yaml配置文件。11.进一步,步骤s2中包括子步骤s21.引擎层读取应用层的yaml配置文件并进行待迁移数据库的连接,将待迁移数据对象加载到程序对应的实体类中,通过判断待迁移数据库的类型,选择相应的驱动方式,使用驱动管理器连接待迁移数据库,驱动注册之后,将驱动管理器保存在已注册的驱动列表中。12.进一步,步骤s2中包括子步骤s22.获取待迁移数据库表信息:通过驱动管理器的获取元数据方法获取待迁移数据库的元信息,通过元信息获取到所有的表名和表注释,将获取到的表名和表注释映射到待迁移数据库表实体类中,此时应用软件页面将显示所有的待迁移数据库表名和表注释;使用sdk软件开发应用包的方式将待迁移数据库表信息记录到日志文件;从而完成待迁移数据对象到待迁移数据库表实体类的映射。13.进一步,步骤s2中包括子步骤s23.获取字段信息并生成通用数据对象模型:通过驱动管理器的预编译获取预编译对象,再通过预编译对象的getmetadata()方法获取结果集元数据,再通过getcolumns()方法获取待迁移数据库表信息的字段信息,索引也通过getindexinfo()方法进行获取;通过预编译对象获取注释信息;最后将获取的字段信息、索引和字段注释映射到通用数据对象模型中。14.进一步,步骤s2中包括子步骤s24.进行数据字段的转换,包括首先构建各个数据库之间的数据类型映射关系表,通过数据类型映射关系表加正则匹配的方式实现待迁移数据库到目标数据库数据对象类型的转换;其次根据数据类型映射关系表与通用表字段实体类进行比对与替换;最后生成一个新的目标数据库表字段实体类。15.数据类型映射关系表中,在存在待迁移数据库表中的字段与目标数据库表字段是一对多的关系的情况下,通过在程序中使用正则表达式number\(\d+\s*(\,\s*\d+)\)来区分判断。16.进一步,步骤s2中包括子步骤s25.目标sql语句及编程语言实体类的生成,通过代码中对模版的填充构建出建表语句以及建立索引的语句;编程语言实体类的生成首先通过配置文件指定编程语言,接着根据编程语言加载对应的模版,然后使用目标表字段实体类进行填充,最后生成编程语言实体类。17.另一方面,本发明提供一种在异构数据库之间迁移数据对象的系统,用于实施根据本发明所述的方法,所述系统包括应用层、引擎层和存储层;18.所述应用层为软件使用者提供软件界面以及sdk软件开发应用包的接入方式;19.所述引擎层用于读取使用者的配置信息,将待迁移数据库的数据对象解析成通用数据对象模型,再将通用数据对象模型生成目标数据库语言或者生成编程语言实体类;20.所述存储层用于将目标数据库语言或者编程语言实体类写入到目标数据库中,并生成日志文件,记录迁移的信息。21.进一步,通过所述应用层、引擎层和存储层的配合协作使得程序通过读取配置中数据库的种类选择对应的驱动器,通过配置的链接连接到指定数据库,通过读取数据库的方式,将数据对象转换成通用的模型,最后再转换成目标数据对象。22.本发明的主要优点在于通过应用软件或sdk软件开发应用包,两种方式进行数据库对象的迁移,迁移过程中不需要人工干预可自动完成,节省大量时间。并且生成sql语句以及主流编程语言的实体类,节省了后续开发中的编写建表语句以及实体类的时间。附图说明23.图1为根据本发明实施例在异构数据库之间迁移数据对象的方法和系统架构示意图;24.图2为根据本发明实施例在异构数据库之间迁移数据对象的方法和系统中数据源表结构示意图;25.图3a为根据本发明实施例在异构数据库之间迁移数据对象的方法和系统中数据库表实体类示意图;26.图3b为根据本发明实施例在异构数据库之间迁移数据对象的方法和系统中通用表字段实体类示意图;27.图3c为根据本发明实施例在异构数据库之间迁移数据对象的方法和系统中目标表字段实体类示意图;28.图4a为根据本发明实施例在异构数据库之间迁移数据对象的方法和系统中生成的sql语句示意图;29.图4b为根据本发明实施例在异构数据库之间迁移数据对象的方法和系统中生成的java代码的实体类示意图。具体实施方式30.下面将结合附图,对本发明的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。31.在本发明的描述中,需要说明的是,术语“中心”、“上”、“下”、“左”、“右”、“竖直”、“水平”、“内”、“外”等指示的方位或位置关系为基于附图所示的方位或位置关系,仅是为了便于描述本发明和简化描述,而不是指示或暗示所指的装置或元件必须具有特定的方位、以特定的方位构造和操作,因此不能理解为对本发明的限制。此外,术语“第一”、“第二”、“第三”仅用于描述目的,而不能理解为指示或暗示相对重要性。32.在本发明的描述中,需要说明的是,除非另有明确的规定和限定,术语“安装”、“相连”、“连接”应做广义理解,例如,可以是固定连接,也可以是可拆卸连接,或一体地连接;可以是机械连接,也可以是电连接;可以是直接相连,也可以通过中间媒介间接相连,可以是两个元件内部的连通。对于本领域的普通技术人员而言,可以根据具体情况理解上述术语在本发明中的具体含义。33.以下结合附图1-4对本发明的具体实施方式进行详细说明。应当理解的是,此处所描述的具体实施方式仅用于说明和解释本发明,并不用于限制本发明。34.为了快速便捷的实现异构数据库之间数据对象的迁移,本发明实施例提供一种在异构数据库之间迁移数据对象的方法及系统,如图1所示,根据本发明的在异构数据库之间迁移数据对象的系统包括三个部分,分别为应用层1、引擎层2和存储层3。通过上述应用层1、引擎层2和存储层3的配合协作使得程序通过读取配置中数据库的种类选择对应的驱动器,通过配置的链接连接到指定数据库,通过读取数据库的方式,将数据对象转换成通用的模型,最后再转换成目标数据对象。其中,应用层1内包括应用程序11和sdk软件开发应用包12;引擎层2用于实现配置读取、连接数据库、生成通用数据对象模型、数据字段转换和生成目标数据库语言或变成语言实体类的功能;存储层3用于实现日志写入、日志存储、通用对象存储和目标数据库存储的功能。35.另一方面,根据本发明的在异构数据库之间迁移数据对象的方法的基本流程为:36.s1.通过应用层1为软件使用者提供了软件界面以及sdk软件开发应用包的接入方式;37.s2.通过引擎层2读取使用者的配置信息,将待迁移数据库中的数据对象解析成通用数据对象模型,再将通用数据对象模型生成目标数据库语言或者生成编程语言实体类;38.s3.通过存储层3将目标数据库语言或者编程语言实体类写入到目标数据库中,生成日志文件,记录成功以及失败的信息。39.具体的,步骤s1中,在应用层1中,应用程序11提供了可视化的界面,无编程经验也可以根据提示进行操作,其通过api接口的方式与引擎层进行通信;sdk软件开发应用包是对引擎层api接口的封装,使用者可以通过sdk软件开发应用包实现快速的集成与开发;应用程序与sdk软件开发应用包提供了yaml格式的配置文件,引擎层通过读取配置文件获取到使用者的相关配置,其中配置信息包括待迁移数据库的数据源驱动器、数据库链接、用户名、密码以及需要生成数据对象的目标数据库的数据源驱动器或者自定义驱动器文件位置、数据库链接、用户、密码。在应用层会对待迁移数据库和目标数据库进行连通性测试;如无法连通则给出相应错误提示以及建议,以便使用者修改。本发明的方法支持生成多种目标数据库的数据对象以及编程语言实体类。40.程序中的默认参数选项包括:待迁移数据对象是否存储到本地mysql数据库本实施例中,待迁移数据对象是否存储到本地mysql数据库默认为打开;是否将待迁移数据对象迁移到目标数据库默认为打开。本发明的方法和系统支持的数据源类型有:mysql、oracle、sqlserver、postgresql、greenplum、sqlite、db2、maxcompute、以及tidb等,同时使用者可以通过上传自定义的驱动器的方式来适配更多的数据源。本实施例中,数据源表结构如图2所示,包括数据源驱动器、数据库链接、用户名、密码和自定义驱动器文件位置。41.步骤s2中,引擎层2是本发明的在异构数据库之间迁移数据对象的方法及系统的核心,步骤s2包括以下子步骤:42.s21.引擎层读取应用层的yaml配置文件并进行待迁移数据库的连接。将待迁移数据对象加载到程序对应的实体类中,通过判断待迁移数据库的类型,选择相应的驱动方式,使用驱动管理器连接待迁移数据库,驱动注册之后,将驱动管理器保存在已注册的驱动列表中,后续的处理使用所述驱动列表进行操作。43.s22.获取待迁移数据库表信息:通过驱动管理器的获取元数据方法获取待迁移数据库的元信息,通过元信息获取到所有的表名、表注释,将获取到的表名、表注释映射到待迁移数据库表实体类中,此时应用软件页面将显示所有的待迁移数据库表名、表注释;使用sdk软件开发应用包的方式将待迁移数据库表信息记录到日志文件;从而完成待迁移数据对象到待迁移数据库表实体类的映射。44.s23.获取字段信息并生成通用数据对象模型:通过驱动管理器的预编译(preparestatement)获取预编译对象,再通过预编译对象的getmetadata()方法获取结果集元数据,再通过getcolumns()方法获取待迁移数据库表信息的字段信息。索引的获取与字段的获取是类似的,通过getindexinfo()方法来获取。字段注释的获取:以mysql为例,通过预编译对象执行executequery(“showfullcolumnsfromtablename”)来获取注释信息。最后将获取的字段信息、索引和字段注释映射到通用数据对象模型中,如图3b所示。45.s24.进行数据字段的转换,因为不同数据库之间字段类型存在着差异,此步骤解决从待迁移数据库到目标数据库数据类型转换的问题。软件有提前构建好的各个数据库之间的数据类型映射关系表,数据迁移时直接使用对应的映射关系表,同时使用者也可以根据需要自定义修改。映射关系表的映射规则为一对一的关系,如果存在待迁移数据库表中的字段与目标数据库表字段是一对多的关系,例如:oracle中的number(5,1)对应着mysql中的decimal(5,1);oracle中的number(5)对应着mysql中的int(5)。此例中,oracle一个number对应着mysql中的decimal和int类型,那么在程序中使用正则表达式number\(\d+\s*(\,\s*\d+)\)来区分判断。通过映射关系表加正则匹配的方式可以解决待迁移数据库到目标数据库数据对象类型转换的问题。其次根据数据类型映射关系表与通用表字段实体类进行比对与替换,最后生成一个新的目标数据库表字段实体类。如图3c所示。46.s25.目标数据库语言和编程语言实体类的生成。程序中提供了多种主流sql的模版,如mysql、oracle、sqlserver、maxcompute等。sql(structuredquerylanguage)是具有数据操纵和数据定义等多种功能的数据库语言,这种语言具有交互性特点,能为用户提供极大的便利,数据库管理系统应充分利用sql语言提高计算机应用系统的工作质量与效率。sql语言不仅能独立应用于终端,还可以作为子语言为其他程序设计提供有效助力,该程序应用中,sql可与其他程序语言一起优化程序功能,进而为用户提供更多更全面的信息。47.通过代码中对模版的填充构建出建表语句以及建立索引的语句。程序也支持自定义模版的方式进行生成,通过自定义模版以及指定加载字段的方式构造出相应的sql。编程语言实体类的生成也是通过模版的方式来实现,首先通过配置文件指定编程语言,接着根据编程语言加载对应的模版,然后使用目标表字段实体类进行填充,最后生成一份指定编程语言实体类。48.存储层3通过配置文件决定结果输出到目标数据库。写入目标数据库则通过引擎层2生成的建表建索引的语句来执行,此过程通过驱动管理器drivermanager来实现,目标数据库使用了对应数据库提供的sdk软件开发应用包来实现,提高迁移的成功率。对于写入失败的部分记录在日志文件中,待迁移完成后分析日志文件并修复重拾。49.本实施例中通过测试将mysql数据对象迁移到maxcompute和oracle中进行说明。首先在mysql中构建需要迁移的32张表,使用本发明的方法在使用sdk软件开发应用包的情况下进行一键迁移,并输出对应的建表语句以及java语言的实体类。50.生成的sql语句为图4a所示,查看日志文件中是否每一条sql都成功执行,并且对每一张表的表结构进行比对,接着对生成的建表语句通过人工的方式运行,观察是否成功,最后将java语言的实体类导入项目中,并通过mybatis的方式进行映射,观察是否成功,生成的java代码的实体类如图4b所示。计算每种方式目标数据库与源数据库的比值,最后求得3种方式平均值为最终成功率。51.结果分析:在日志文件中32张表全部运行成功,并且在maxcompute和oracle中均构建成功,并且sql语句可以通过人工的方式运行成功,测试后得出最终成功率100%。52.本发明的关键技术在于通过sdk软件开发应用包的接入方式使用数据类型映射关系表生成异构数据的sql语句及主流开发语言实体类。53.在本说明书的描述中,参考术语“实施例”、“示例”等的描述意指结合该实施例或示例描述的具体特征、结构、材料或者特点包含于本发明的至少一个实施例或示例中。在本说明书中,对上述术语的示意性表述不必须针对的是相同的实施例或示例。此外,本领域的技术人员可以在不产生矛盾的情况下,将本说明书中描述的不同实施例或示例以及其中的特征进行结合或组合。54.上述内容虽然已经示出和描述了本发明的实施例,可以理解的是,上述实施例是示例性的,不能理解为对本发明的限制,本领域的普通技术人员在本发明的范围内可以对上述实施例进行变化、修改、替换和变型等更新操作。当前第1页12当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1