数据库全量数据抽取方法与流程

专利2022-06-30  95


本发明涉及数据库数据处理技术领域,尤其是涉及一种能够快速、准确、及时地抽取全量数据的数据库全量数据抽取方法。



背景技术:

近年来,随着信息技术的进步和互联网的快速发展,积累了大量的数据库业务数据。需要对全量数据进行数据抽取转换,装载,备份,以应对发生自然灾害等异常情况,保障数据不丢失。

目前,oracle数据库是通过数据泵(expdp/impdp)对全量数据进行实施迁移,然而实际业务中需要将数据进行过滤转换映射操作,单纯的数据迁移并不能满足实际业务需求,灵活度不够,继而需要一种全量数据抽取方案。

而在全量数据抽取过程中,无法保证大数据量下数据的完整性、准确性、一致性的同时,在服务器发生故障重新恢复正常后,需重新抽取,无法保证数据抽取的速度。



技术实现要素:

本发明的发明目的是为了克服现有技术中的全量数据抽取过程中,无法保证大数据的完整性、准确性、一致性,无法保证数据抽取速度的不足,提供了一种能够快速、准确、及时地抽取全量数据的数据库全量数据抽取方法。

为了实现上述目的,本发明采用以下技术方案:

一种数据库全量数据抽取方法,包括如下步骤:

(1-1)全量数据抽取配置:配置数据源信息,抽取内容,抽取模式及抽取对象;

(1-2)全量数据抽取:读取数据字典获取要抽取的对象内容,以一张表为单位,多个线程并发抽取,采取生产者与消费者模式,将数据内容存储在缓存中;

(1-3)全量数据保存与记录:将缓存中的数据保存到本地文件,并记录当前已抽取表的条数,主键字段值,是否完成状态,保存在本地用于断点续传功能。

能够快速、准确、及时地抽取全量数据,尤其是在海量数据的情况下,能够完成全量数据的抽取,同时保证实现难度小,节省用户的成本,能够在服务器发生故障重新恢复正常后,继续抽取;不会重复抽取。

作为优选,所述数据源信息包括ip地址,端口,实例,用户名和密码;所述抽取内容为数据或数据和结构,所述抽取模式为用户级别或表格级别;所述抽取对象为抽取的用户下的表或排除的表。

作为优选,所述多个线程并发抽取是将并发线程的个数设置成可配置,多张表同时进行抽取,根据服务器性能动态修改;

所述生成者与消费者模式,是开启以表为单位的extracter抽取线程和worker线程,extracter线程读取数据字典,并将从数据字典获取的行数据内容存放到队列中,worker线程将队列中的行数据批量读取并处理。

作为优选,所述数据保存为将数据进行压缩与加密再保存到本地;所述断点续传功能,即当程序中断重启后,全量数据抽取在上次抽取的基础上继续抽取,无需重头开始抽取。

作为优选,所述记录主键字段值,用于断点续传,程序重启后extracter抽取线程在该主键字段值的基础上读取数据字典。

作为优选,所述记录是否完成状态,用于断点续传,当状态为未开始或未完成时,继续抽取.

作为优选,所述当前已抽取表的条数,用于结束抽取时和数据库中该表的总行数进行比较,判断是否丢失数据,保障数据的准确性。

因此,本发明具有如下有益效果:能够快速、准确、及时地抽取全量数据,在海量数据的情况下,能够完成全量数据的抽取,同时保证实现难度小,节省用户的成本,能够在服务器发生故障重新恢复正常后,继续抽取;不会重复抽取。

附图说明

图1是本发明的一种示意图;

图2是本发明的一种流程图。

具体实施方式

下面结合附图和具体实施方式对本发明做进一步的描述。

如图1所示,本发明提供了一种数据库全量数据抽取装置,主要包括:全量数据抽取配置,多线程并行抽取,全量数据保存与记录;

包括如下步骤:

a、应用程序通过数据库链接配置数据源信息,抽取内容,抽取模式及抽取对象;

b、多线程并行抽取,以表为单位实现多个线程,并行抽取的最大线程数可配置,extracter线程根据配置信息读取数据字典,获取要抽取的对象内容,并将行数据内容存储在队列中,worker线程批量读取队列中的行数据并进行处理,处理完后存储在缓存中;

c、全量数据保存与记录,将缓存中的数据进行压缩加密并保存到本地文件,且记录当前已抽取表的条数,主键字段值,是否完成状态信息,保存在本地用于断点续传功能。

下面根据上述步骤进行具体描述。

如图2所示,首先配置源数据库信息包括ip地址,端口,实例,用户名和密码;配置抽取内容可以选择仅数据或数据和结构,配置抽取模式可以选择用户级别或表格级别;配置抽取对象可以选择所要抽取的哪些用户下的表或排除的表。

然后,全量数据抽取线程,以表为单位开启多个extracter和worker抽取线程,extracter线程先读取上次抽取保存在本地的该表抽取记录文件,获取是否完成抽取,如果已经完成,extracter线程将状态发送给worker线程并停止线程,worker线程收到已完成,则停止线程;如果为未完成或未开始状态,则获取上次抽取的主键字段值,extracter线程在此主键字段值的基础上读取数据字典,worker线程批量读取extracter线程存放到队列中的行数据内容,并进行处理,处理完后存储在缓存中;当extracter线程读取数据字典完成则停止线程,并将完成状态发送给worker线程,worker线程获取到已完成就停止线程。

最后,将缓存中的行数据进行加密压缩保存到本地文件,并记录该行数据的主键值,已抽取条数和抽取状态在本地文件中。

下面举例说明:

假设oracle数据库某个用户下有n张100万行的大表,表1-n,假设表结构为aintegerprimarykey,bvarchar,cnumber(10)。

1)首先,根据上述步骤中的配置源数据库信息,将抽取内容配置成数据,抽取模式配置成表格级别,抽取对象配置成仅抽取表1-n,其它表全部排除。

2)然后,创建线程池,将以表1-n生成的extracter1-n和worker1-n线程放到线程池缓存队列中,最多5个线程并发抽取。extracter1-n和worker1-n线程分别开始抽取表1-n,extracter1-n线程分别先读取本地的表1-n记录文件,获取表1-n上次抽取的主键a的值和上次抽取状态laststatus,如果laststatus为已完成,extracter1-n将已完成状态发送给worker1-n线程并停止线程,worker1-n线程收到已完成就停止线程。如果laststatus为未完成或未开始状态,extracter1-n线程分别在上次抽取的主键a的值的基础上读取表1-n的数据字典,并将数据放到队列中,worker1-n线程分别每次批量从队列中读取数据并进行处理,处理完后存储在缓存中。

3)最后,将缓存中的行数据进行加密压缩保存到本地文件,并记录该行数据的主键值,已抽取条数和抽取状态在本地文件中。

应理解,本实施例仅用于说明本发明而不用于限制本发明的范围。此外应理解,在阅读了本发明讲授的内容之后,本领域技术人员可以对本发明作各种改动或修改,这些等价形式同样落于本申请所附权利要求书所限定的范围。


技术特征:

1.一种数据库全量数据抽取方法,其特征是,包括如下步骤:

(1-1)全量数据抽取配置:配置数据源信息,抽取内容,抽取模式及抽取对象;

(1-2)全量数据抽取:读取数据字典获取要抽取的对象内容,以一张表为单位,多个线程并发抽取,采取生产者与消费者模式,将数据内容存储在缓存中;

(1-3)全量数据保存与记录:将缓存中的数据保存到本地文件,并记录当前已抽取表的条数,主键字段值,是否完成状态,保存在本地用于断点续传功能。

2.根据权利要求1所述的数据库全量数据抽取方法,其特征是,所述数据源信息包括ip地址,端口,实例,用户名和密码;所述抽取内容为数据或数据和结构,所述抽取模式为用户级别或表格级别;所述抽取对象为抽取的用户下的表或排除的表。

3.根据权利要求1所述的数据库全量数据抽取方法,其特征是,所述多个线程并发抽取是将并发线程的个数设置成可配置,多张表同时进行抽取,根据服务器性能动态修改;

所述生成者与消费者模式,是开启以表为单位的extracter抽取线程和worker线程,extracter线程读取数据字典,并将从数据字典获取的行数据内容存放到队列中,worker线程将队列中的行数据批量读取并处理。

4.根据权利要求1所述的数据库全量数据抽取方法,其特征是,所述数据保存为将数据进行压缩与加密再保存到本地;所述断点续传功能,即当程序中断重启后,全量数据抽取在上次抽取的基础上继续抽取,无需重头开始抽取。

5.根据权利要求1所述的数据库全量数据抽取方法,其特征是,所述记录主键字段值,用于断点续传,程序重启后extracter抽取线程在该主键字段值的基础上读取数据字典。

6.根据权利要求1所述的数据库全量数据抽取方法,其特征是,所述记录是否完成状态,用于断点续传,当状态为未开始或未完成时,继续抽取。

7.根据权利要求1或2或3或4或5或6所述的数据库全量数据抽取方法,其特征是,所述当前已抽取表的条数,用于结束抽取时和数据库中该表的总行数进行比较,判断是否丢失数据,保障数据的准确性。

技术总结
本发明公开了一种数据库全量数据抽取方法,包括如下步骤:全量数据抽取配置:配置数据源信息,抽取内容,抽取模式及抽取对象;全量数据抽取:读取数据字典获取要抽取的对象内容,以一张表为单位,多个线程并发抽取,采取生产者与消费者模式,将数据内容存储在缓存中;全量数据保存与记录:将缓存中的数据保存到本地文件,并记录当前已抽取表的条数,主键字段值,是否完成状态,保存在本地用于断点续传功能。本发明具有特点。

技术研发人员:陈慧慧;柳遵梁;闻建霞
受保护的技术使用者:杭州美创科技有限公司
技术研发日:2019.10.28
技术公布日:2020.06.05

转载请注明原文地址: https://bbs.8miu.com/read-57959.html

最新回复(0)