本发明专利技术公开了一种数据库全量数据抽取方法,包括如下步骤:全量数据抽取配置:配置数据源信息,抽取内容,抽取模式及抽取对象;全量数据抽取:读取数据字典获取要抽取的对象内容,以一张表为单位,多个线程并发抽取,采取生产者与消费者模式,将数据内容存储在缓存中;全量数据保存与记录:将缓存中的数据保存到本地文件,并记录当前已抽取表的条数,主键字段值,是否完成状态,保存在本地用于断点续传功能。本发明专利技术具有特点。
Full data extraction method of database
【技术实现步骤摘要】
数据库全量数据抽取方法
本专利技术涉及数据库数据处理
,尤其是涉及一种能够快速、准确、及时地抽取全量数据的数据库全量数据抽取方法。
技术介绍
近年来,随着信息技术的进步和互联网的快速发展,积累了大量的数据库业务数据。需要对全量数据进行数据抽取转换,装载,备份,以应对发生自然灾害等异常情况,保障数据不丢失。目前,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.一种数据库全量数据抽取方法,其特征是,包括如下步骤:/n(1-1)全量数据抽取配置:配置数据源信息,抽取内容,抽取模式及抽取对象;/n(1-2)全量数据抽取:读取数据字典获取要抽取的对象内容,以一张表为单位,多个线程并发抽取,采取生产者与消费者模式,将数据内容存储在缓存中;/n(1-3)全量数据保存与记录:将缓存中的数据保存到本地文件,并记录当前已抽取表的条数,主键字段值,是否完成状态,保存在本地用于断点续传功能。/n
【技术特征摘要】
1.一种数据库全量数据抽取方法,其特征是,包括如下步骤:
(1-1)全量数据抽取配置:配置数据源信息,抽取内容,抽取模式及抽取对象;
(1-2)全量数据抽取:读取数据字典获取要抽取的对象内容,以一张表为单位,多个线程并发抽取,采取生产者与消费者模式,将数据内容存储在缓存中;
(1-3)全量数据保存与记录:将缓存中的数据保存到本地文件,并记录当前已抽取表的条数,主键字段值,是否完成状态,保存在本地用于断点续传功能。
2.根据权利要求1所述的数据库全量数据抽取方法,其特征是,所述数据源信息包括ip地址,端口,实例,用户名和密码;所述抽取内容为数据或数据和结构,所述抽取模式为用户级别或表格级别;所述抽取对象为抽取的用户下的表或排除的表。
3.根据权利要求1所述的数据库全量数据抽取方法,其特征是,所述多个线程并发抽取是将并发线程的个数设置成可配置,多张表同时进行抽取,根据服务器性能动态修改;
所述生成者与消费者模式,是开启以表为单位的extracter抽取...
【专利技术属性】
技术研发人员:陈慧慧,柳遵梁,闻建霞,
申请(专利权)人:杭州美创科技有限公司,
类型:发明
国别省市:浙江;33
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。