高性能分布式数据转换的方法、装置及系统
技术领域
本发明涉及计算机技术及软件领域,尤其涉及一种高性能分布式数据转换的方法、装置及系统。
背景技术
在不同公司间的信息系统对接过程中,经常遇到通过文件来交互数据的场景,这就需要将存在于数据库中的数据按照一定的格式生成对应的数据文件。当交互的数据量很大的时候,就需要一种快速、高效、稳定的生成数据文件的功能模块。
现有常见的数据转换,以实现文件生成的方案大致包括如下步骤:
1、利用定时任务在指定的时间点启动生成数据文件的任务;
2、根据任务参数从数据库中查询出相应的数据;
3、将查询到的数据全部加载到内存中,通过模板进行转换;
4、如果任务执行失败,从步骤1重新开始;
5、将生成的数据通过字节流生成数据文件。
但上述方案存在如下不足之处:
1、现有的任务调度:基于Java的Timer、Quartz等,都是基于时间的调度,如果由于异常问题错过了时间点,任务将不会再执行,并且只能执行串行任务;
2、现有的生成文件方案:将所有数据全部加载到内存中,一次性转换成对应的数据格式。但是如果将所有数据一次性加载到内存中,容易导致内存溢出;且大批量数据将会导致任务执行时间过长,只能采用单机生成文件,从而致使转换性能差风险高;另外,任务执行失败后需要重新获取全部数据,不能将大量数据任务拆分成多个子任务,任务重新执行的成本比拆分后的子任务重新执行成本高。
3、现有的文件上传策略:采用覆盖式,即相同文件进行数据覆盖,导致之前上传成功的有效数据部分被重新覆盖,造成数据传输浪费。
4、此外,现有技术中常用的数据转换模板有Freemarker、Velocity、HTTL等,但基于Freemarker、Velocity、HTTL的模板,在转换性能上较差,生成海量数据的数据文件时耗时长,并且语言标签繁琐。
发明内容
有鉴于此,本发明提供一种高性能分布式数据转换的方法、装置及系统,能够基于时间刻度进行任务调度,并对要执行海量数据的任务进行拆分,提高任务执行效率,提升容错率,且利用高效的文件转换模板,能够保证数据转换的高性能。
为实现上述目的,根据本发明的一个方面,提供了一种高性能分布式数据转换的方法。
本发明的一种高性能分布式数据转换的方法包括:配置并保存数据转换模板;获取待执行任务,然后根据待执行任务获取所述待执行任务要执行的数据总量;根据所述数据总量将所述待执行任务拆分成若干子任务,然后根据子任务获取子任务数据;利用所述数据转换模板对子任务数据进行转换,得到目标转换数据,然后将所述目标转换数据保存至目标转换文件中。
可选地,配置数据转换模板还包括:配置Beetl模板作为数据转换模板,以便实现高性能的数据转换。
可选地,配置Beetl模板作为数据转换模板还包括:剔除Beetl模板中自带的合法性校验功能;以及对Beetl模板中原生的数据加载和渲染方法进行优化整合,然后对Beetl模板的接口进行二次封装,以进一步提高Beetl模板的数据转换性能。
可选地,获取待执行任务还包括:基于时间刻度的调度策略,获取待执行任务,以保证超过执行时间的任务仍能被获取。
可选地,所述方法还包括:根据子任务获取子任务数据之后,对所述子任务数据进行合法性校验。
可选地,将所述目标转换数据保存至目标转换文件中还包括:采用覆盖、追加、断点续传的其中一种或几种传输方式,将所述目标转换数据传输到目标转换文件中予以保存。
可选地,所述方法还包括:检查子任务执行情况,对执行失败的子任务进行重新执行,若重新执行的次数达到预设次数阈值之后,所述执行失败的子任务仍未被执行成功,则进行预警。
为实现上述目的,根据本发明的另一方面,提供了一种高性能分布式数据转换的装置。
本发明的一种高性能分布式数据转换的装置包括:数据模板模块,用于配置并保存数据转换模板;任务模块,用于获取待执行任务,以及根据待执行任务的数据总量将所述待执行任务拆分成若干子任务;数据获取模块,用于根据待执行任务获取所述待执行任务要执行的数据总量,以及根据子任务获取子任务数据;数据处理模块,用于利用所述数据转换模板对所述数据获取模块获取的子任务数据进行转换,得到目标转换数据,然后将所述目标转换数据保存至目标转换文件中。
可选地,所述数据模板模块还用于:配置Beetl模板作为数据转换模板,以便实现高性能的数据转换。
可选地,所述数据模板模块还用于:剔除Beetl模板中自带的合法性校验功能;以及对Beetl模板中原生的数据加载和渲染方法进行优化整合,然后对Beetl模板的接口进行二次封装,以进一步提高Beetl模板的数据转换性能。
可选地,所述任务模块还用于:基于时间刻度的调度策略,获取待执行任务,以保证超过执行时间的任务仍能被获取。
可选地,所述数据获取模块还用于:根据子任务获取子任务数据之后,对所述子任务数据进行合法性校验。
可选地,所述数据处理模块还用于:采用覆盖、追加、断点续传的其中一种或几种传输方式,将所述目标转换数据传输到目标转换文件中予以保存。
可选地,所述任务模块还用于:检查子任务执行情况,对执行失败的子任务进行重新执行,若重新执行的次数达到预设次数阈值之后,所述执行失败的子任务仍未被执行成功,则进行预警。
为实现上述目的,根据本发明的再一方面,提供了一种高性能分布式数据转换的系统。
本发明的一种高性能分布式数据转换的系统包括:存储器和处理器,其中,所述存储器用于存储指令;所述处理器被配置为根据所述指令执行本发明的高性能分布式数据转换的方法。
根据本发明的技术方案,通过将大数据量的转换任务拆封成多个子任务,进行分布式、并行执行,从而可以避免因一次性将所有数据加载到内存中而导致的内存溢出;通过基于时间刻度的任务调度策略,只需设定各任务的执行时间,任务模块会扫描获取待执行任务,从而能够保障超过设定的执行时间的任务被及时获取,避免超时不再执行的情况发生;通过对于单个失败的子任务进行重试,且超过重试次数进行报错处理,从而能够提升任务执行的容错率和执行效率;通过采用多种数据传输模式,从而能够保障在任务执行失败后,重新执行时,对之前已上传成功的有效数据不再进行覆盖,避免数据传输的浪费;通过利用Beetl模板配置数据转换模板,且将配置好的Beetl数据转换模板引入数据处理模块,从而可以提升数据转换性能。
附图说明
附图用于更好地理解本发明,不构成对本发明的不当限定。其中:
图1是根据本发明实施例的高性能分布式数据转换的方法的主要步骤的示意图;
图2是实现本发明实施例的高性能分布式数据转换的方法的主要框架的示意图;
图3是根据本发明实施例的高性能分布式数据转换的方法的主要流程的示意图;
图4是根据本发明实施例的高性能分布式数据转换的装置的主要模块的示意图;
图5是根据本发明实施例的高性能分布式数据转换的系统的主要部分的示意图。
具体实施方式
以下结合附图对本发明的示范性实施例做出说明,其中包括本发明实施例的各种细节以助于理解,应当将它们认为仅仅是示范性的。因此,本领域普通技术人员应当认识到,可以对这里描述的实施例做出各种改变和修改,而不会背离本发明的范围和精神。同样,为了清楚和简明,以下的描述中省略了对公知功能和结构的描述。
本发明实施例的高性能分布式数据转换的方案,可基于高性能分布式数据转换的装置实现。本发明实施例的高性能分布式数据转换的装置主要包括任务模块、数据模板模块、数据获取模块以及数据处理模块。
其中,在任务模块中,可实现基于时间刻度的任务调度。即事先设定各任务的执行时间,若当前时间大于等于未被执行的任务的执行时间,则进行任务扫描时,对该未被执行的任务一并进行扫描、选择。本发明实施例中,只需设定任务的执行时间,任务模块会以例如但不限于每秒的周期频率扫描任务列表,以获取待执行任务。任务模块还可设计有任务拆分单元,可实现将数据量大的待执行任务拆封成多个子任务,进行分布式执行。此外,还可对于单个执行失败的子任务进行重试。通过定期或不定期的检查子任务,获取子任务的执行情况。若子任务执行失败,则重试,若超过重试次数仍失败,则进行报错处理,以提升容错率和执行效率。
另外,利用高效的数据转换模板,将Beetl模板引入数据处理模块,通过对Beetl参数进行调优,封装相关接口方法,能够使得转换性能较Freemarker、Velocity等模板提升近80%。
此外,对于文件传输,可采用但不限于以下三种传输模式,覆盖、追加、断点续传等。采用断点续传可以只针对传输失败数据,在传输失败的节点继续上传数据,以提升传输效率。
图1是根据本发明实施例的高性能分布式数据转换的方法的主要步骤的示意图。
如图1所示,本发明实施例的高性能分布式数据转换的方法主要包括如下步骤:
步骤S11:配置并保存数据转换模板。本步骤的目的在于根据数据转换需求和数据结构等因素,配置数据转换模块。
步骤S12:获取待执行任务,然后根据待执行任务获取所述待执行任务要执行的数据总量。任务模块通过调度单元扫描并获取待执行任务。然后数据获取模块根据待执行任务信息从数据库中获取待执行任务要执行的数据总量。
在步骤S12获取到待执行任务的数据总量之后,从步骤S13开始进行任务的拆分。
步骤S13:根据所述数据总量将所述待执行任务拆分成若干子任务,然后根据子任务获取子任务数据。如前所述,现有技术中,针对一整个任务的处理过程中,占用内存较大,且是串行执行各海量数据任务。本发明实施例中,根据各执行任务的机器的执行能力,将待执行任务进行拆分。例如可以是平均拆分,也可以按照数据库进行拆分。拆分规则不限于上述两种,只要可以实现本发明的分散任务执行压力,减少服务器内存占用的目的的拆分方案均可。
经过步骤S13的任务拆分后,分布式、并行处理各子任务。
步骤S14:利用所述数据转换模板对子任务数据进行转换,得到目标转换数据,然后将所述目标转换数据保存至目标转换文件中。
本发明实施例中,获取待执行任务时,可基于时间刻度的调度策略,获取待执行任务,以保证超过执行时间的任务仍然能够被获取。
如前所述,现有技术的文件上传大多是覆盖模式,导致之前已上传成功的有效数据部分被重新覆盖,造成数据传输浪费。本发明实施例中,将所述目标转换数据保存至目标转换文件中可采用覆盖、追加、断点续传的其中一种或几种传输方式,将所述目标转换数据传输到目标转换文件中予以保存,从而根据数据传输情况的不同,针对性的选择上传方案,以避免传输的浪费,提高传输效率。
此外,本发明实施例的高性能分布式数据转换的方法还可包括:检查子任务执行情况,对执行失败的子任务进行重新执行,若重新执行的次数达到预设次数阈值之后,所述执行失败的子任务仍未被执行成功,则进行预警,例如可以但不限于向工作人员发送报错邮件、短信等。
另外,由于现有技术中常用的数据转换模板有Freemarker、Velocity、HTTL等,但基于Freemarker、Velocity、HTTL的模板,在转换性能上较差,生成海量数据的数据文件时耗时长,并且语言标签繁琐。本发明实施例中,可配置Beetl模板作为数据转换模板,以便实现高性能的数据转换。
本发明实施例中,不仅将Beetl模块引入了数据转换的过程中,而且还对Beetl模板进行了优化处理,主要包括如下两个方面:一、剔除Beetl模板中自带的合法性校验功能,而是将合法性校验的步骤前置,在根据子任务获取子任务数据之后,对所述子任务数据进行合法性校验。例如数据格式是否合法等校验,以剔除异常数据,在保障数据准确性的前提下提高数据处理模块利用Beetl模板进行数据转换的效率;二、对Beetl模板中原生的数据加载和渲染方法进行优化整合,然后对Beetl模板的接口进行二次封装,以进一步提高Beetl模板的数据转换性能。
图2是实现本发明实施例的高性能分布式数据转换的方法的主要框架的示意图,图3是根据本发明实施例的高性能分布式数据转换的方法的主要流程的示意图。以下结合图2和图3对本发明实施例的高性能分布式数据转换的方法进行详细说明。
如前所述,本发明实施例的高性能分布式数据转换的方法可基于高性能分布式数据转换的装置实现。如图2所示,本发明实施例的高性能分布式数据转换的装置的主要框架包括任务模块、数据模板模块、数据获取模块以及数据处理模块。
任务模块
本发明实施例中,任务模块可包括任务调度单元,可根据数据库中的任务信息,从数据库中查询待执行的任务列表,然后对某一待执行任务进行锁定、执行;任务模块还可包括任务拆分单元,可根据每个机器的吞吐能力将整个待执行任务分解为多个待执行的子任务;此外,任务模块还可包括子任务检查单元,用于检查所有的子任务是否执行完成。
数据获取模块
任务调度开始时,从数据库集群中获取待执行任务的数据总量,此时只是数据总量,而非实际获得所有数据,然后交由任务拆分单元;以及针对任务拆分单元拆分好的每个子任务,获取子任务所需要的数据并进行数据合法性校验,例如,如果数据是数字类型,则数据的格式是否符合数字的格式要求等。然后将数据转换成对应的数据结构,如原始数据分表存储各字段信息,现通过转换,将同一主题的各个信息字段整合到一个数据结构对象中。
例如,数据库中包括三张表,student(学生信息表)、score(成绩表)、timeTable(选课表)。假设根据需求,需要得到以学生选课成绩为主题的数据,就可以定义一个学生成绩的数据结构,里面有学号、课程、成绩三项。此时,就需要从学生表获取学号,然后根据学号从选课表里面获取该学生的选课记录,再根据选课的记录去成绩表获取成绩。如此,就可完成根据学生成绩这个主题,将多个数据表中的信息整合到一个对象中。
Beetl数据模板模块
如前所述,本发明实施例中,数据转换模板可以基于Beetl模板进行配置,配置好的数据转换模块形成模板集合。一般而言,数据转换模板可分为文件头模板、数据详情模板、文件尾模板,每一部分所需要的数据结构不同,所以它们的模板就有差异。
仍以学生成绩数据为例,如果需要获取某班学生的成绩记录,则数据结构可以由文件头部(head)部分的学生成绩总数、详细数据(detail)部分的学生具体数据以及尾部(tail)平均成绩这三部分构成。则数据转换模板就需包括文件头模板、数据详情模板、文件尾模板三块。但这三种数据结构的分类是通常情况,即需要配置三个部分的模板,但在实际数据转换过程中,可能根据数据转换需求只需配置一块模板,而非全部,则就可以只配置一种模板。其中,文件头模板包含固定信息和配置信息;数据详情模板包含传输的数据具体内容;文件尾模板包含数据总量以及固定尾部信息等。分别在模板中编写对应的数据结构,指明指需要转换成的目标转换文件的数据结构,为数据处理做准备。
数据处理模块
将数据获取模块获取的数据先转换成模板中定义的数据结构,然后由模板引擎将数据转换模板转换成类class运行,并将数据转换模板中的静态部分采用二进制,一起合并输出、渲染,获取对应的输出结果。Beetl模板中本身自带数据校验功能,但为了提升数据转换的效率,将数据检查功能前置,在数据获取模块对获取的原始数据进行提前校验,以提升Beetl模板的数据转换性能。
例如:根据某任务获取的是学生详情数据信息,则会根据数据找到对应的数据详情模板,将数据和数据详情模板填充、融合、渲染转换成需要的数据。
文件存储模块
本发明实施例中,还可包括文件存储模块。用于将数据处理结果转换成Byte数组,用字节输出流的方式在远程文件存储模块中生成相应文件,即目标转换文件。
具体各模块之间交互,实现高性能分布式数据转换的主要流程如下:
1、根据任务配置,在指定的时间点执行任务,根据任务的配置信息从数据库中获取数据符合要求的数据总量;
2、由任务拆分单元针对返回的数据总量和配置的拆分规则(例如可以但不限于按数据库拆分、按平均量均分等)进行任务拆分,生成拆分后的子任务;
3、调度执行生成的子任务,从数据库中按照子任务的数据查询条件,获取执行的子任务数据;
4、针对子任务获取的任务数据,寻找对应的数据转换模板;
5、根据模板配置和数据信息,转换生成所需要的转换数据;
6、将生成的转换数据转换成字节流,根据配置的传输模式,上传到远程文件存储模块中。其中,生成目标转换文件时,需要针对每个子任务转换所得的目标转换数据进行拼接追加,然后保存到目标转换文件中;
7、子任务调度失败后,重新执行子任务(从流程3重新开始);
8、通过子任务检查单元,检查子任务是否都执行完成,执行完成则通知系统目标转换文件已经生成;如果子任务检查失败,则在重试若干次仍失败后,将失败的任务信息进行预警报错处理。具体流程可参阅图3。
根据本发明实施例的高性能分布式数据转换的方法可以看出,通过将包含海量数据的转换任务拆封成多个子任务,进行分布式、并行执行,从而可以避免因一次性将所有数据加载到内存中而导致的内存溢出;通过基于时间刻度的任务调度策略,只需设定各任务的执行时间,任务模块会扫描获取待执行任务,从而能够保障超过设定的执行时间的任务被及时获取,避免超时不再执行的情况发生;通过对于单个失败的子任务进行重试,且超过重试次数进行报错处理,从而能够提升任务执行的容错率和执行效率;通过采用多种数据传输模式,从而能够保障在任务执行失败后,重新执行时,对之前已上传成功的有效数据不再进行覆盖,避免数据传输的浪费;通过利用Beetl模板配置数据转换模板,且将配置好的Beetl数据转换模板引入数据处理模块,从而可以提升数据转换性能。
图4是根据本发明实施例的高性能分布式数据转换的装置的主要模块的示意图。
如图4所示,本发明实施例的一种高性能分布式数据转换的装置包括:数据模板模块401、任务模块402、数据获取模块403以及数据处理模块404,其中,
数据模板模块401用于配置并保存数据转换模板;任务模块402用于获取待执行任务,以及根据待执行任务的数据总量将所述待执行任务拆分成若干子任务;数据获取模块403用于根据待执行任务获取所述待执行任务要执行的数据总量,以及根据子任务获取子任务数据;数据处理模块404用于利用所述数据转换模对将所述数据获取模块获取的子任务数据进行转换,得到目标转换数据,然后将所述目标转换数据保存至目标转换文件中。
其中,数据模板模块401还可用于:配置Beetl模板作为数据转换模板,以便实现高性能的数据转换。另外,数据模板模块401还可用于进一步对Beetl模板进行优化处理,包括:剔除Beetl模板中自带的合法性校验功能;以及对Beetl模板中原生的数据加载和渲染方法进行优化整合,然后对Beetl模板的接口进行二次封装,以进一步提高Beetl模板的数据转换性能。
任务模块402还可用于:基于时间刻度的调度策略,获取待执行任务,以保证超过执行时间的任务仍然能够被获取。
此外,数据获取模块403还可用于:根据子任务获取子任务数据之后,对所述子任务数据进行合法性校验。
数据处理模块404还可用于:采用覆盖、追加、断点续传的其中一种或几种传输方式,将所述目标转换数据传输到目标转换文件中予以保存。
本发明实施例中,任务模块402还可用于:检查子任务执行情况,对执行失败的子任务进行重新执行,若重新执行的次数达到预设次数阈值之后,所述执行失败的子任务仍未被执行成功,则进行预警。
图5是根据本发明实施例的高性能分布式数据转换的系统的主要部分的示意图。
如图5所示,本发明实施例的高性能分布式数据转换的系统主要包括:存储器501和处理器502,其中,
存储器501用于存储指令;处理器502被配置为根据所述指令执行本发明实施例的高性能分布式数据转换的方法。
从以上描述可以看出,通过将大数据量的转换任务拆封成多个子任务,进行分布式、并行执行,从而可以避免因一次性将所有数据加载到内存中而导致的内存溢出;通过基于时间刻度的任务调度策略,只需设定各任务的执行时间,任务模块会扫描获取待执行任务,从而能够保障超过设定的执行时间的任务被及时获取,避免超时不再执行的情况发生;通过对于单个失败的子任务进行重试,且超过重试次数进行报错处理,从而能够提升任务执行的容错率和执行效率;通过采用多种数据传输模式,从而能够保障在任务执行失败后,重新执行时,对之前已上传成功的有效数据不再进行覆盖,避免数据传输的浪费;通过利用Beetl模板配置数据转换模板,且将配置好的Beetl数据转换模板引入数据处理模块,从而可以提升数据转换性能。
上述具体实施方式,并不构成对本发明保护范围的限制。本领域技术人员应该明白的是,取决于设计要求和其他因素,可以发生各种各样的修改、组合、子组合和替代。任何在本发明的精神和原则之内所作的修改、等同替换和改进等,均应包含在本发明保护范围之内。