CN109710679B - 数据抽取方法及装置 - Google Patents
数据抽取方法及装置 Download PDFInfo
- Publication number
- CN109710679B CN109710679B CN201811628810.6A CN201811628810A CN109710679B CN 109710679 B CN109710679 B CN 109710679B CN 201811628810 A CN201811628810 A CN 201811628810A CN 109710679 B CN109710679 B CN 109710679B
- Authority
- CN
- China
- Prior art keywords
- fragment
- data
- execution
- queue
- description information
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Landscapes
- Memory System Of A Hierarchy Structure (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发深度数据处理领域,提供一种数据抽取方法及装置。其中,数据抽取方法包括:获取待抽取数据的总体描述信息;根据总体描述信息将待抽取数据划分为多个分片,每个分片对应有分片描述信息;按照分片进行数据抽取,每次抽取执行如下步骤:根据分片描述信息从源系统中获取对应的分片,并将分片缓存至内存中;将缓存的分片存储至目标系统中。上述方法在抽取数据时,待抽取数据并未落地存储,待抽取数据的分片是在内存中缓存的,因此数据抽取过程的执行效率得到显著提高。同时,由于数据抽取是按照分片进行的,不必将全部的待抽取数据都缓存到内存中,因此该方法对于待抽取数据的量较大,而内存空间有限的情况也能够适用。
Description
技术领域
本发明涉及数据处理技术领域,具体而言,涉及一种数据抽取方法及装置。
背景技术
数据抽取是指将数据从源系统中导出,并导入到目标系统中的过程。在常见的应用场景中,数据抽取通过一服务器完成,服务器上部署有源系统或目标系统。然而,在现有技术中,源系统导出的数据需要先在服务器上落地存储,然后再导出到目标系统中去,导致数据抽取过程的效率低下。
发明内容
有鉴于此,本发明实施例提供一种数据抽取方法及装置,对待抽取数据进行分片后,按照分片抽取数据,以提高数据抽取过程的效率。
为实现上述目的,本发明提供如下技术方案:
第一方面,本发明实施例提供一种数据抽取方法,包括:
获取待抽取数据的总体描述信息,待抽取数据保存在源系统中;
根据总体描述信息将待抽取数据划分为多个分片,每个分片对应有分片描述信息;
按照分片进行数据抽取,每次抽取执行如下步骤:
根据分片描述信息从源系统中获取对应的分片,并将分片缓存至内存中;
将缓存的分片存储至目标系统中。
上述方法在抽取数据时,待抽取数据并未落地存储,待抽取数据的分片是在内存中缓存的,因此数据抽取过程的执行效率得到显著提高。同时,由于数据抽取是按照分片进行的,每个分片只是待抽取数据的一部分,因此不必将全部的待抽取数据都缓存到内存中,特别是对于待抽取数据的量较大,而内存空间有限的情况,该方法同样能够支持数据的不落地抽取,其适用范围较广,实用价值较高。
在一些实施例中,将缓存的分片存储至目标系统中,包括:
对缓存的分片中的数据进行转换和/或过滤,并将处理后的分片存储至目标系统中。
其中,转换是指将数据从源系统中的存储格式转换为目标系统中的存储格式,过滤是指目标系统并不需要源系统中取出的全部数据,只需要其中的一部分数据,因此需要按照一定的规则排除掉其中的部分数据,转换以及过滤的步骤可以根据数据抽取任务的实际需求选择是否需要执行。
在一些实施例中,根据总体描述信息将待抽取数据划分为多个分片之后,方法还包括:
将每个分片的分片描述信息缓存至第一队列;
根据分片描述信息从源系统中获取对应的分片,并将获取的分片缓存至内存中,包括:
从第一队列中取出分片描述信息,根据分片描述信息从源系统中获取对应的分片,并将获取的分片缓存至内存中。
在这些实施例中,先将分片描述信息缓存至第一队列,在能够处理分片时主动从第一队列中取出分片描述信息并执行分片中数据的抽取步骤,使得数据的抽取与实际的处理能力是适配的,队列的数据结构保证先放入的分片描述信息对应的分片会先进行抽取。在一些实现方式中,第一队列还可以采用线程安全的实现方式,从而正确处理多个执行者同时向第一队列索取分片描述信息的情况。
在一些实施例中,从第一队列中取出分片描述信息,根据分片描述信息从源系统中获取对应的分片,并将获取的分片缓存至内存中,包括:
任务管理线程在确定第二队列还能够缓存新的分片时,从第一队列中取出分片描述信息,并控制分片获取线程执行以下步骤:根据分片描述信息从源系统中获取对应的分片,并将获取的分片缓存至第二队列;其中,第二队列为内存中的队列,每个分片由一个分片获取线程负责获取。
在这些实施例中,由于采用了不同于任务管理线程的分片获取线程去获取分片,并且利用第二队列缓存获取到的分片,使得从源系统获取分片以及将分片存储至目标系统这两个过程可以同时执行,即只要第二队列中还可以容纳新的分片就可以向第一队列索要分片描述信息,同时只要第二队列中还缓存有分片就可以执行分片的存储操作,有利于提高数据抽取过程的效率。此外,第二队列是内存中的队列,确保了待抽取的数据不会落地。
在一些实施例中,将缓存的分片存储至目标系统中,包括:任务管理线程在确定存在可用的任务执行线程时,从第二队列中取出分片,将取出的分片缓存至任务监控线程的第三队列,并控制任务监控线程执行以下步骤:从第三队列中取出缓存的分片中的数据并控制任务执行线程将取出的数据存储至目标系统中;其中,第三队列为内存中的队列,每个从第二队列中取出的分片由一个任务监控线程负责存储,执行中的全部任务监控线程共用预设数量的任务执行线程。
在这些实施例中,每个分片中的数据由一个任务监控线程负责存储,而各个执行中的任务监控线程之间共用预设数量的任务执行线程实际存储数据,并且任务管理线程只要发现存在可用的任务执行线程就会立即控制任务监控线程开始执行分片的存储,各线程之间密切配合,充分利用了线程资源,避免了线程闲置,提高了数据抽取的效率。此外,第三队列是内存中的队列,确保了待抽取的数据不会落地。
在一些实施例中,所述任务管理线程在确定存在可用的所述任务执行线程时,从所述第二队列中取出分片,将取出的分片缓存至任务监控线程的第三队列,并控制所述任务监控线程执行,包括:
所述任务管理线程在确定存在可用的所述任务执行线程,且确定执行中的每个任务监控线程的第三队列均为空时,从所述第二队列中取出分片,将取出的分片缓存至任务监控线程的第三队列,并控制所述任务监控线程执行。
这些实施例考虑如下情况:在当前的任务监控线程中,一个分片中的数据尚未被完全分配给各个任务执行线程(即任务监控线程的第三队列不为空),此时若还存在一个可用的任务执行线程,该任务执行线程将被当前的任务监控线程用于存储上述分片中的数据。
若不包括上述第三队列均为空的限制条件,则任务管理线程在发现该任务执行线程可用时,会控制一个新的任务监控线程开始执行,企图利用该可用的任务执行线程存储另一个分片中的数据,然而,在新的任务监控线程开始执行后,该可用的任务执行线程可能已经被当前的任务监控线程所使用,导致新的任务监控线程只能等待下去。如果多次出现上面的情况,甚至可能出现大量处于等待状态的任务监控线程无端占用系统资源,耗尽内存的情况。
若包括上述第三队列均为空的限制条件,则可确保任务管理线程发现的可用的执行线程必然会被新的任务监控线程所使用,即可以避免出现上述问题。
此外,上述解决方案还确保了已经在执行的任务监控线程能够优先使用任务执行线程存储分片,使得分片将按照其在第二队列中缓存时的顺序被依次处理。
在一些实施例中,方法还包括:
任务执行线程在每存储一条数据后,将该条数据的数据执行状态发送至任务监控线程,数据执行状态用于表征该条数据是否存储成功;
任务监控线程根据接收到的至少一个数据执行状态,确定在负责存储的分片的抽过程取中的分片执行状态;
根据至少一个分片执行状态,确定在待抽取数据的抽取过程中的任务执行状态。
在这些实施例中,数据的执行状态由任务执行线程开始逐级向上反馈,最终获得数据抽取任务的任务执行状态,通过这些状态便于对数据抽取过程进行监控。
在一些实施例中,任务监控线程根据接收到的至少一个数据执行状态,确定在负责存储的分片的抽取过程中的分片执行状态,包括:
任务监控线程在确定接收到的任一数据执行状态为执行失败或超时未收到数据执行状态时,确定分片执行状态为执行失败;
根据至少一个分片执行状态,确定在待抽取数据的抽取过程中的任务执行状态,包括:
在确定任一分片执行状态为执行失败或超时未收到分片执行状态时,确定任务执行状态为执行失败。
在这些实施例中,定义了数据执行状态、分片执行状态以及任务执行状态三者的具体关系,同时将超时未返回状态和执行失败作类似处理,因为超时未返回状态表明执行处理任务的线程可能已经发生了异常无法再继续执行。
在一些实施例中,方法还包括:
任务监控线程在确定接收到的任一数据执行状态为执行失败或超时未收到数据执行状态时,控制任务执行线终止执行负责存储的分片中的数据的存储操作。
在这些实施例中,分片中的任一条数据的数据执行状态为执行失败则该分片的分片执行状态为执行失败,此后再存储其他数据也不影响分片执行状态,因此若分片中的某条数据执行失败则分片无需继续执行存储。在一些实现方式中,执行失败的分片可能会整分片进行重试,因此继续存储其他数据也没有太大意义。
在一些实施例中,方法还包括:
在确定任一分片执行状态为执行失败或超时未收到分片执行状态时,将分片执行状态为执行失败或或超时未收到分片执行状态的分片的分片描述信息缓存至第一队列,尝试重新抽取分片中的数据。
在很多时候,分片执行状态为执行失败或或超时未收到分片执行状态只是一些偶然因素导致的,尝试重新抽取分片中的数据可以降低这些偶然因素对抽取过程的影响,改善数据抽取过程的可靠性。
在一些实施例中,方法还包括:
在尝试重新抽取所述分片中的数据预设次数后,若仍确定所述任务执行状态为执行失败,将所述待抽取数据的所有分片的分片描述信息缓存至所述第一队列,尝试重新抽取所述待抽取数据。
在这些实施例中,若一分片反复尝试后仍然无法成功执行抽取,则需要重试整个数据抽取任务,重新抽取待抽取数据。在一些实现方式中,可以等待一段时间再尝试整个任务,避开在特定时段内影响数据抽取的因素。
在一些实施例中,根据总体描述信息将待抽取数据划分为多个分片之后,方法还包括:
对分片描述信息进行持久化保存。
分片描述信息持久化保存后,即使数据抽取任务因故异常终止,恢复后仍可继续执行,有利于提高数据抽取过程的稳定性,改善用户体验。
第二方面,本发明实施例提供一种数据抽取方法,包括:
管理侧获取待抽取数据的总体描述信息,待抽取数据保存在源系统中;
管理侧根据总体描述信息将待抽取数据划分为多个分片,每个分片对应有分片描述信息。
第三方面,本发明实施例提供一种数据抽取方法,至少一个执行侧中的每个执行侧按照待抽取数据的分片对保存在源系统中的待抽取数据进行数据抽取,每次抽取执行如下步骤:
执行侧根据分片对应的分片描述信息从源系统中获取对应的分片,并将获取的分片缓存至内存中;
执行侧将缓存的分片存储至目标系统中。
对于第一方面及其实施例提供的数据抽取方法,其步骤可以由不同的执行实体执行,如第二方面提供的管理侧以及第三方面提供的执行侧,执行实体可以是进程、线程等,管理侧和执行侧可以部署在同一个设备上,也可以部署在不同的设备上。
其中,数据抽取的步骤由至少一个执行侧执行,而其他的步骤则由管理侧执行,这样实施便于根据实际需求配置执行侧的数量,以满足数据抽取的性能要求,提高资源利用率。另一方面,若配置多个执行侧,还可以增加数据抽取过程的可靠性,即使其中某个执行侧因故障导致其无法正常执行数据抽取,其他执行侧也可以代替其执行数据抽取任务。此外,将不同的步骤分配给不同的执行实体执行,有利于减小各步骤之间的耦合性,便于分别对管理侧和执行侧的执行逻辑进行更新升级。
第四方面,本发明实施例提供一种数据抽取装置,包括:
总体描述信息获取模块,用于获取待抽取数据的总体描述信息,所述待抽取数据保存在源系统中;
分片描述信息获取模块,用于根据所述总体描述信息将所述待抽取数据划分为多个分片,每个分片对应有分片描述信息;
数据抽取模块,用于按照分片进行数据抽取,每次抽取执行如下步骤:根据所述分片描述信息从所述源系统中获取对应的分片,并将所述分片缓存至内存中;将缓存的分片存储至目标系统中。
第五方面,本发明实施例提供一种数据抽取装置,配置于管理侧,装置包括:
总体描述信息获取模块,用于获取待抽取数据的总体描述信息,待抽取数据保存在源系统中;
分片描述信息获取模块,用于根据总体描述信息将待抽取数据划分为多个分片,每个分片对应有分片描述信息。
第六方面,本发明实施例提供一种数据抽取装置,配置于至少一个执行侧中的每个执行侧,装置包括:
数据抽取模块,按照待抽取数据的分片对保存在源系统中的待抽取数据进行数据抽取,每次抽取执行如下步骤:执行侧根据分片对应的分片描述信息从源系统中获取对应的分片,并将获取的分片缓存至内存中;执行侧将缓存的分片存储至目标系统中。
第七方面,本发明实施例提供一种计算机可读存储介质,计算机可读存储介质上存储有计算机程序指令,计算机程序指令被处理器读取并运行时,执行第一方面或第一方面的任意一种可能的实现方式提供的方法的步骤。
第八方面,本发明实施例提供一种电子设备,包括存储器以及处理器,存储器中存储有计算机程序指令,计算机程序指令被处理器读取并运行时,执行第一方面或第一方面的任意一种可能的实现方式提供的方法的步骤。
为使本发明的上述目的、技术方案和有益效果能更明显易懂,下文特举实施例,并配合所附附图,作详细说明如下。
附图说明
为了更清楚地说明本发明实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,应当理解,以下附图仅示出了本发明的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。
图1示出了本发明实施例提供的一种数据抽取方法的流程图;
图2示出了本发明实施例提供的另一种数据抽取方法的流程图;
图3示出了本发明实施例提供的管理侧以及执行侧的示意图;
图4示出了本发明实施例提供的一种数据抽取装置的功能模块图;
图5示出了一种可应用于本发明实施例中的电子设备的结构框图。
具体实施方式
下面将结合本发明实施例中附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。通常在此处附图中描述和示出的本发明实施例的组件可以以各种不同的配置来布置和设计。因此,以下对在附图中提供的本发明的实施例的详细描述并非旨在限制要求保护的本发明的范围,而是仅仅表示本发明的选定实施例。基于本发明的实施例,本领域技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本发明保护的范围。
应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。同时,在本发明的描述中,术语“第一”、“第二”等仅用于将一个实体或者操作与另一个实体或操作区分开来,而不能理解为指示或暗示相对重要性,也不能理解为要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
图1示出了本发明实施例提供的一种数据抽取方法的流程图。参照图1,该方法包括:
步骤S10:获取待抽取数据的总体描述信息。
开始数据抽取之前,待抽取数据保存在源系统中,数据抽取的基本目的是将待抽取数据从源系统中导出并导入到目标系统中。总体描述信息用于描述待抽取数据在源系统中的保存位置等内容,根据总体描述信息可以确定源系统中的哪些数据是需要抽取的,例如,若待抽取数据保存在源系统的数据库中,总体描述信息可以是待抽取数据在数据库中的表名、在表中的位置等内容。
在一些实现方式中,待抽取数据的总体描述信息已经事先配置好,在另一些实现方式中,并未事先配置好待抽取数据的总体描述信息,但提供了某些等价的描述,例如,用户在图形界面上输入的结构化查询语言(Structured Query Language,简称SQL)语句(或类SQL语句),根据该SQL语句可以从源系统的数据库中查询出待抽取数据的总体描述信息。
需要指出的是,步骤S10不需要获得待抽取数据本身,只需要确定哪些数据是待抽取数据。
步骤S11:根据总体描述信息将待抽取数据划分为多个分片。
其中,每个分片都是待抽取数据的一部分,其中包括若干条数据,每个分片对应有分片描述信息。某个分片的分片描述信息用于描述该分片中的数据在源系统中的保存位置等内容,例如,若分片保存在源系统的数据库中,分片描述信息可以是分片在数据库中的表名、在表中的位置等内容。
需要指出,由于步骤S10中并未获取实际的待抽取数据,因此步骤S11中的数据分片并不是指直接对待抽取数据进行划分,而是指根据待抽取数据的总体描述信息生成每个分片的分片描述信息的过程。
步骤S12:按照分片进行数据抽取。
数据抽取以分片为单位,每次抽取一个分片中的数据,直至待抽取数据抽取完成,或者因中途出现异常而终止抽取,每次抽取执行步骤S120以及步骤S121。
步骤S120:根据分片描述信息从源系统中获取对应的分片,并将分片缓存至内存中。
此处获取分片是指获取该分片的数据,在数据抽取任务中,经常涉及大量的数据,在这些情况下直接将待抽取数据缓存至内存中是难以实现的。但在步骤S120中只需要将分片缓存至内存中,分片中的数据仅仅是待抽取数据的一部分,因此即使在内存紧张的情况下也是可以实现的。具体而言,在步骤S11中对待抽取数据进行分片时,可以根据执行数据抽取的设备的内存配置情况或者当前内存的使用情况确定每个分片中包含的数据的条数,确保在步骤S120中分片可以被缓存至内存中。
步骤S121:将缓存的分片存储至目标系统中。
根据具体的数据抽取任务,有时可以将内存中缓存的分片直接存储至目标系统中,有时需要先对缓存的分片中的数据进行转换和/或过滤,再将处理后的分片存储至目标系统中。
其中,转换是指将分片中的数据从源系统中的存储格式转换为目标系统中的存储格式,例如,源系统中的数据包括性别字段,其类型为字符串型,取值为“男”或“女”,但在目标系统中要求性别字段的类型为整数型,取值为“0”(表示男)或“1”(表示女)。又例如,源系统中的数据采用某种编码方式,但在目标系统中要求数据采用另一种编码方式。上述情况在抽取过程中都需要进行数据的转换。
过滤是指将分片中的某些在目标系统中不需要保存的数据去除掉。例如,源系统中的数据包括性别字段,但在目标系统并不需要保存该字段,应当将分片中的每条数据的性别字段都过滤掉。
步骤S121并不限定分片在目标系统中的保存方式,例如,可能被存储在目标系统的数据库中,也可能被存储在目标系统所在的设备的文件系统中,该文件系统中的文件能够被目标系统所访问。
现有技术在进行数据抽取时采用落地存储的方式,即将源系统中导出的数据先保存在设备的硬盘等非易失性存储器上,由于非易失性存储器本身的特征,导致落地存储的效率比较低下,进而影响数据抽取过程的执行效率。而图1示出的数据抽取方法在抽取数据时,待抽取数据并未落地存储,而是缓存于设备的内存中,因此数据抽取过程的执行效率得到显著提高。
另一方面,在阐述步骤S120时已经提到,由于数据抽取是按照分片进行的,每个分片只是待抽取数据的一部分,因此不必将全部的待抽取数据都缓存到内存中,特别是对于待抽取数据的量较大,而内存空间有限的情况,该方法同样能够支持数据的不落地抽取,其适用范围较广,实用价值较高。
图2示出了本发明实施例提供的另一种数据抽取方法的流程图,该方法通过管理侧以及至少一个执行侧执行。其中,管理侧和执行侧为两种不同的执行实体,这里的执行实体是指由计算机指令构成的、可执行的程序单元,比如进程、线程等。
在一种实现方式中,管理侧和执行侧实现为同一进程中的两种线程,在另一种实现方式中,管理侧和执行侧实现为两种不同的进程,管理侧与执行侧可以部署在同一设备上,也可以部署在不同的设备上,同时各个执行侧可以部署在同一设备上,也可以部署在不同的设备上,其部署方式非常灵活自由。
图3示出了一个管理侧和一个执行侧的示意图,二者之间通过数据交互实现本发明实施例提供的数据抽取方法,图3中的各组件将在后文中具体阐述。继续参照图2,该方法包括:
步骤S20:管理侧获取待抽取数据的总体描述信息。
步骤S21:管理侧根据总体描述信息将待抽取数据划分为多个分片。
以上两个步骤和步骤S10以及步骤S11类似,只是执行主体均为管理侧,而图1示出的方法并不限定执行主体,步骤的具体内容可以参考之前的阐述。
步骤S22:每个执行侧按照分片进行数据抽取。
至少一个执行侧中的每个执行侧同时进行数据的抽取,即各执行侧并行执行数据抽取,对于每个执行侧而言,数据抽取以分片为单位,每次抽取一个分片中的数据,每次抽取执行步骤S220以及步骤S221。各个执行侧持续抽取数据直至待抽取数据抽取完成,或者因中途出现异常而终止抽取。由于每个执行侧的行为都是类似的,因此后文在阐述时将主要以其中一个执行侧为例进行阐述。
步骤S220:执行侧根据分片描述信息从源系统中获取对应的分片,并将获取的分片缓存至内存中;
步骤S221:执行侧将缓存的分片存储至目标系统中。
以上两个步骤和步骤S120以及步骤S121类似,只是执行主体均为执行侧,而图1示出的方法并不限定执行主体,步骤的具体内容可以参考之前的阐述。
在图2示出的数据抽取方法中,任务管理侧只执行待抽取数据的分片,而将具体的数据抽取分配给至少一个执行侧执行,由于至少一个执行侧可同时进行数据抽取,因此能够提高数据抽取的执行效率。执行侧的数量可以根据实际需求配置,以满足数据抽取的性能要求,提高资源利用率,例如,在单个执行侧处理能力较弱时(如执行侧部署的设备性能较差),扩展执行侧的数量,以提高处理能力,在单个执行侧处理能力较强时(如执行侧部署的设备性能较好),缩减执行侧的数量,以避免资源浪费。
另一方面,若配置多个执行侧,还可以增加数据抽取过程的可靠性,即使其中某个执行侧因故障导致其无法正常执行数据抽取,其他执行侧也可以代替其执行数据抽取任务。
此外,将数据抽取过程中不同的步骤交由不同的执行实体执行,有利于减小各步骤之间的耦合性,便于分别对管理侧和执行侧的执行逻辑进行更新升级。
可以理解的,在部分对扩展性要求不高的应用场景中,执行侧的数量也可以实现为固定的数量,此时也可以不区分管理侧和执行侧,将两侧执行的步骤由同一个执行实体去执行。在下面举例说明时,为便于理解,仍然以区分管理侧和执行侧的实现方式进行阐述,但不应当视为对本发明保护范围的限制。
下面再结合图3进行进一步阐述。每批待抽取数据的抽取可视为一个数据抽取任务,每个数据抽取任务均对应用于描述任务的任务信息,任务信息可以包括对待抽取数据在源系统中的位置的描述(如之前提到的待抽取数据的总体描述信息或其等价描述)、任务名称、任务的执行时间(任务并不一定要立即执行,也可以定时执行)、源系统中保存待抽取数据的数据源(包括访问数据源的路径、用户名、密码等)等内容。
任务信息的来源不作限定。例如可由用户在图形界面上输入,该图形界面可由管理侧维护,如可以是管理侧提供的web页面,或者管理侧提供的普通软件界面;又例如,任务信息也可以保存在用户编写的配置文件中,由管理侧读取;又例如,管理侧可以根据自身的执行逻辑自动生成任务信息,等等。
管理侧可以维护一个任务表来进行任务管理,如图3所示。任务表中可以保存每个数据抽取任务的任务信息以及任务执行状态,任务执行状态可以包括待执行、执行中、执行成功、执行失败、重新执行等状态,任务执行状态用于表示数据抽取任务的执行情况。
其中,任务被添加至任务表后处于待执行状态。在一些实现方式中,管理侧定期扫描任务表,发现有处于待执行状态的任务且已经到达任务的执行时间的,开始执行步骤S20对待抽取数据进行分片,而一旦该任务的分片描述信息被分配给执行侧,则数据抽取任务的任务执行状态被更新为执行中状态。作为一种可选的方案,可以将任务执行状态实时显示在图形界面上,便于用户了解数据抽取的进度以及是否出现异常状况,及时采取相应的措施。
管理侧还可以维护一个分片表用于管理各个分片任务,如图3所示,其中,分片任务是指每个分片中数据的抽取的任务。分片表中可以保存每个分片的分片描述信息以及分片执行状态,分片执行状态可以包括待执行、执行中、执行成功、执行失败、重新执行等状态,分片执行状态用于表示分片任务的执行情况。
某个分片描述信息被添加至分片表后对应的分片处于待执行状态,而一旦该分片描述信息被分配给执行侧,则分片任务的分片执行状态被更新为执行中状态。
在一些实现方式中,上述任务表以及分片表可以保存在内存中,在另一些实现方式中,也可以由管理侧进行持久化保存,例如保存在数据库中,持久化保存后,即使作为管理侧的执行实体因故异常终止,例如,管理侧所在的设备宕机,恢复后仍可继续执行数据抽取任务,有利于提高数据抽取过程的稳定性,避免重复执行已完成的部分,改善用户体验。
后文在阐述数据抽取过程时,将结合任务表以及分片表进行阐述,但可以理解的,任务表以及分片表的主要功能是监控数据抽取的过程,二者并不是实现图2中的数据抽取方法所必须的或者也可以采用其他替代的形式,以任务表以及分片表为例,只是为了更清楚地阐述数据抽取的过程,而不应当视为对本发明保护范围的限制。在其他一些实现方式中,管理侧也可以不维护这两个数据表。
在步骤S21执行完之后,管理侧可以将分片描述信息主动分配给各个执行侧,或者由各个执行侧在确定自己能够执行数据抽取时,主动向管理侧索要分片描述信息。
作为一种实现方式,管理侧维护一个第一队列,在步骤S21执行完之后,管理侧除了将每个分片的分片描述信息保存到分片表,还将分片描述信息缓存至第一队列中,执行侧在确定自己能够执行数据抽取时,从第一队列中取出分片描述信息,并执行该分片描述信息对应的分片任务,即先根据分片描述信息从源系统中获取对应的分片,然后将获取的分片缓存至内存中,最后将缓存的分片存储至目标系统中。
在上述实现方式中,管理侧将分片描述信息缓存至第一队列,各个执行侧按需从第一队列中索取分片描述信息使得分片任务的分配适应于各个执行侧的实际执行能力,并且队列结构的先入先出的特征保证了先放入的分片描述信息对应的分片会先进行抽取,符合一般用户预期。考虑到各个执行侧可能存在同时索取分片描述信息的情况,作为一种可选的方案,第一队列可以采用线程安全的实现方式,使得该队列能够正确处理多个执行侧相互竞争的情况。在现有技术中,已经有一些这样的队列可供选用,例如RabbitMQ队列、ActiveMQ队列、Kafka队列、Redis队列等。
在一些实现方式中,执行侧包括任务管理线程以及分片获取线程,如图3所示。其中,任务管理线程是执行侧的主线程,任务管理线程维护一个位于内存中的第二队列。分片获取线程用于根据分片描述信息从源系统中获取对应的分片,并将获取的分片缓存至第二队列。第二队列能够缓存多个分片的数据,由于第二队列位于内存中,因此分片不会落地存储。
任务管理线程在确定第二队列还能够缓存新的分片时,从第一队列中取出分片描述信息,然后控制分片获取线程开始执行,以获取分片并将分片缓存至第二队列。这里所称的控制分片获取线程执行,至少包括两种情况:其一,分片获取线程尚未创建,任务管理线程创建分片获取线程,并启动分片获取线程;其二,分片获取线程已经创建,但并未执行,例如分片获取线程是一个线程池里的线程,且目前处于闲置状态,此时任务管理线程控制分片获取线程开始执行。后文中提到某一线程控制另一取线程执行时,都可作类似理解。
第二队列作为内存中的数据结构,其存储空间是有限的,任务管理线程确定第二队列中是否还能够缓存新的分片,可以有多种实现方式。例如,第二队列被构造为最多能够缓存N(N>1)个分片(事先为其分配不小于N个分片的存储空间),若第二队列当前缓存的分片的数量小于N,则任务管理线程可以确定第二队列中还能够缓存新的分片。又例如,每个分片的大小是固定的,第二队列被分配能够缓存多个分片的存储空间,任务管理线程实时计算第二队列中除缓存的分片外剩余的存储空间,若剩余的存储空间超过一个分片的大小,则确定第二队列中还能够缓存新的分片。当然还可以采用其他实现方式,不再逐一举例。
进一步的,任务管理线程获取到的每个分片描述信息都由一个分片获取线程去获取对应的分片,例如,第二队列最多能够缓存的分片数量与第二队列已缓存的分片数量之差为M(M>1),则任务管理线程可以一次性地从第一队列中取出M个分片描述信息,同时控制M个分片获取线程开始执行,这M个分片获取线程会同时尝试从源系统中获取分片。
在上述实现方式中,由于采用了不同于管理侧线程的分片获取线程去获取分片,并且利用第二队列缓存获取到的分片,使得执行侧从源系统获取分片以及执行侧将分片存储至目标系统这两个步骤可以同时执行,即前者由分片获取线程执行,后者由任务管理线程自己执行或者控制除分片获取线程外的其他线程执行,有利于提高数据抽取过程的效率。
举例来说,假设从源系统中获取一个分片要10秒,将该分片存储至目标系统要5秒,在不采用分片获取线程以及第二队列时,假设由任务管理线程自己处理,执行完一个分片任务才能执行下一个,每个分片任务需要花费15秒。而在采用分片获取线程以及第二队列后,执行第一个分片任务仍要花费15秒,但由于后续分片的分片获取线程可以和第一个分片的分片获取线程同时执行,因此在将第一个分片存储至目标系统的同时,后续的分片数据已经被获取并被缓存至第二队列,在存储完第一个分片的数据后,执行侧能够立刻接着存储后续分片的数据,后续分片每个只要花费5秒即可执行完成。
进一步的,在一些实现方式中,执行侧还包括任务监控线程以及任务执行线程,如图3所示。其中,每个任务监控线程负责将一个分片中的数据存储至目标系统,各个执行中的任务监控线程之间共用预设数量的任务执行线程实际存储数据,共用的任务执行线程可以实现为线程池的形式,在执行完任务后线程可以回收并重新使用,减小创建销毁线程带来的开销。每个任务监控线程维护一个属于它的第三队列,该队列用于缓存任务监控线程负责处理的分片的数据,第三队列位于内存中,确保分片不会落地存储。
在该实现方式中,执行侧将分片存储至目标系统中的具体步骤如下:
任务管理线程在确定存在可用的任务执行线程时,从第二队列中取出分片,将取出的分片缓存至任务监控线程的第三队列,并控制任务监控线程开始执行。
任务管理线程可以定期查询是否存在可用的任务执行线程,这里所称的可用是指该任务执行线程没有执行其他任务,处于闲置状态。在一种可选的方案中,可以设置一个计数器实时统计可用的任务执行线程的个数,一个任务执行线程被使用则计数器减1,一个任务执行线程不再被使用则计数器加1,任务管理线程只要定期查询该计数器即可获知是否存在可用的任务执行线程。之前已经提到,任务执行线程是各个执行中的任务监控线程之间共用的,若当前所有的任务执行线程都被执行中的任务监控线程使用,则任务管理线程可不进行任何处理。若当前存在可用的任务执行线程,则可将该任务执行线程用于存储第二队列中缓存的分片,此时任务管理线程控制一个新的任务监控线程开始执行,这里所称的新的任务监控线程,是指除当前正在执行的任务监控线程之外一个任务监控线程。
任务监控线程开始执行后,从第三队列中取出缓存的分片中的数据,将取出的数据交付给可用的任务执行线程(之前任务管理线程已发现存在可用的任务执行线程),并控制可用的任务执行线程开始执行,任务执行线程将取出的数据存储至目标系统中,如果有必要的话,任务执行线程可以对取出的数据进行转换和/或过滤。
在一些实现方式中,任务监控线程开始执行后,会再次检查是否存在可用的任务执行线程,因为虽然之前任务管理线程已经做过检查,但在任务监控线程开始执行时,这些可用的执行线程可能已经被用占用,检查方法可以参照任务管理线程的做法(例如,通过计数器进行判断),此处不再重复阐述。若任务监控线程发现存在可用的任务执行线程,则从第三队列中取出一条数据并交付给可用的任务执行线程去存储,随着其他任务监控线程对应的分片数据存储完毕,会有更多可用的任务执行线程(之前这些任务执行线程被其他任务监控线程所占用)加入进来,共同存储当前任务监控线程对应的分片。一旦第三队列中的数据被分配完,将很快会有任务执行线程处于空闲状态,即成为可用的任务执行线程,任务管理线程将很快发现这些任务执行线程,并开始另一个分片的存储过程。
在上述实现方式中,各线程之间密切配合,充分利用了线程资源,避免了线程闲置,提高了数据抽取的效率。
进一步的,在存储分片数据时,可能存在这样一种情况:在当前的任务监控线程中,一个分片中的数据尚未被完全分配给各个任务执行线程(即任务监控线程的第三队列不为空),此时若还存在一个可用的任务执行线程,该任务执行线程将被当前的任务监控线程用于存储分片中的数据。
同时,任务管理线程在查询可用的任务执行线程时,也会发现存在一个可用的任务执行线程,此时任务管理线程会控制一个新的任务监控线程开始执行,企图利用该可用的任务执行线程存储另一个分片,在新的任务监控线程开始执行后,该可用的任务执行线程可能已经被当前的任务监控线程所使用,导致并无可用的任务执行线程,从而新的任务监控线程只能等待下去。如果多次出现上面的情况,甚至可能出现大量处于等待状态的任务监控线程无端占用系统资源,耗尽内存的情况。
为避免出现上述问题,在一种可选的方案中,任务管理线程只有在确定存在可用的任务执行线程,且确定执行中的每个任务监控线程的第三队列均为空时,控制任务监控线程开始执行。此时除了将要开始执行的任务监控线程外,执行中的任务监控线程都不会再使用任务执行线程,因此新的任务监控线程启动后,能够获得该任务执行线程的使用权。该解决方案还确保了已经在执行的任务监控线程能够优先使用任务执行线程存储分片,使得分片将按照其在第二队列中缓存时的顺序被依次处理。
参照图3,任务管理线程还可以维护一个任务监控线程表,每个任务监控线程开始执行时,就将其加入到该表中,任务管理线程在确定存在可用的任务执行线程,进一步通过任务监控线程表查询每个任务监控线程的第三队列是否为空,以判断是否可以控制新的任务监控线程开始执行。若某个任务监控线程的第三队列已经为空,则可以将其从任务监控列表中移除。
在一些实现方式中,任务执行线程在每执行一条数据的存储操作后,将该条数据的数据执行状态发送至任务监控线程。其中,数据执行状态包括执行成功以及执行失败,用于指示该条数据存储成功或失败。
任务监控线程接收各个任务执行线程上报的数据执行状态,进而确定在其负责处理的分片的抽取过程中的分片执行状态(即分片任务的分片执行状态),并将该分片执行状态发送至管理侧。作为一种可选的方案,在第二队列中,分片描述信息可以和分片的数据存储在一起,任务管理线程在控制任务监控线程开始执行时,除了将分片的数据缓存至任务监控线程的第三队列外,还将分片描述信息传递给任务管理线程,任务监控线程在向管理侧发送分片执行状态时,可以附带上对应的分片描述信息,以使管理侧能够知道该分片执行状态对应哪个分片。
管理侧接收各个任务监控线程上报的分片执行状态,对应地更新分片表中的分片执行状态,并进一步根据接收到的分片执行状态确定在待抽取数据的抽取过程中的任务执行状态(即数据抽取任务的任务执行状态),对应地更新任务表中的任务执行状态。通过数据执行状态、分片执行状态以及任务执行状态,可以对数据抽取过程进行全面的监管。例如可以将任务执行状态实时在图形界面上显示,使得用户通过图形界面能够直观地监控数据的抽取过程,以便在出现异常情况时及时采取相应的措施。
对于数据执行状态、分片执行状态以及任务执行状态三者的关系,可以有不同的定义方式。例如,在一种方式中规定,只要一个分片中的任一条数据存储失败,即该条数据的数据执行状态为执行失败,则该条数据所在的分片的分片执行状态为执行失败,反之分片执行状态为执行成功,只要待抽取数据中的任一个分片的分片执行状态为执行失败,则待抽取数据的任务执行状态为执行失败,反之任务执行状态为执行成功。
以上述定义方式为例阐述如何处理执行失败的情况。若因某条数据执行失败导致分片执行状态为执行失败,按照上述定义,即使继续执行,该分片的分片执行状态仍为执行失败,因此无需继续存储分片中的数据,此时任务监控线程可以控制任务执行线程终止执行分片中的数据的存储操作。而在管理侧一端,一旦某个分片执行失败,管理侧可以将把该分片的分片描述信息从分片表中取出,重新缓存至第一队列,即尝试重新抽取分片中的数据,并在分片表中将该分片的状态改为重新执行状态。
需要指出,重新抽取该分片中的数据的任务不一定会由原来的执行侧执行,因此即使是因原来的执行侧自身的原因导致该分片执行失败,也不会导致整个数据抽取任务的执行失败,这里体现了采用多个执行侧带来的可靠性上的提高。
可以理解的,上述三种执行状态件的关系采取其他定义方式时,处理执行失败的方式也需要相应地调整。
还存在另一些导致执行失败的可能,例如,某个执行侧异常终止,根本不会向管理侧上报分片执行状态。此时可以采取如下的解决方案:
任务监控线程被实现为每间隔第一预设时间将分片执行状态发送至管理侧,包括执行中、执行成功、执行失败等状态。
管理侧在接收到分片执行状态后,将其保存到分片表,同时在分片表中保存分片执行状态的更新时刻(即保存分片执行状态到分片表的时刻)。
管理侧每间隔第二预设时间扫描一次分片表,若发现当前时刻与某个分片最近一次保存的状态更新时刻的时间间隔已经超过预设时间间隔时(即超时未收到分片执行状态),则认为处理该分片的任务监控线程已经没有响应,可以视为该分片已经执行失败,进而将当前数据抽取任务的任务执行状态确定为执行失败,管理侧还可以将超时未收到分片执行状态的分片的分片描述信息从分片表中取出,重新缓存至第一队列,尝试重新抽取该分片中的数据。其中,第一预设时间、第二预设时间以及预设时间间隔的具体数值不作限定,可以根据实际需求选取。作为一种可选的方案,对于超时未收到分片执行状态的分片,管理侧可以将分片表中该分片对应的分片执行状态也标记为执行失败。
特别地,在某个分片的分片执行状态更新为执行中时,管理侧可以在分片表中保存此时刻作为最初的更新时刻,避免出现任务监控线程未上报过任何分片执行状态的情况。
进一步的,在一些实现方式中,上述两种分片任务重试的情况可以结合在一起,例如管理侧每间隔第二预设时间扫描一次分片表,先判断每个分片的的状态更新是否超时,若未超时再判断其对应的分片执行状态是否为执行失败。
对于单条数据的存储,也可能存在执行超时的情况,可以采取和分片执行超时类似的处理方式,由任务执行线程定期向任务监控线程上报数据执行状态,然后监控线程判断状态更新是否超时。但考虑到单条数据执行时间较短,也可以采取简化的实现方式,例如,任务管理线程只在单条数据存储完后上报数据执行状态(存储中出现异常情况除外),任务监控线程设置一个等待时间阈值(例如,平均数据存储时间的若干倍),从某个任务执行线程从第三队列中取走某条数据时开始计时,若计时时长已超过该等待时间阈值任务执行线程还未返回任何数据执行状态(即超时未收到数据执行状态),则认为该任务执行线程已经没有响应,可以视为该条数据已经执行失败,进而将监控线程负责处理的分片的分片执行状态确定为执行失败。
管理侧可以控制每个执行失败的分片重试预设次数,例如2次、3次等。若已重试过预设次数仍然执行失败,再次重试该分片意义已经不大,将待抽取数据的所有分片的分片描述信息缓存至第一队列,尝试重新执行数据抽取任务,并将任务表中该任务的任务执行状态修改为重新执行。重新执行整个任务时,也可以间隔一段时间后再执行(因为当前系统可能存在异常,但过一段时间后可能恢复),将任务表中的任务执行时间设置为当前时刻之后的某个时刻。管理侧定期扫描任务表,发现有处于重新执行状态的任务且已经到达任务的执行时间的,开始执行步骤S20对待抽取数据进行分片。
在一些实现方式中,管理侧以及执行侧为部署在服务器上的两种不同的服务。管理侧与执行侧为相互独立的服务时,便于对执行侧的数量进行配置,从而提高资源利用率,保障数据抽取的执行性能,同时,管理侧与执行侧采用服务的方式,便于在网络环境中进行部署,可以简化方法的实施,提高方法的实用性。在部署时,管理侧和执行侧可以部署在在一台服务器上,也可以部署在在不同的服务器上。同时各个执行侧可以部署在同一台服务器上,也可以部署在不同的服务器上。
本发明实施例还提供一种数据抽取装置300,如图4所示。参照图4,该装置包括:
总体描述信息获取模块310,用于获取待抽取数据的总体描述信息,所述待抽取数据保存在源系统中;
分片描述信息获取模块320,用于根据所述总体描述信息将所述待抽取数据划分为多个分片,每个分片对应有分片描述信息;
数据抽取模块330,用于按照分片进行数据抽取,每次抽取执行如下步骤:根据所述分片描述信息从所述源系统中获取对应的分片,并将所述分片缓存至内存中;将缓存的分片存储至目标系统中。
本发明实施例提供的数据抽取装置300,其实现原理及产生的技术效果在前述方法实施例中已经介绍,为简要描述,装置实施例部分未提及之处,可参考方法施例中相应内容。
本发明实施例还提供一种数据抽取装置,该装置配置于管理侧,具体包括:
总体描述信息获取模块,用于获取待抽取数据的总体描述信息,待抽取数据保存在源系统中;
分片描述信息获取模块,用于根据总体描述信息将待抽取数据划分为多个分片,每个分片对应有分片描述信息。
上述数据抽取装置,其实现原理及产生的技术效果在前述方法实施例中已经介绍,为简要描述,装置实施例部分未提及之处,可参考方法施例中相应内容。
第六方面,本发明实施例提供一种数据抽取装置,配置于至少一个执行侧中的每个执行侧,具体包括:
数据抽取模块,按照待抽取数据的分片对保存在源系统中的待抽取数据进行数据抽取,每次抽取执行如下步骤:执行侧根据分片对应的分片描述信息从源系统中获取对应的分片,并将获取的分片缓存至内存中;执行侧将缓存的分片存储至目标系统中。
上述数据抽取装置,其实现原理及产生的技术效果在前述方法实施例中已经介绍,为简要描述,装置实施例部分未提及之处,可参考方法施例中相应内容。
本发明实施例还提供一种电子设备400,如图5所示。参照图5,电子设备400包括一个或多个处理器402以及一个或多个存储装置404,这些组件通过总线系统412和/或其他形式的连接机构(未示出)互连。
处理器402可以是中央处理单元(CPU)或者具有数据处理能力和/或指令执行能力的其他形式的处理单元,并且可以控制电子设备400中的其他组件以执行期望的功能。
存储装置404可以是各种形式的计算机可读存储介质,例如易失性存储器、非易失性存储器等。易失性存储器可以包括随机存取存储器(RAM)、高速缓冲存储器(cache)等。非易失性存储器可以包括只读存储器(ROM)、硬盘、闪存等。在计算机可读存储介质上可以存储一个或多个计算机程序指令,处理器402可以运行计算机程序指令,以实现本发明实施例提供的数据抽取方法的步骤以及/或者其他期望的功能。在计算机可读存储介质中还可以存储各种应用程序和各种数据,例如应用程序使用和/或产生的各种数据等。具体在本发明实施例中,用于缓存分片的内存是一种用易失性存储器。
输入装置406可以是用户用来输入指令的装置,并且可以包括键盘、鼠标、麦克风和触摸屏等中的一个或多个。具体在本发明实施例中,用户可以通过键盘等输入装置406输入数据抽取任务的任务信息。
输出装置408可以向外部(例如,用户)输出各种信息(例如,图像或声音),并且可以包括显示器、扬声器等中的一个或多个。具体在本发明实施例中,在数据抽取过程中使用的图形界面可以通过显示器等输出装置408向用户显示。
可以理解,图5所示的结构仅为示意,电子设备400还可包括比图5中所示更多或者更少的组件,或者具有与图5所示不同的配置。图5中所示的各组件可以采用硬件、软件或其组合实现。于本发明实施例中,电子设备400可以是,但不限于台式机、笔记本电脑、智能手机、智能穿戴设备、车载设备等实体设备,或者虚拟机等虚拟设备。
需要说明的是,本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。对于装置类实施例而言,由于其与方法实施例基本相似,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
本申请所提供的几个实施例中,应该理解到,所揭露的装置和方法,也可以通过其他的方式实现。以上所描述的装置实施例仅仅是示意性的,例如,附图中的流程图和框图显示了根据本发明的多个实施例的装置、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或代码的一部分,所述模块、程序段或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现方式中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或动作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
另外,在本发明各个实施例中的各功能模块可以集成在一起形成一个独立的部分,也可以是各个模块单独存在,也可以两个或两个以上模块集成形成一个独立的部分。
所述功能如果以软件功能模块的形式实现并作为独立的产品销售或使用时,可以存储在计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在存储介质中,包括若干指令用以使得计算机设备执行本发明各个实施例所述方法的全部或部分步骤。前述的计算机设备包括:个人计算机、服务器、移动设备、智能穿戴设备、网络设备、虚拟设备等各种具有执行程序代码能力的设备,前述的存储介质包括:U盘、移动硬盘、只读存储器、随机存取存储器、磁碟、磁带或者光盘等各种可以存储程序代码的介质。
以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应所述以权利要求的保护范围为准。
Claims (17)
1.一种数据抽取方法,其特征在于,包括:
获取待抽取数据的总体描述信息,所述待抽取数据保存在源系统中;
根据所述总体描述信息将所述待抽取数据划分为多个分片,每个分片对应有分片描述信息;
按照分片进行数据抽取,每次抽取执行如下步骤:
根据所述分片描述信息从所述源系统中获取对应的分片,并将所述分片缓存至内存中;
将缓存的分片存储至目标系统中;
其中,所述根据所述总体描述信息将所述待抽取数据划分为多个分片之后,所述方法还包括:
将每个分片的分片描述信息缓存至第一队列;
所述根据所述分片描述信息从所述源系统中获取对应的分片,并将获取的分片缓存至内存中,包括:
任务管理线程在确定第二队列还能够缓存新的分片时,从所述第一队列中取出所述分片描述信息,并控制分片获取线程执行以下步骤:根据所述分片描述信息从所述源系统中获取对应的分片,并将获取的分片缓存至所述第二队列;其中,所述第二队列为内存中的队列,每个分片由一个分片获取线程负责获取。
2.根据权利要求1所述的数据抽取方法,其特征在于,所述将缓存的分片存储至目标系统中,包括:
对缓存的分片中的数据进行转换和/或过滤,并将处理后的分片存储至所述目标系统中。
3.根据权利要求1所述的数据抽取方法,其特征在于,所述将缓存的分片存储至目标系统中,包括:
所述任务管理线程在确定存在可用的任务执行线程时,从所述第二队列中取出分片,将取出的分片缓存至任务监控线程的第三队列,并控制所述任务监控线程执行以下步骤:从所述第三队列中取出缓存的分片中的数据并控制所述任务执行线程将取出的数据存储至所述目标系统中;其中,所述第三队列为内存中的队列,每个从所述第二队列中取出的分片由一个任务监控线程负责存储,执行中的全部任务监控线程共用预设数量的所述任务执行线程。
4.根据权利要求3所述的数据抽取方法,其特征在于,所述任务管理线程在确定存在可用的任务执行线程时,从所述第二队列中取出分片,将取出的分片缓存至任务监控线程的第三队列,并控制所述任务监控线程执行,包括:
所述任务管理线程在确定存在可用的任务执行线程,且确定执行中的每个任务监控线程的第三队列均为空时,从所述第二队列中取出分片,将取出的分片缓存至任务监控线程的第三队列,并控制所述任务监控线程执行。
5.根据权利要求3所述的数据抽取方法,其特征在于,所述方法还包括:
所述任务执行线程在每存储一条数据后,将该条数据的数据执行状态发送至所述任务监控线程,所述数据执行状态用于表征该条数据是否存储成功;
所述任务监控线程根据接收到的至少一个数据执行状态,确定在负责存储的分片的抽过程取中的分片执行状态;
根据至少一个分片执行状态,确定在所述待抽取数据的抽取过程中的任务执行状态。
6.根据权利要求5所述的数据抽取方法,其特征在于,所述任务监控线程根据接收到的至少一个数据执行状态,确定在负责存储的分片的抽取过程中的分片执行状态,包括:
所述任务监控线程在确定接收到的任一数据执行状态为执行失败或超时未收到数据执行状态时,确定所述分片执行状态为执行失败;
所述根据至少一个分片执行状态,确定在所述待抽取数据的抽取过程中的任务执行状态,包括:
在确定任一分片执行状态为执行失败或超时未收到分片执行状态时,确定所述任务执行状态为执行失败。
7.根据权利要求6所述的数据抽取方法,其特征在于,所述方法还包括:
所述任务监控线程在确定接收到的任一数据执行状态为执行失败或超时未收到数据执行状态时,控制所述任务执行线终止执行所述负责存储的分片中的数据的存储操作。
8.根据权利要求6所述的数据抽取方法,其特征在于,所述方法还包括:
在确定任一分片执行状态为执行失败或超时未收到分片执行状态时,将分片执行状态为执行失败或超时未收到分片执行状态的分片的分片描述信息缓存至所述第一队列,尝试重新抽取所述分片中的数据。
9.根据权利要求7或8所述的数据抽取方法,其特征在于,所述方法还包括:
在尝试重新抽取所述分片中的数据预设次数后,若仍确定所述任务执行状态为执行失败,将所述待抽取数据的所有分片的分片描述信息缓存至所述第一队列,尝试重新抽取所述待抽取数据。
10.根据权利要求1所述的数据抽取方法,其特征在于,根据所述总体描述信息将所述待抽取数据划分为多个分片之后,所述方法还包括:
对所述分片描述信息进行持久化保存。
11.一种数据抽取方法,其特征在于,包括:
管理侧获取待抽取数据的总体描述信息,所述待抽取数据保存在源系统中;
所述管理侧根据所述总体描述信息将所述待抽取数据划分为多个分片,每个分片对应有分片描述信息;
所述管理侧将每个分片的分片描述信息缓存至第一队列,以使执行侧的任务管理线程在确定第二队列还能够缓存新的分片时,能够从所述第一队列中取出所述分片描述信息,并控制所述执行侧的分片获取线程执行以下步骤:根据所述分片描述信息从所述源系统中获取对应的分片,并将获取的分片缓存至所述第二队列;其中,所述第二队列为内存中的队列,每个分片由所述执行侧的一个分片获取线程负责获取。
12.一种数据抽取方法,其特征在于,至少一个执行侧中的每个执行侧按照待抽取数据的分片对保存在源系统中的所述待抽取数据进行数据抽取,每次抽取执行如下步骤:
所述执行侧根据分片对应的分片描述信息从所述源系统中获取对应的分片,并将获取的分片缓存至内存中;
所述执行侧将缓存的分片存储至目标系统中;
其中,所述执行侧根据分片对应的分片描述信息从所述源系统中获取对应的分片,并将获取的分片缓存至内存中,包括:
所述执行侧的任务管理线程在确定第二队列还能够缓存新的分片时,从第一队列中取出所述分片描述信息,并控制所述执行侧的分片获取线程执行以下步骤:根据所述分片描述信息从所述源系统中获取对应的分片,并将获取的分片缓存至所述第二队列;其中,所述第二队列为内存中的队列,每个分片由一个分片获取线程负责获取。
13.一种数据抽取装置,其特征在于,包括:
总体描述信息获取模块,用于获取待抽取数据的总体描述信息,所述待抽取数据保存在源系统中;
分片描述信息获取模块,用于根据所述总体描述信息将所述待抽取数据划分为多个分片,每个分片对应有分片描述信息;
数据抽取模块,用于按照分片进行数据抽取,每次抽取执行如下步骤:根据所述分片描述信息从所述源系统中获取对应的分片,并将所述分片缓存至内存中;将缓存的分片存储至目标系统中;
所述数据抽取装置还用于:在所述分片描述信息获取模块根据所述总体描述信息将所述待抽取数据划分为多个分片之后,将每个分片的分片描述信息缓存至第一队列;
在所述数据抽取模块执行的步骤中,所述根据所述分片描述信息从所述源系统中获取对应的分片,并将所述分片缓存至内存中,包括:任务管理线程在确定第二队列还能够缓存新的分片时,从所述第一队列中取出所述分片描述信息,并控制分片获取线程执行以下步骤:根据所述分片描述信息从所述源系统中获取对应的分片,并将获取的分片缓存至所述第二队列;其中,所述第二队列为内存中的队列,每个分片由一个分片获取线程负责获取。
14.一种数据抽取装置,其特征在于,配置于管理侧,所述装置包括:
总体描述信息获取模块,用于获取待抽取数据的总体描述信息,所述待抽取数据保存在源系统中;
分片描述信息获取模块,用于根据所述总体描述信息将所述待抽取数据划分为多个分片,每个分片对应有分片描述信息;
所述数据抽取装置还用于:将每个分片的分片描述信息缓存至第一队列,以使执行侧的任务管理线程在确定第二队列还能够缓存新的分片时,能够从所述第一队列中取出所述分片描述信息,并控制所述执行侧的分片获取线程执行以下步骤:根据所述分片描述信息从所述源系统中获取对应的分片,并将获取的分片缓存至所述第二队列;其中,所述第二队列为内存中的队列,每个分片由所述执行侧的一个分片获取线程负责获取。
15.一种数据抽取装置,其特征在于,配置于至少一个执行侧中的每个执行侧,所述装置包括:
数据抽取模块,按照待抽取数据的分片对保存在源系统中的所述待抽取数据进行数据抽取,每次抽取执行如下步骤:所述执行侧根据分片对应的分片描述信息从所述源系统中获取对应的分片,并将获取的分片缓存至内存中;所述执行侧将缓存的分片存储至目标系统中;
在所述数据抽取模块执行的步骤中,所述执行侧根据分片对应的分片描述信息从所述源系统中获取对应的分片,并将获取的分片缓存至内存中,包括:所述执行侧的任务管理线程在确定第二队列还能够缓存新的分片时,从第一队列中取出所述分片描述信息,并控制所述执行侧的分片获取线程执行以下步骤:根据所述分片描述信息从所述源系统中获取对应的分片,并将获取的分片缓存至所述第二队列;其中,所述第二队列为内存中的队列,每个分片由一个分片获取线程负责获取。
16.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质上存储有计算机程序指令,所述计算机程序指令被处理器读取并运行时,执行权利要求1-12中任一项所述的方法的步骤。
17.一种电子设备,包括存储器以及处理器,所述存储器中存储有计算机程序指令,其特征在于,所述计算机程序指令被所述处理器读取并运行时,执行权利要求1-12中任一项所述的方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811628810.6A CN109710679B (zh) | 2018-12-28 | 2018-12-28 | 数据抽取方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811628810.6A CN109710679B (zh) | 2018-12-28 | 2018-12-28 | 数据抽取方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109710679A CN109710679A (zh) | 2019-05-03 |
CN109710679B true CN109710679B (zh) | 2021-03-23 |
Family
ID=66259350
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201811628810.6A Active CN109710679B (zh) | 2018-12-28 | 2018-12-28 | 数据抽取方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109710679B (zh) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110515974B (zh) * | 2019-07-15 | 2022-03-11 | 金蝶软件(中国)有限公司 | 数据抽取方法、装置、计算机设备和存储介质 |
CN113342839A (zh) * | 2021-08-06 | 2021-09-03 | 北京开科唯识技术股份有限公司 | 数据处理方法、装置、终端设备和存储介质 |
CN117194549B (zh) * | 2023-11-07 | 2024-01-26 | 上海柯林布瑞信息技术有限公司 | 基于任务数据配置的数据传输方法及装置 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101692655A (zh) * | 2009-10-23 | 2010-04-07 | 烽火通信科技股份有限公司 | 一种数据帧存储管理装置 |
CN109064524A (zh) * | 2018-08-16 | 2018-12-21 | 上海联影医疗科技有限公司 | 一种数据传输方法、数据收集板、重建机及介质 |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103019987A (zh) * | 2013-01-10 | 2013-04-03 | 厦门市美亚柏科信息股份有限公司 | 一种基于usb接口的数据传输方法和系统 |
CN106487841A (zh) * | 2015-08-27 | 2017-03-08 | 阿里巴巴集团控股有限公司 | 一种数据迁移方法及设备 |
CN108804465B (zh) * | 2017-05-04 | 2023-06-30 | 中兴通讯股份有限公司 | 一种分布式缓存数据库数据迁移的方法及系统 |
-
2018
- 2018-12-28 CN CN201811628810.6A patent/CN109710679B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101692655A (zh) * | 2009-10-23 | 2010-04-07 | 烽火通信科技股份有限公司 | 一种数据帧存储管理装置 |
CN109064524A (zh) * | 2018-08-16 | 2018-12-21 | 上海联影医疗科技有限公司 | 一种数据传输方法、数据收集板、重建机及介质 |
Also Published As
Publication number | Publication date |
---|---|
CN109710679A (zh) | 2019-05-03 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108694075B (zh) | 处理报表数据的方法、装置、电子设备和可读存储介质 | |
US10817386B2 (en) | Virtual machine recovery method and virtual machine management device | |
CN109710679B (zh) | 数据抽取方法及装置 | |
CN111897638B (zh) | 分布式任务调度方法及系统 | |
US20140304306A1 (en) | Database Management System With Database Hibernation and Bursting | |
US9652492B2 (en) | Out-of-order execution of strictly-ordered transactional workloads | |
CN110753084B (zh) | 上链数据读取方法、缓存服务器及计算机可读存储介质 | |
US10817380B2 (en) | Implementing affinity and anti-affinity constraints in a bundled application | |
US20030014522A1 (en) | Activating a volume group without a quorum of disks in the volume group being active | |
CN109359060B (zh) | 数据抽取方法、装置、计算设备及计算机存储介质 | |
CN109684270B (zh) | 数据库归档方法、装置、系统、设备及可读存储介质 | |
US8990168B1 (en) | Efficient conflict resolution among stateless processes | |
CN110196749B (zh) | 虚拟机的恢复方法及装置、存储介质及电子装置 | |
US10552318B2 (en) | Working set adjustment in a managed environment | |
CN106815318B (zh) | 一种时序数据库的集群化方法及系统 | |
CN110888739B (zh) | 延迟任务的分布式处理方法与装置 | |
US20180046664A1 (en) | Shared resource update apparatus and shared resource update method | |
CN112698929A (zh) | 一种信息采集方法及装置 | |
CN108121514B (zh) | 元信息更新方法、装置、计算设备及计算机存储介质 | |
CN108037897B (zh) | 一种元数据扩散的方法、计算机装置及可读存储介质 | |
CN108984431B (zh) | 用于清空过期缓存的方法和装置 | |
CN115129438A (zh) | 任务分布式调度的方法和装置 | |
US8880828B2 (en) | Preferential block recycling in a redirect-on-write filesystem | |
CN108958967B (zh) | 一种数据处理的方法以及服务器 | |
CN111090627A (zh) | 基于池化的日志存储方法、装置、计算机设备及存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |