应用于关系型数据库数据装载的方法技术

技术编号:24888625 阅读:22 留言:0更新日期:2020-07-14 18:16
本发明专利技术公开了一种应用于关系型数据库数据装载的方法,包括如下步骤:数据文件读取线程读取需要装载到目标数据库的数据文件,数据文件分为存量数据文件和增量数据文件;存量数据装载线程将读取的数据文件,通过数据处理生成sql语句,批量执行至目标数据库中,并保存为ckpt数据;当存量装载线程手动退出或异常终止,重新启动存量数据装载线程后,数据文件读取线程在上一次读取的位置继续读取数据。本发明专利技术具有能够实现数据库的存量和增量的数据装载;能够根据配置解决异构数据库的DDL转换的特点。

【技术实现步骤摘要】
应用于关系型数据库数据装载的方法
本专利技术涉及数据库中的数据复制
,尤其是涉及一种能够实现数据库的存量和增量的数据装载;能够根据配置解决异构数据库的DDL转换,保证异构数据库的数据装载;可根据使用场景,对数据进行转换后装载的应用于关系型数据库数据装载的方法。
技术介绍
传统的数据同步复制是由数据库自身同构复制技术实现的,当源表发生变化时,由数据库引擎引发同步事件,把源表中变化的数据同步更新到目标数据库中,但是上述复制技术只能在同构数据库之间使用,目前各数据库开发商在各自的数据库同构复制的基础上提出了异构数据库的复制方案,例如,MicrosoftSQLServer提出了出版者/预订者同步方案,Oracle中采用多主复制和物化视图的方案来实现数据同步的功能,DB使用CCD表来实现异构数据库之间的复制。虽然各厂商研发出的辅助工具更好地完善了数据同步复制的功能,但是复制方案仍依赖于自己的数据库管理系统(DatabaseManagementSystem,DBMS)核心技术,不能保证完全与DBMS无关。与同构数据库装载相比,异构数据的装载存在如下几个缺点:(1)数据库会因为使用各种不同的数据模型来表示和存储数据,导致数据格式的混乱,访问接口独立。(2)某些情况下,不能对目标数据库的表结构进行任何改变。当表是动态生成时,无法修改表结构,不能利用数据库本身的复制功能。(3)同步过程中不能对数据进行过滤和转换处理。
技术实现思路
本专利技术的专利技术目的是为了克服现有技术中的上述不足,提供了一种能够实现数据库的存量和增量的数据装载;能够根据配置解决异构数据库的DDL转换,保证异构数据库的数据装载;可根据使用场景,对数据进行转换后装载的应用于关系型数据库数据装载的方法。为了实现上述目的,本专利技术采用以下技术方案:一种应用于关系型数据库数据装载的方法,包括如下步骤:(1-1)数据读取数据文件读取线程读取需要装载到目标数据库的数据文件,数据文件分为存量数据文件和增量数据文件;(1-2)数据装载存量数据装载线程将读取的数据文件,通过数据处理生成sql语句,批量执行至目标数据库中,并保存为ckpt数据;(1-3)断点续传当存量装载线程手动退出或异常终止,重新启动存量数据装载线程后,数据文件读取线程在上一次读取的位置继续读取数据;当增量装载线程手动退出或异常终止,重新启动增量数据装载线程后,数据文件读取线程在上一次读取的位置继续读取数据。本专利技术可以集中处理同异构数据库数据装载过程中产生的冲突,并将数据装载到目标数据库,同时,根据配置可对数据进行过滤转换、数据映射,解决了源数据中分散、零乱、标准不统一的数据,大大提升了数据质量。作为优选,(1-1)包括如下步骤:启动数据文件读取线程,数据文件读取线程获取存量数据文件,以数据段的方式读取,将读取的数据以Json格式序列化到数据文件中,通过Json反序列化解析后得到数据对象;数据对象的属性包括scn值和源数据库库类型;源数据库类型包括Oracle,MySql和Postgresql;根据数据对象得到源数据库类型,如果源数据库类型为oracle数据库,并且当前读取到的数据是存量数据,则将读取到的数据中的scn值存放到持久化的容器中,利用scn值建立存量数据与增量数据的衔接;如果源数据库类型为oracle数据库,并且当前读取到的数据是增量数据,先对oracle数据库的行进行回滚操作;然后,将当前读取到的数据放入内存中,并将数据中的事务号放入待装载的数据队列中。作为优选,(1-2)包括如下步骤:每个存量装载线程获取待装载的数据队列中的事务号,根据事务号,在数据缓存中获取该事务号所对应的所有数据行;每个增量装载线程获取待装载的数据队列中的事务号,根据事务号,在数据缓存中获取该事务号所对应的数据行,遍历所有的数据行,根据每个数据行的数据库类型,如果源库为Oracle数据库,那么对rowld字段值进行hash,得到hash值A11;如果源库为非Oracle数据库,那么通过schemaName、tableName和所有primarys值进行拼接后进行hash,得到hash值A12;再利用当前的装载线程数B1,将A11或A12为被除数,B1为除数做取模运算,得到模值C1;将每个数据行放到模值C1对应的装载线程中进行装载。作为优选,数据文件读取线程在上一次读取的位置继续读取数据包括存量数据续传过程和增量数据续传过程;存量数据续传过程包括如下步骤:读取目标数据库ckpt表中所有的存量装载线程的数据,取得所有的正在装载的事务号和最后提交的事务号,如果正在装载事务号和最后提交的事务号相同,则该事务号对应的事务不必恢复;如果正在装载的事务号和最后提交的事务号不相同,则将该事务号对应的事务恢复;通过比较获取装载线程ckpt中最小的文件偏移位置和最大的文件偏移位置,数据文件读取线程从最小的文件偏移位置开始读取文件,判断数据行中的事务号是否对应需要恢复的事务;如果数据行中的事务号对应需要恢复的事务,则将该事务放入待提交数据队列;数据文件读取线程读取到最大文件偏移位置时,则存量数据断点续传完成。作为优选,增量数据续传过程包括如下步骤:当每个增量装载线程启动时,根据当前的增量装载线程的线程名到目标数据库中查询出当前增量装载线程上次装载的增量装载线程,并在最小的文件偏移位置和最大的文件偏移位置进行数据恢复;增量装载线程根据每个数据行的数据库类型,如果源库为Oracle数据库,那么对rowld字段值进行hash,得到hash值A21;如果源库为非Oracle数据库,那么通过schemaName、tableName和所有primarys值进行拼接后进行hash,得到hash值A22;再利用当前的装载线程数B2,将A21或A22做为被除数,B2为除数做取模运算,得到模值C2;将每个数据行放到模值C2对应的装载线程中进行装载;判断所述数据行是否属于增量装载线程,如果所述数据行属于增量装载线程,则将该数据行放入数据队列,当数据文件读取线程读取到最大文件偏移位置时,则增量数据断点续传完成。作为优选,利用scn值建立存量数据与增量数据的衔接包括如下步骤:数据文件读取线程中保存有每张表A的存量scn值,增量装载线程读取表A的scn值,如果存量的scn值≥增量的scn值,则丢弃掉增量的scn值对应的数据行,如果存量的scn值<增量的scn值,则将增量的scn值对应的数据行装载到目标数据库中,并移除保存的scn值所对应的数据行。作为优选,(1-2)还包括ddl装载处理过程:根据源数据的数据库类型和备库的数据库类型,通过sql语句的语法和词法解析,自动转换备库的ddl语句;如果ddl为与表操作相关的语句,重载数据字典。因此,本专利技术具有如下有益效果:能够实现数据库的存量和增量的数据装载;能够根据配置解本文档来自技高网...

【技术保护点】
1.一种应用于关系型数据库数据装载的方法,其特征是,包括如下步骤:/n(1-1)数据读取/n数据文件读取线程读取需要装载到目标数据库的数据文件,数据文件分为存量数据文件和增量数据文件;/n(1-2)数据装载/n存量数据装载线程将读取的数据文件,通过数据处理生成sql语句,批量执行至目标数据库中,并保存为ckpt数据;/n(1-3)断点续传/n当存量装载线程手动退出或异常终止,重新启动存量数据装载线程后,数据文件读取线程在上一次读取的位置继续读取数据;/n当增量装载线程手动退出或异常终止,重新启动增量数据装载线程后,数据文件读取线程在上一次读取的位置继续读取数据。/n

【技术特征摘要】
1.一种应用于关系型数据库数据装载的方法,其特征是,包括如下步骤:
(1-1)数据读取
数据文件读取线程读取需要装载到目标数据库的数据文件,数据文件分为存量数据文件和增量数据文件;
(1-2)数据装载
存量数据装载线程将读取的数据文件,通过数据处理生成sql语句,批量执行至目标数据库中,并保存为ckpt数据;
(1-3)断点续传
当存量装载线程手动退出或异常终止,重新启动存量数据装载线程后,数据文件读取线程在上一次读取的位置继续读取数据;
当增量装载线程手动退出或异常终止,重新启动增量数据装载线程后,数据文件读取线程在上一次读取的位置继续读取数据。


2.根据权利要求1所述的应用于关系型数据库数据装载的方法,其特征是,(1-1)包括如下步骤:
启动数据文件读取线程,数据文件读取线程获取存量数据文件,以数据段的方式读取,将读取的数据以Json格式序列化到数据文件中,通过Json反序列化解析后得到数据对象;数据对象的属性包括scn值和源数据库库类型;源数据库类型包括Oracle,MySql和Postgresql;
根据数据对象得到源数据库类型,如果源数据库类型为oracle数据库,并且当前读取到的数据是存量数据,则将读取到的数据中的scn值存放到持久化的容器中,利用scn值建立存量数据与增量数据的衔接;
如果源数据库类型为oracle数据库,并且当前读取到的数据是增量数据,先对oracle数据库的行进行回滚操作;然后,将当前读取到的数据放入内存中,并将数据中的事务号放入待装载的数据队列中。


3.根据权利要求1所述的应用于关系型数据库数据装载的方法,其特征是,(1-2)包括如下步骤:
每个存量装载线程获取待装载的数据队列中的事务号,根据事务号,在数据缓存中获取该事务号所对应的所有数据行;
每个增量装载线程获取待装载的数据队列中的事务号,根据事务号,在数据缓存中获取该事务号所对应的数据行,遍历所有的数据行,根据每个数据行的数据库类型,如果源库为Oracle数据库,那么对rowld字段值进行hash,得到hash值A11;如果源库为非Oracle数据库,那么通过schemaName、tableName和所有primarys值进行拼接后进行hash,得到hash值A12;再利用当前的装载线程数B1,将A11或A12为被除数,B1为除数做取模运算,得到模值C1;将每个数据行放到模值C1对应的装载线程中进行装载。


4.根据权利要求1所述的应用于关系型数据库数据装载的方法,其特征是,数据文件读取线程在上一次读取的位置继...

【专利技术属性】
技术研发人员:杨猛柳遵梁
申请(专利权)人:杭州美创科技有限公司
类型:发明
国别省市:浙江;33

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1