CN113495784A - 数据批处理的方法和装置 - Google Patents

数据批处理的方法和装置 Download PDF

Info

Publication number
CN113495784A
CN113495784A CN202110851694.XA CN202110851694A CN113495784A CN 113495784 A CN113495784 A CN 113495784A CN 202110851694 A CN202110851694 A CN 202110851694A CN 113495784 A CN113495784 A CN 113495784A
Authority
CN
China
Prior art keywords
batch
transaction
batch processing
data
processing
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.)
Granted
Application number
CN202110851694.XA
Other languages
English (en)
Other versions
CN113495784B (zh
Inventor
柏跃
王述浩
张粤玲
刘晓
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Bank of China Ltd
Original Assignee
Bank of China Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Bank of China Ltd filed Critical Bank of China Ltd
Priority to CN202110851694.XA priority Critical patent/CN113495784B/zh
Publication of CN113495784A publication Critical patent/CN113495784A/zh
Application granted granted Critical
Publication of CN113495784B publication Critical patent/CN113495784B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • G06F9/4843Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
    • G06F9/4881Scheduling strategies for dispatcher, e.g. round robin, multi-level priority queues

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Debugging And Monitoring (AREA)

Abstract

本申请提供一种数据批处理的方法和装置,方法包括:创建批处理任务对应的批处理统计实例;以批处理统计实例作为输入参数,调用批处理对象执行批处理任务,得到批处理任务的执行结果;批处理对象,包括由批处理过程进行逻辑抽象后得到的批处理开发框架,以及针对批处理任务实现的至少一个处理器。本发明通过对批处理过程进行逻辑抽象,得到批处理开发框架,由批处理开发框架实现批处理过程中的非功能需求,由此,在开发具体的批处理程序时,开发人员只需要针对批处理任务的功能需求,实现本发明所提供的批处理对象中的若干个处理器,就可以完成一个批处理程序,从而极大地简化了批处理程序的开发过程,提高批处理程序的开发效率。

Description

数据批处理的方法和装置
技术领域
本发明涉及数据处理技术领域,特别涉及一种数据批处理的方法和装置。
背景技术
批处理,是指对大量数据一次性进行业务逻辑处理的过程。不同的批处理任务一般具有不同的业务逻辑,因此,为了完成特定的批处理任务,开发人员既需要针对该批处理任务的业务逻辑开发专门的批处理程序。而在批处理程序开发中,既涉及很多功能需求(指实现批处理任务的业务逻辑所必须的需求),也涉及很多非功能需求,导致批处理程序的开发及其复杂,提高了开发难度。
发明内容
针对上述现有技术存在的问题,本发明提供了一种数据批处理的方法和装置,以提高批处理程序的开发效率。
本发明第一方面提供一种数据批处理的方法,包括:
创建批处理任务对应的批处理统计实例;其中,所述批处理统计实例用于记录所述批处理任务的执行过程的统计信息;
以所述批处理统计实例作为输入参数,调用批处理对象执行所述批处理任务,得到所述批处理任务的执行结果;其中,所述批处理对象,包括由批处理过程进行逻辑抽象后得到的批处理开发框架,以及针对所述批处理任务实现的至少一个处理器。
可选的,所述针对所述批处理任务实现的至少一个处理器,包括批处理初始化器,数据读取器,单笔交易处理器,多笔交易后处理器,批后处理器和异常处理器;
其中,所述以所述批处理统计实例作为输入参数,调用批处理对象执行所述批处理任务,得到所述批处理任务的执行结果,包括:
以所述批处理统计实例作为输入参数,调用所述批处理初始化器执行批处理任务初始化;
以所述批处理统计实例作为输入参数执行批量过程,以获得所述批处理任务的执行结果;其中,所述批量过程被执行时,用于调用所述数据读取器、所述单笔交易处理器、所述多笔交易后处理器和所述异常处理器处理目标交易数据;所述目标交易数据指所述批处理任务所针对的交易数据;
以所述批处理统计实例作为输入参数,调用所述批后处理器对所述批处理任务的执行结果进行后处理;
清理批处理上下文,并关闭所述批处理对象对外部资源的访问;其中,所述批处理上下文,是在所述批处理任务的执行过程中产生的上下文数据。
可选的,所述以所述批处理统计实例作为输入参数执行批量过程,以获得所述批处理任务的执行结果,包括:
将批处理调用次数初始化为1;
判断所述批处理调用次数是否溢出;
若所述批处理调用次数未溢出,以所述批处理统计实例和所述批处理调用次数调用子批量处理过程,以获得所述批处理任务的子执行结果;其中,所述子批量处理过程被调用时,用于调用所述数据读取器、所述单笔交易处理器、所述多笔交易后处理器和所述异常处理器处理所述目标交易数据中的一部分;
判断是否存在未被处理的所述目标交易数据;
若存在未被处理的所述目标交易数据,将所述批处理调用次数加1,返回执行所述判断所述批处理调用次数是否溢出步骤;
若不存在未被处理的所述目标交易数据,结束所述批量过程;
若所述批处理调用次数溢出,结束所述批量过程。
可选的,所述以所述批处理统计实例和所述批处理调用次数调用子批量处理过程,以获得所述批处理任务的子执行结果,包括:
调用所述数据读取器读取部分所述目标交易数据;
根据核心线程数量,将读数据划分为多个数据分组,并为每一个核心线程配置一个对应的数据分组;其中,所述读数据指代所述数据读取器读取得到的部分所述目标交易数据;数据分组的个数与所述核心线程数量一致;
针对每一个所述核心线程,利用所述核心线程调用多笔交易处理过程处理所述核心线程对应的数据分组,得到所述核心线程的处理结果,并将每一个所述核心线程的处理结果合并为所述批处理任务的子执行结果;其中,所述多笔交易处理过程被调用时,用于所述单笔交易处理器、所述多笔交易后处理器和所述异常处理器处理所述核心线程对应的线程分组;
返回剩余数据标识;其中,所述剩余数据标识用于判断是否存在未被处理的所述目标交易数据。
可选的,所述利用所述核心线程调用多笔交易处理过程处理所述核心线程对应的数据分组,得到所述核心线程的处理结果,包括:
创建目标数据分组的子汇总对象,并将所述子汇总对象添加至所述所述批处理统计实例;其中,所述目标数据分组指代所述核心线程对应的数据分组;
判断所述目标数据分组是否存在未处理的交易数据;
若是,从所述目标数据分组读取一笔未处理的交易数据;
调用单笔交易处理过程处理读取的交易数据,得到所述交易数据对应的交易结果;其中,所述单笔交易处理过程被调用时,用于调用所述单笔交易处理器处理所述核心线程对应的线程分组;
返回执行所述判断所述目标数据分组是否存在未处理的交易数据;
若所述单笔交易处理过程处理失败,调用所述异常处理器抛出异常;
若所述目标数据分组不存在未处理的交易数据,调用所述多笔交易后处理器将各个所述交易结果合并为所述核心线程的处理结果。
本发明第二方面提供一种数据批处理的装置,包括:
创建单元,用于创建批处理任务对应的批处理统计实例;其中,所述批处理统计实例用于记录所述批处理任务的执行过程的统计信息;
调用单元,用于以所述批处理统计实例作为输入参数,调用批处理对象执行所述批处理任务,得到所述批处理任务的执行结果;其中,所述批处理对象,包括由批处理过程进行逻辑抽象后得到的批处理开发框架,以及针对所述批处理任务实现的至少一个处理器。
可选的,所述针对所述批处理任务实现的至少一个处理器,包括批处理初始化器,数据读取器,单笔交易处理器,多笔交易后处理器,批后处理器和异常处理器;
其中,所述调用单元以所述批处理统计实例作为输入参数,调用批处理对象执行所述批处理任务,得到所述批处理任务的执行结果时,具体用于:
以所述批处理统计实例作为输入参数,调用所述批处理初始化器执行批处理任务初始化;
以所述批处理统计实例作为输入参数执行批量过程,以获得所述批处理任务的执行结果;其中,所述批量过程被执行时,用于调用所述数据读取器、所述单笔交易处理器、所述多笔交易后处理器和所述异常处理器处理目标交易数据;所述目标交易数据指所述批处理任务所针对的交易数据;
以所述批处理统计实例作为输入参数,调用所述批后处理器对所述批处理任务的执行结果进行后处理;
清理批处理上下文,并关闭所述批处理对象对外部资源的访问;其中,所述批处理上下文,是在所述批处理任务的执行过程中产生的上下文数据。
可选的,所述调用单元以所述批处理统计实例作为输入参数执行批量过程,以获得所述批处理任务的执行结果时,具体用于:
将批处理调用次数初始化为1;
判断所述批处理调用次数是否溢出;
若所述批处理调用次数未溢出,以所述批处理统计实例和所述批处理调用次数调用子批量处理过程,以获得所述批处理任务的子执行结果;其中,所述子批量处理过程被调用时,用于调用所述数据读取器、所述单笔交易处理器、所述多笔交易后处理器和所述异常处理器处理所述目标交易数据中的一部分;
判断是否存在未被处理的所述目标交易数据;
若存在未被处理的所述目标交易数据,将所述批处理调用次数加1,返回执行所述判断所述批处理调用次数是否溢出步骤;
若不存在未被处理的所述目标交易数据,结束所述批量过程;
若所述批处理调用次数溢出,结束所述批量过程。
可选的,所述调用单元以所述批处理统计实例和所述批处理调用次数调用子批量处理过程,以获得所述批处理任务的子执行结果时,具体用于:
调用所述数据读取器读取部分所述目标交易数据;
根据核心线程数量,将读数据划分为多个数据分组,并为每一个核心线程配置一个对应的数据分组;其中,所述读数据指代所述数据读取器读取得到的部分所述目标交易数据;数据分组的个数与所述核心线程数量一致;
针对每一个所述核心线程,利用所述核心线程调用多笔交易处理过程处理所述核心线程对应的数据分组,得到所述核心线程的处理结果,并将每一个所述核心线程的处理结果合并为所述批处理任务的子执行结果;其中,所述多笔交易处理过程被调用时,用于所述单笔交易处理器、所述多笔交易后处理器和所述异常处理器处理所述核心线程对应的线程分组;
返回剩余数据标识;其中,所述剩余数据标识用于判断是否存在未被处理的所述目标交易数据。
可选的,所述调用单元利用所述核心线程调用多笔交易处理过程处理所述核心线程对应的数据分组,得到所述核心线程的处理结果时,具体用于:
创建目标数据分组的子汇总对象,并将所述子汇总对象添加至所述所述批处理统计实例;其中,所述目标数据分组指代所述核心线程对应的数据分组;
判断所述目标数据分组是否存在未处理的交易数据;
若是,从所述目标数据分组读取一笔未处理的交易数据;
调用单笔交易处理过程处理读取的交易数据,得到所述交易数据对应的交易结果;其中,所述单笔交易处理过程被调用时,用于调用所述单笔交易处理器处理所述核心线程对应的线程分组;
返回执行所述判断所述目标数据分组是否存在未处理的交易数据;
若所述单笔交易处理过程处理失败,调用所述异常处理器抛出异常;
若所述目标数据分组不存在未处理的交易数据,调用所述多笔交易后处理器将各个所述交易结果合并为所述核心线程的处理结果。
可以看出,本发明通过对批处理过程进行逻辑抽象,得到所有批处理过程中共性的批处理开发框架,由批处理开发框架实现批处理过程中的非功能需求,由此,在开发具体的批处理程序时,开发人员只需要针对批处理任务的功能需求,实现本发明所提供的批处理对象中的若干个处理器,就可以完成一个批处理程序,从而极大地简化了批处理程序的开发过程,提高批处理程序的开发效率。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。
图1为本申请实施例提供的一种数据批处理的方法的流程图;
图2为本申请另一实施例提供的一种数据批处理的方法的流程图;
图3为本申请实施例提供的执行批量过程的流程图;
图4为本申请实施例提供的调用子批量处理过程的流程图;
图5为本申请实施例提供的为划分数据分组的流程图;
图6为本申请实施例提供的调用多笔交易处理过程的流程图;
图7为本申请实施例提供的一种数据批处理的装置的结构示意图;
图8为本申请实施例提供的一种电子设备的结构示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
请参考图1,本申请提供的数据批处理的方法,可以包括如下的步骤:
S101、创建批处理任务对应的批处理统计实例。
批处理统计实例,是基于批处理开发框架中预先定义的批处理统计类型BatchSummarys而创建的一个对象。针对一个批处理任务,该批处理任务的批处理统计实例,主要用于记录批处理任务的执行过程的统计信息,统计信息具体可以包括这一批处理任务的执行过程中的处理成功交易笔数、处理失败交易笔数、忽略(不需要处理)交易笔数、开始处理时间、结束处理时间等属性,另外还可以包括一个用于存放BatchSummarys类型的元素的列表subList,该列表用于存放批处理任务的各个数据分组被处理时产生的统计信息。上述统计信息可以在批处理任务执行完毕后,作为后续对该批处理任务的审计分析的依据。
基于批处理开发框架定义好的批处理统计类型BatchSummarys,可以通过如下代码创建某个批处理任务(不妨记为批处理任务A)对应的批处理统计实例:
BatchSummarys sums=new BatchSummarys()。其中,sums就是针对批处理任务A所创建的批处理统计实例。
可选的,当有特殊情况而需要扩展处理逻辑时,可以编辑前述批处理统计类型BatchSummarys中的代码。一般情况下,批处理统计类型BatchSummarys已经在批处理开发框架,不需要由开发者编辑其中的代码。
需要说明的是,步骤S101创建的批处理统计实例中各项属性,如处理成功交易笔数、处理失败交易笔数等均为空属性,即刚创建的批处理统计实例中仅有各项属性的属性名,而不包含属性值(或者说属性值为null),这些属性的属性值需要在这个批处理任务的执行过程中,由批处理对象根据业务处理执行结果进行自动累加。
S102、以批处理统计实例作为输入参数,调用批处理对象执行批处理任务,得到批处理任务的执行结果。
其中,批处理对象,包括由批处理过程进行逻辑抽象后得到的批处理开发框架。
一个批处理对象可以包括一个构造函数,以及一个批量过程(用batch()表示),批量过程内封装有前述批处理开发框架,批量过程在被执行(或被调用)时会基于批处理开发框架调用批处理配置对象BatchOption中的批处理器,从而完成当前的批处理任务。
在本文中,批处理对象为抽象批处理过程而得到的对象,批处理配置对象,则是用于配置下述表格中所列举的执行参数和处理器的对象。
请参考表1,批处理配置对象BatchOption中的执行参数可以包括:
表1
Figure BDA0003182549670000081
在本申请所提供的数据批处理的方法中,处理器是采用接口类型的方式定义的,本申请中涉及的处理器接口所包含的函数定义分别如下:
void BatchInit(BatchSummarys sums)throws Exception;
void BatchOver(BatchSummarys sums)throws Exception;
void BatchExceptionHandle(Throwable thr,Object txn,Integer txnNo);
void BatchTxnsHandleAfter()throws Exception;
void BatchTxnHandleBefore(Object txn,BatchSummarys subSum)throwsException;
Object BatchTxnHandle(Object txn,int txnNo)throws Exception;
void BatchTxnWrite(Object writeData,int txnNo,Object txn)throwsException;
void BatchTxnHandleAfter(Object txn,TxnHandleStatus status,BatchSummarys subSum);
Object BatchReader(BatchSummarys sums);
对上述各个处理器的具体说明请参考表2:
表2
Figure BDA0003182549670000091
BatchOption是一个批处理配置类,它包括对应于表1的各个执行参数的参数变量,以及对应于表2所述的各处理器的处理器变量,刚创建好的BatchOption中,以上各个变量的值均为空或默认值(如果有默认值的话)。
当需要执行特定的批处理任务时,开发人员一方面根据需要为批处理配置对象BatchOption中各参数变量赋值,即设置具体的参数值,另一方面根据需求创建上述表2中的处理器对应的处理器对象,在处理器对象中实现具体的业务代码。如创建一个单笔交易处理器BatchTxnHandler对象,并在该对象中写入具体如何进行单笔交易处理的业务代码。最后,开发人员将创建好的处理器对象对应的赋值给批处理配置对象BatchOption中的处理器变量。
当批处理对象被调用时,在指定的步骤,计算机系统会检查批处理配置对象BatchOption中对应该步骤的处理器变量是否被赋值,若该处理器变量未被赋值,则不调用对应的处理器,若该处理器被赋值,说明该批处理配置对象BatchOption配置了对应的处理器,此时就可以通过前述接口函数调用该处理器,从而运行相应的处理器对象中由开发人员编写的业务代码,进行特定的业务处理。
例如,批处理配置对象BatchOption中,批处理初始化器变量的值为空,单笔交易处理器变量的值为创建好的单笔交易处理器对象,则该批处理执行的过程中,会通过前述单笔交易处理器的接口函数调用单笔交易处理器,从而运行创建好的单笔交易处理器对象中的业务代码,但是不会调用批处理初始化器。
接口函数BatchTxnWrite中,writeData为要输出的对象,也就是BatchTxnHandle的返回值。txn为原交易对象。
BatchTxnHandleAfter的接口函数中,TxnHandleStatus为交易处理的结果状态,具体可以是成功、失败、忽略。
批处理配置对象可以通过如下的代码创建:
BatchOption BatchOptionA=New BatchOption()。
开发人员需要设置前述表1所示的各项参数,然后根据当前的批处理任务的功能需求,实现前文定义的若干个接口(也就是为每个接口的接口函数编写具体的业务代码),例如,通过实现BatchInit函数(批处理初始化器)来实现具体的初始化功能,通过实现BatchTxnHandler函数(单笔交易处理器)来实现对单笔交易的交易数据的具体处理功能。
完成上述定义后,在步骤S102中,批处理对象中的批量过程就会自动执行前述批处理开发框架,并调用前面实现的接口函数来实现具体的功能需求,从而完成批处理任务。
可以看出,本发明通过对批处理过程进行逻辑抽象,得到所有批处理过程中共性的批处理开发框架,由批处理开发框架实现批处理过程中的非功能需求,由此,在开发具体的批处理程序时,开发人员只需要针对批处理任务的功能需求,实现本发明所提供的批处理配置对象中的若干个处理器,就可以完成一个批处理程序,从而极大地简化了批处理程序的开发过程,提高批处理程序的开发效率。
其中,如果批处理配置对象不配置批处理初始化器和批后处理器,则步骤S102相当于,直接以批处理统计实例作为输入参数,执行批处理对象中定义的批量过程batch(),以获得批处理任务的执行结果。
反之,若批处理配置对象配置了批处理初始化器和批后处理器,则步骤S102相当于依次以批处理统计实例作为输入参数,调用批处理初始化器,批量过程和批后处理器。请参考图2,当批处理配置对象配置了批处理初始化器和批后处理器时,本申请提供的数据批处理的方法可以包括如下步骤:
S201、创建批处理任务对应的批处理统计实例。
S202、以批处理统计实例作为输入参数,调用批处理初始化器执行批处理任务初始化。
假设针对当前的批处理任务建立的批处理配置对象为BatchOptionA,那么,步骤S202中,可以通过如下代码调用批处理初始化器:
BatchOptionA.BatchIniter(sums)。
批处理初始化器具体执行哪些初始化操作,需要有开发人员根据当前的批处理任务的功能需求而配置,常见的初始化操作可以包括检测批处理任务所针对的交易数据(即目标交易数据)中是否有异常数据,以及检测是否缺失必要的数据等。
S203、以批处理统计实例作为输入参数执行批量过程,以获得批处理任务的执行结果。
其中,批量过程被执行时,用于调用数据读取器、单笔交易处理器、多笔交易后处理器和异常处理器处理目标交易数据。
S204、以批处理统计实例作为输入参数,调用批后处理器对批处理任务的执行结果进行后处理。
针对批处理配置对象BatchOptionA,可以通过如下代码调用该对象中配置的批后处理器:
BatchOptionA.BatchAfter(sums)。
类似的,批后处理器具体执行哪些后处理操作,需要有开发人员根据当前的批处理任务的功能需求而配置,常见的后处理操作可以包括对文件进行备份处理,也就是创建批处理任务的执行结果的备份。
S205、清理批处理上下文,并关闭批处理对象对外部资源的访问。
其中,批处理上下文(不妨记为BatchContext),是在批处理任务的执行过程中产生的上下文数据(即整个批处理过程的上下文),在批处理任务的执行过程中,可以通过批处理上下文传递数据,批处理上下文需要占用一定的存储空间,因此,在批处理结束时需要删除批处理上下文(即清理批处理上下文),从而释放批处理上下文所占用的存储空间。
批处理配置对象中配置的处理器可能涉及对外部资源的访问,例如从文件中读取目标交易数据,建立网络通讯等,在批处理结束时,可以关闭处理器对这些资源的访问,以使得其他程序能够在批处理结束后访问这些资源。具体的,如果本申请的批处理对象采用Java语言实现,且处理器的接口函数中实现了Closeable接口,则可以调用close()方法来实现资源的统一关闭。
请参考图3,上述实施例中批量过程的执行流程,或者说,步骤S203的具体执行过程,可以包括:
S301、将批处理调用次数初始化为1。
批处理调用次数可以用subBatchNo表示,在步骤S303中,可以设定subBatchNo等于1。
S302、判断批处理调用次数是否溢出。
若批处理调用次数未溢出,则执行步骤S303,反之,若批处理调用次数溢出,则执行步骤S306。
步骤S302中,可以根据前述表1的子批处理最大调用次数,即subBatchMax来判断批处理调用次数是否溢出。若subBatchMax设置为一个小于或等于0的数值,那么,每次执行步骤S302得到的判断结果均为,批处理调用次数未溢出。
可选的,在subBatchMax小于或等于0时,由于批处理调用次数一直递增,可能会增大至Long(计算机中一种数值变量的类型)型变量的最大值,此时,可以将批处理调用次数设置为1,重新从1开始计数。
若subBatchMax设置为一个大于0的数值,则执行步骤S302时,若当前的批处理调用次数大于subBatchMax,则判断结果为批处理调用次数溢出,反之,若当前的批处理调用次数小于或等于subBatchMax,则判断结果为批处理调用次数未溢出。
S303、以批处理统计实例和批处理调用次数调用子批量处理过程,以获得批处理任务的子执行结果。
其中,子批量处理过程被调用时,用于调用数据读取器、单笔交易处理器、多笔交易后处理器和异常处理器处理目标交易数据中的一部分。
子批量处理过程每次被调用后,可以得到被处理的一部分目标交易数据对应的子执行结果,最后各部分目标交易数据对应的子执行结果合并,就得到前述批处理任务的执行结果。
子批量处理过程用subBatch()表示。
对子批量处理过程的调用可以用下述代码表示:
hasMore=subBatch(subBatchNo,sums)。
其中,subBatch()为子批量处理过程,subBatchNo和sums是批处理调用次数和批处理统计实例,hasMore是一个预先定义的布尔(bool)型变量,该变量的值可以是true或false,该变量的值由子批量处理过程反馈,也就是说,subBatch()执行后会输出true或false,该结果会记录在hasMore变量中。
若执行步骤S303后,hasMore变量的值为true,则步骤S304的判断结果为,存在未被处理的目标交易数据,若执行步骤S303后,hasMore变量的值为false,则步骤S304的判断结果为,不存在未被处理的目标交易数据。
S304、判断是否存在未被处理的目标交易数据。
若存在未被处理的目标交易数据,执行步骤S305,反之,若不存在未被处理的目标交易数据,即全部的目标交易数据均已被处理,则执行步骤S306。
S305、将批处理调用次数加1。
步骤S305执行结束后,返回执行步骤S302。
S306、结束批量过程。
可以看出,执行批处理过程batch()实际是对子批处理subBatch进行循环调用,直至批处理调用次数溢出或者目标交易数据全部处理完毕。
步骤S306可以通过调用批处理对象中定义的batchEnd()执行,具体的,可以通过如下代码调用batchEnd():
batchEnd(sums)。
batchEnd()表示结束处理,等待线程池中的所有任务处理完毕。
请参考图4,子批量处理过程被调用时的流程,即前述步骤S303的具体执行过程,可以包括:
S401、调用数据读取器读取部分目标交易数据。
数据读取器为前述表2中列举的一个处理器,一般的,每一个批处理配置对象都会配置有数据读取器,用于从指定的数据源读取目标数据,数据源的具体路径,从数据源读取哪些数据,按什么方式读取,则由开发人员在实现数据读取器的接口函数时设定。
S402、根据核心线程数量,将读数据划分为多个数据分组,并为每一个核心线程配置一个对应的数据分组。
其中,读数据指代数据读取器读取得到的部分目标交易数据;数据分组的个数与核心线程数量一致。
S403、针对每一个核心线程,利用核心线程调用多笔交易处理过程处理核心线程对应的数据分组,得到核心线程的处理结果,并将每一个核心线程的处理结果合并为批处理任务的子执行结果。
其中,多笔交易处理过程被调用时,用于单笔交易处理器、多笔交易后处理器和异常处理器处理核心线程对应的线程分组。
S404、返回剩余数据标识。
其中,剩余数据标识用于判断是否存在未被处理的目标交易数据。剩余数据标识,相当于前述实施例中的hasMore,若hasMore的值为true,说明存在未被处理的目标交易数据,若hasMore的值为false,说明不存在未被处理的目标交易数据。
子批量处理过程主要用于对每一次读取的数据(即readData)进行处理。如前文所述,本过程的入口参数有subBatchNo(表示批处理调用次数)、sums(批处理统计实例)。返回值为前述剩余数据标识,表示是否还有后续数据处理。
可以看出,本过程先调用数据读取器从数据源读取一部分目标交易数据,然后将读取的交易数据根据线程池核心线程的数量进行分组,然后利用各个核心线程中分别处理每个分组数据。
数据读取器读取到的目标交易数据可以用readData表示,readData包含数据读取器实际读取到的部分目标交易数据data,和表示是否还有待读取数据的hasMore属性(即前述剩余数据标识)。hasMore决定了是否还需要进行下一次subBatch的调用,如果读取文件,当读取到文件尾时,hasMore就为false,表示目标交易数据已全部读取完毕。data为数据读取器从数据源读出的待处理交易数据的集合。
可选的,若数据读取器执行后反馈的readData为空(即null),或者其中的data为空(null),则可以子批量处理过程可以直接返回,即结束子批量处理过程。
线程池为前述表1所示的BatchOption中定义的threadPoolTaskExecutor对象。
交易数据一般是由用户的交易行为产生的,若将用户的一次交易行为记为一笔交易,那么,可以识别本次读取到的读数据分别是根据哪些交易产生的,进而将本次读取的这部分数据划分为若干笔待处理交易,待处理交易的总数量,记为交易笔数txnNum,然后就可以将若干笔待处理交易划分根据核心线程的数量平均划分为多个数据分组,得到的分组结果记为SplitGroup。
比如本次读取到的数据涉及6笔交易,核心线程的数量为4个,则需要将6笔交易平均分配为4个数据分组,则每个数据分组的交易笔数分别为:2、2、1、1。若将前述6笔交易依次编号为0至5,则SplitGroup的分组结果中,每个分组包含的交易的编号依次是0至2、2至4、4至5、5至6,结束序号对应的交易不包括在该分组中,即第一个数据分组仅包含编号为0和1的交易。SplitGroup中可以包括,每一个数据分组的开始序号(begin)、结束序号(end),以及总交易笔数(即本次读取的交易数据总共涉及的交易笔数total),以及数据分组的个数groupNum的属性。其中,若某一数据分组仅包含一笔交易,则该数据分组的开始序号等于该笔交易的编号,该数据分组的结束序号等于开始序号加1,即结束序号=开始序号+1。
在步骤S402中,可以遍历SplitGroup的每个数据分组,每遍历到一个数据分组,选择线程池中尚未配置数据分组的一个核心线程,将该数据分组配置给这个核心线程,每一个核心线程都用于执行批处理对象中的多笔交易处理过程,记为txnsHandle(),这样就可以在步骤S403中,调用这个核心线程所运行的多笔交易处理过程处理核心线程对应的数据分组,得到核心线程的处理结果,其中,对于一个核心线程,可以通过如下代码调用多笔交易处理过程:
txnsHandle(subBatchNo,readData.data,sums,begin,end,processedTxnNum)。
processedTxnNum是一个全局计数器,表示已处理的交易笔数。主要用来计算某笔交易在整个处理过程中属于第几笔交易。
在前述步骤S402中,请参考图5,可以通过如下方法确定第i个数据分组所包含的交易的编号,既可以通过图5的方法划分数据分组:
S501、判断i是否大于数据分组的个数。
若i大于数据分组的个数,返回null,该方法中,返回null则表示不存在该第i个数据分组,此时说明已经完成数据分组的划分。
若i不大于数据分组的个数,则执行步骤S502。
S502、将基本交易个数设置为,总交易笔数除以数据分组的个数得到的商。
即基本交易个数(base)=总交易笔数total除以数据分组的个数groupNum的商。需要说明的是,步骤S502中采用整数的除法,即如果total不能整除groupNum,那么将total除以groupNum得到的结果向下取整,作为步骤S502所述的商,然后,将total减去groupNum与商的乘积的结果,作为步骤S503中所述的余数。
S503、将剩余数量设置为,总交易笔数除以数据分组的个数得到的余数,并根据基本交易个数设置开始序号。
剩余数量可以用more表示。
开始序号可以按如下公式设置:
begin=base*(i-1)。
begin即开始序号,base即基本交易个数。
S504、若剩余数量大于零,更新开始序号。
相应的,若剩余数量不大于零,则不需要执行步骤S504,直接执行步骤S505。
步骤S504的具体执行过程是:
若i-1小于或等于前述剩余数量,那么按如下公式(1)更新开始序号:
公式(1):begin=begin+i-1。
若i-1大于前述剩余数量,那么按如下公式(2)更新开始序号:
公式(2):begin=begin+more。
公式(1)和公式(2)中,等号右侧的begin为更新前的开始序号,等号左侧的begin为更新后的开始序号。
S505、若开始序号大于或等于总交易笔数,则结束本方法。
也就是说,若begin>=total,则返回null,反之,若begin小于total,则跳过步骤S505,执行步骤S506。
S506、将结束序号设置为,开始序号和基本交易个数的和。
步骤S506可以用下述公式表示:
end=begin+base。end即是结束序号。
S507、若i小于或等于剩余数量,就将结束序号递增1。
也就是说,如果i<=more,则end=end+1,其中,等号左侧的end表示更新后的结束序号,等号右侧的end表示更新前的结束序号。
S508、输出数据分组i的开始序号和结束序号。
获得开始序号和结束序号后,就可以确定出该数据分组包含哪些交易,也就相当于完成一个数据分组的划分。
在上述方法中,begin大于或等于total时,表示总交易笔数小于数据分组的个数时,获取的开始序号大于数据分组的个数的情形。
通过上述分组方法,可以保证了每个分组中的交易笔数保持均衡,从而使得每个核心线程处理的笔数一致(最多相差一个),可以充分利用分配给每个核心线程的计算资源。
如下的多笔交易处理过程txnsHandle就是线程池中每个核心线程均执行的内容。该过程入口参数有:subBatchNo(子批量序号)、data(本次batchReader所读取的交易数据集合)、sums(批处理统计实例)、begin(目标数据分组的开始序号)、end(目标数据分组的结束序号)、processedTxnNum(已处理交易笔数)。请参考图6,多笔交易处理过程被调用后的流程,即利用核心线程调用多笔交易处理过程处理核心线程对应的数据分组的具体执行过程可以包括:
S601、创建目标数据分组的子汇总对象,并将子汇总对象添加至批处理统计实例。
具体的,子汇总对象可以添加至前述批处理统计实例的列表subList中。
其中,目标数据分组指代核心线程对应的数据分组。可选的,子汇总对象可以记为subSum。子汇总对象可以包括成功数和失败数两个变量,在步骤S601中这两个变量可以设定为0。
S602、判断目标数据分组是否存在未处理的交易数据。
若目标数据分组存在未处理的交易数据,执行步骤S603,反之,若目标数据分组不存在未处理的交易数据,执行S606。
S603、从目标数据分组读取一笔未处理的交易数据。
S604、调用单笔交易处理过程处理读取的交易数据,得到交易数据对应的交易结果。
若单笔交易处理过程处理成功,返回执行步骤S602,直至目标数据分组中每一笔交易对应的交易数据均被处理,也就是直至目标数据分组中没有未处理的交易数据为止,若单笔交易处理过程处理失败,执行步骤S606。
S605、调用异常处理器抛出异常。
步骤S605执行后,返回执行步骤S602。
S606、调用多笔交易后处理器将各个交易结果合并为核心线程的处理结果。
可选的,每次执行步骤S604后,若单笔交易处理过程处理成功,可以将子汇总对象成功数递增1,若单笔交易处理过程处理失败,可以将子汇总对象的失败数递增1。
批处理统计实例sums是当前整个批处理任务执行过程中统计信息的汇总,subSum是批处理任务中每一个子批量处理过程的统计信息汇总,他们都属于BatchSummarys类。将subSum加入到sums,就是将subSum放入sums的subList中。
步骤S604中,可以通过如下代码调用单笔交易处理过程:
txnHandleRes=txnHandler(txn,subSum,processedTxnNum+i)。
上述代码中,processedTxnNum+i为当前处理的这笔交易在整个批处理中的交易序号。txnHandleRes为单笔交易处理过程返回的单笔交易处理的结果,包含处理结果数据、异常对象两个属性。如果异常对象不为null则表示该单笔交易处理失败,失败时调用BatchExceptionHandler处理器。
上述过程中其他处理器的调用均可以通过调用前述接口函数实现,不再赘述。
可选的,为了提高处理速度,可以处理多笔交易后才提交事务,而不用逐笔提交事务。提交事务,可以理解为从事务对象创建的时间(即事务开始时间)到当前时间为止,将这段时间内单笔交易处理过程获得的处理结果固化,也就是将处理结果写入存储介质中。
可选的,在执行步骤S601后,可以创建一个事务对象,将事务对象中的事务开始时间属性设置为当前时间。
在此基础上,每次执行步骤S603,即从目标数据分组读取一笔未处理的交易数据之前,可以执行如下的事务处理1的过程:
首先判断在本次单笔交易处理过程是否满足事务提交条件;
事务提交条件可以是,本次单笔交易处理过程中已处理的交易笔数为参数commitRecNum的整数倍,或者,事务持续时间(等于当前时间-事务开始时间)大于或等于参数txnTimeOut;
如果满足事务提交条件,则执行事务提交,然后建立新的事务对象;
如果不满足事务提交条件,则在当前的事务对象中创建保存点SavePoint。保存点,可以包括创建保存点的时刻多笔交易处理过程txnsHandle中各项参数的数值。
可选的,若步骤S604之后发现交易处理失败时,可以执行事务处理2的过程:将事务回滚到保存点SavePoint。回滚到保存点,可以理解为,将多笔交易处理过程txnsHandle中的各项参数,重置为保存点中记录的数值,这样可以从执行单笔交易处理过程之前的状态开始,重复执行最近一次执行的单笔交易处理过程。
单笔交易处理过程txnHandler()在执行时,一般会涉及前述表2中单笔交易前处理器、单笔交易处理器、单笔交易数据输出器、单笔交易后处理器4个处理器的调用,具体的,txnHandler()的执行过程可以包括:
调用BatchTxnHandleBefore(即表2的单笔交易前处理器)处理读取的交易数据;
调用BatchTxnHandler(即表2的单笔交易处理器)处理读取的交易数据,得到处理结果rtData;
用rtData作为参数调用BatchTxnWriter(即表2的单笔交易输出器)缓存处理结果;
调用BatchTxnHandleAfter(即表2的单笔交易后处理器)进行后处理;
返回txnHandleRes。
在本申请所提供的批处理对象中,实现批量过程batch(),子批量处理过程subBatch(),多笔交易处理过程txnsHandle()和单笔交易处理过程txnHandle()的代码,构成了批处理对象中的批处理开发框架,各个过程中调用的处理器,则需要由开发人员根据具体的批处理任务编写对应的接口函数,从而实现各个处理器。
第一方面,本发明对批处理过程进行逻辑抽象,并提供了接口函数,以便开发人员进行处理器的定义和配置。
第二方面,本发明在数据批处理中使用线程池,并且在读取交易数据后,按线程池核心线程的多少进行任务均分,再将分组数据交予线程池的各个核心线程处理。
并且,在分配线程时仅使用核心线程,避免非核心线程产生。在处理结束时等待线程池中所有任务完成后才能结束批处理,这样保证汇总信息能收集到所有线程的处理结果,避免主线程结束了而线程池线程还没有结束。
第三方面,本发明在多笔交易处理过程中,批量提交事务,而不逐笔提交事务,以提高处理速度。
第四方面,本发明对处理过程中发生的所有异常统一用异常处理器BatchExceptionHandler进行处理,统一了异常处理的规范。
可以看出,本发明通过对批处理过程进行逻辑抽象,得到所有批处理过程中共性的批处理开发框架,由批处理开发框架实现批处理过程中的非功能需求,由此,在开发具体的批处理程序时,开发人员只需要针对批处理任务的功能需求,实现本发明所提供的批处理对象中的若干个处理器,就可以完成一个批处理程序,从而极大地简化了批处理程序的开发过程,提高批处理程序的开发效率。换言之,本发明提供了一个批处理开发框架,开发人员只需要关注开发需要的处理器,然后配置组装即可,提高了开发效率。同时该框架采用线程池进行多线程的处理,以及批量提交事务,提高了批处理效率。
结合本申请实施例提供的数据批处理的方法,本申请实施例还提供一种数据批处理的装置,请参考图7,该装置可以包括如下单元:
创建单元701,用于创建批处理任务对应的批处理统计实例;其中,批处理统计实例用于记录批处理任务的执行过程的统计信息;
调用单元702,用于以批处理统计实例作为输入参数,调用批处理对象执行批处理任务,得到批处理任务的执行结果;其中,批处理对象,包括由批处理过程进行逻辑抽象后得到的批处理开发框架,以及针对批处理任务实现的至少一个处理器。
可选的,针对批处理任务实现的至少一个处理器,包括批处理初始化器,数据读取器,单笔交易处理器,多笔交易后处理器,批后处理器和异常处理器;
其中,调用单元以批处理统计实例作为输入参数,调用批处理对象执行批处理任务,得到批处理任务的执行结果时,具体用于:
以批处理统计实例作为输入参数,调用批处理初始化器执行批处理任务初始化;
以批处理统计实例作为输入参数执行批量过程,以获得批处理任务的执行结果;其中,批量过程被执行时,用于调用数据读取器、单笔交易处理器、多笔交易后处理器和异常处理器处理目标交易数据;目标交易数据指批处理任务所针对的交易数据;
以批处理统计实例作为输入参数,调用批后处理器对批处理任务的执行结果进行后处理;
清理批处理上下文,并关闭批处理对象对外部资源的访问;其中,批处理上下文,是在批处理任务的执行过程中产生的上下文数据。
可选的,调用单元以批处理统计实例作为输入参数执行批量过程,以获得批处理任务的执行结果时,具体用于:
将批处理调用次数初始化为1;
判断批处理调用次数是否溢出;
若批处理调用次数未溢出,以批处理统计实例和批处理调用次数调用子批量处理过程,以获得批处理任务的子执行结果;其中,子批量处理过程被调用时,用于调用数据读取器、单笔交易处理器、多笔交易后处理器和异常处理器处理目标交易数据中的一部分;
判断是否存在未被处理的目标交易数据;
若存在未被处理的目标交易数据,将批处理调用次数加1,返回执行判断批处理调用次数是否溢出步骤;
若不存在未被处理的目标交易数据,结束批量过程;
若批处理调用次数溢出,结束批量过程。
可选的,调用单元以批处理统计实例和批处理调用次数调用子批量处理过程,以获得批处理任务的子执行结果时,具体用于:
调用数据读取器读取部分目标交易数据;
根据核心线程数量,将读数据划分为多个数据分组,并为每一个核心线程配置一个对应的数据分组;其中,读数据指代数据读取器读取得到的部分目标交易数据;数据分组的个数与核心线程数量一致;
针对每一个核心线程,利用核心线程调用多笔交易处理过程处理核心线程对应的数据分组,得到核心线程的处理结果,并将每一个核心线程的处理结果合并为批处理任务的子执行结果;其中,多笔交易处理过程被调用时,用于单笔交易处理器、多笔交易后处理器和异常处理器处理核心线程对应的线程分组;
返回剩余数据标识;其中,剩余数据标识用于判断是否存在未被处理的目标交易数据。
可选的,调用单元利用核心线程调用多笔交易处理过程处理核心线程对应的数据分组,得到核心线程的处理结果时,具体用于:
创建目标数据分组的子汇总对象,并将子汇总对象添加至批处理统计实例;其中,目标数据分组指代核心线程对应的数据分组;
判断目标数据分组是否存在未处理的交易数据;
若是,从目标数据分组读取一笔未处理的交易数据;
调用单笔交易处理过程处理读取的交易数据,得到交易数据对应的交易结果;其中,单笔交易处理过程被调用时,用于调用单笔交易处理器处理核心线程对应的线程分组;
返回执行判断目标数据分组是否存在未处理的交易数据;
若单笔交易处理器处理失败,调用异常处理器抛出异常;
若目标数据分组不存在未处理的交易数据,调用多笔交易后处理器将各个交易结果合并为核心线程的处理结果。
上述实施例提供的数据批处理的装置,其具体工作原理可以参考本申请实施例提供的数据批处理的方法中的相关步骤,此处不再赘述。
本申请还提供一种电子设备,请参考图8,该电子设备包括存储器801和处理器802,其中存储器801用于存储计算机程序,处理器802用于执行上述计算机程序,具体用于实现本申请任一实施例所提供的数据批处理的方法。
本申请还提供一种计算机存储介质,用于存储计算机程序,该计算机程序被执行时,具体用于实现本申请任一实施例所提供的数据批处理的方法。
最后,还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
需要注意,本发明中提及的“第一”、“第二”等概念仅用于对不同的装置、模块或单元进行区分,并非用于限定这些装置、模块或单元所执行的功能的顺序或者相互依存关系。
专业技术人员能够实现或使用本申请。对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本申请的精神或范围的情况下,在其它实施例中实现。因此,本申请将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。

Claims (10)

1.一种数据批处理的方法,其特征在于,包括:
创建批处理任务对应的批处理统计实例;其中,所述批处理统计实例用于记录所述批处理任务的执行过程的统计信息;
以所述批处理统计实例作为输入参数,调用批处理对象执行所述批处理任务,得到所述批处理任务的执行结果;其中,所述批处理对象,包括由批处理过程进行逻辑抽象后得到的批处理开发框架,以及针对所述批处理任务实现的至少一个处理器。
2.根据权利要求1所述的方法,其特征在于,所述针对所述批处理任务实现的至少一个处理器,包括批处理初始化器,数据读取器,单笔交易处理器,多笔交易后处理器,批后处理器和异常处理器;
其中,所述以所述批处理统计实例作为输入参数,调用批处理对象执行所述批处理任务,得到所述批处理任务的执行结果,包括:
以所述批处理统计实例作为输入参数,调用所述批处理初始化器执行批处理任务初始化;
以所述批处理统计实例作为输入参数执行批量过程,以获得所述批处理任务的执行结果;其中,所述批量过程被执行时,用于调用所述数据读取器、所述单笔交易处理器、所述多笔交易后处理器和所述异常处理器处理目标交易数据;所述目标交易数据指所述批处理任务所针对的交易数据;
以所述批处理统计实例作为输入参数,调用所述批后处理器对所述批处理任务的执行结果进行后处理;
清理批处理上下文,并关闭所述批处理对象对外部资源的访问;其中,所述批处理上下文,是在所述批处理任务的执行过程中产生的上下文数据。
3.根据权利要求2所述的方法,其特征在于,所述以所述批处理统计实例作为输入参数执行批量过程,以获得所述批处理任务的执行结果,包括:
将批处理调用次数初始化为1;
判断所述批处理调用次数是否溢出;
若所述批处理调用次数未溢出,以所述批处理统计实例和所述批处理调用次数调用子批量处理过程,以获得所述批处理任务的子执行结果;其中,所述子批量处理过程被调用时,用于调用所述数据读取器、所述单笔交易处理器、所述多笔交易后处理器和所述异常处理器处理所述目标交易数据中的一部分;
判断是否存在未被处理的所述目标交易数据;
若存在未被处理的所述目标交易数据,将所述批处理调用次数加1,返回执行所述判断所述批处理调用次数是否溢出步骤;
若不存在未被处理的所述目标交易数据,结束所述批量过程;
若所述批处理调用次数溢出,结束所述批量过程。
4.根据权利要求3所述的方法,其特征在于,所述以所述批处理统计实例和所述批处理调用次数调用子批量处理过程,以获得所述批处理任务的子执行结果,包括:
调用所述数据读取器读取部分所述目标交易数据;
根据核心线程数量,将读数据划分为多个数据分组,并为每一个核心线程配置一个对应的数据分组;其中,所述读数据指代所述数据读取器读取得到的部分所述目标交易数据;数据分组的个数与所述核心线程数量一致;
针对每一个所述核心线程,利用所述核心线程调用多笔交易处理过程处理所述核心线程对应的数据分组,得到所述核心线程的处理结果,并将每一个所述核心线程的处理结果合并为所述批处理任务的子执行结果;其中,所述多笔交易处理过程被调用时,用于调用所述单笔交易处理器、所述多笔交易后处理器和所述异常处理器处理所述核心线程对应的线程分组;
返回剩余数据标识;其中,所述剩余数据标识用于判断是否存在未被处理的所述目标交易数据。
5.根据权利要求4所述的方法,其特征在于,所述利用所述核心线程调用多笔交易处理过程处理所述核心线程对应的数据分组,得到所述核心线程的处理结果,包括:
创建目标数据分组的子汇总对象,并将所述子汇总对象添加至所述所述批处理统计实例;其中,所述目标数据分组指代所述核心线程对应的数据分组;
判断所述目标数据分组是否存在未处理的交易数据;
若是,从所述目标数据分组读取一笔未处理的交易数据;
调用单笔交易处理过程处理读取的交易数据,得到所述交易数据对应的交易结果;其中,所述单笔交易处理过程被调用时,用于调用所述单笔交易处理器处理所述核心线程对应的线程分组;
返回执行所述判断所述目标数据分组是否存在未处理的交易数据;
若所述单笔交易处理过程处理失败,调用所述异常处理器抛出异常;
若所述目标数据分组不存在未处理的交易数据,调用所述多笔交易后处理器将各个所述交易结果合并为所述核心线程的处理结果。
6.一种数据批处理的装置,其特征在于,包括:
创建单元,用于创建批处理任务对应的批处理统计实例;其中,所述批处理统计实例用于记录所述批处理任务的执行过程的统计信息;
调用单元,用于以所述批处理统计实例作为输入参数,调用批处理对象执行所述批处理任务,得到所述批处理任务的执行结果;其中,所述批处理对象,包括由批处理过程进行逻辑抽象后得到的批处理开发框架,以及针对所述批处理任务实现的至少一个处理器。
7.根据权利要求6所述的装置,其特征在于,所述针对所述批处理任务实现的至少一个处理器,包括批处理初始化器,数据读取器,单笔交易处理器,多笔交易后处理器,批后处理器和异常处理器;
其中,所述调用单元以所述批处理统计实例作为输入参数,调用批处理对象执行所述批处理任务,得到所述批处理任务的执行结果时,具体用于:
以所述批处理统计实例作为输入参数,调用所述批处理初始化器执行批处理任务初始化;
以所述批处理统计实例作为输入参数执行批量过程,以获得所述批处理任务的执行结果;其中,所述批量过程被执行时,用于调用所述数据读取器、所述单笔交易处理器、所述多笔交易后处理器和所述异常处理器处理目标交易数据;所述目标交易数据指所述批处理任务所针对的交易数据;
以所述批处理统计实例作为输入参数,调用所述批后处理器对所述批处理任务的执行结果进行后处理;
清理批处理上下文,并关闭所述批处理对象对外部资源的访问;其中,所述批处理上下文,是在所述批处理任务的执行过程中产生的上下文数据。
8.根据权利要求7所述的装置,其特征在于,所述调用单元以所述批处理统计实例作为输入参数执行批量过程,以获得所述批处理任务的执行结果时,具体用于:
将批处理调用次数初始化为1;
判断所述批处理调用次数是否溢出;
若所述批处理调用次数未溢出,以所述批处理统计实例和所述批处理调用次数调用子批量处理过程,以获得所述批处理任务的子执行结果;其中,所述子批量处理过程被调用时,用于调用所述数据读取器、所述单笔交易处理器、所述多笔交易后处理器和所述异常处理器处理所述目标交易数据中的一部分;
判断是否存在未被处理的所述目标交易数据;
若存在未被处理的所述目标交易数据,将所述批处理调用次数加1,返回执行所述判断所述批处理调用次数是否溢出步骤;
若不存在未被处理的所述目标交易数据,结束所述批量过程;
若所述批处理调用次数溢出,结束所述批量过程。
9.根据权利要求8所述的装置,其特征在于,所述调用单元以所述批处理统计实例和所述批处理调用次数调用子批量处理过程,以获得所述批处理任务的子执行结果时,具体用于:
调用所述数据读取器读取部分所述目标交易数据;
根据核心线程数量,将读数据划分为多个数据分组,并为每一个核心线程配置一个对应的数据分组;其中,所述读数据指代所述数据读取器读取得到的部分所述目标交易数据;数据分组的个数与所述核心线程数量一致;
针对每一个所述核心线程,利用所述核心线程调用多笔交易处理过程处理所述核心线程对应的数据分组,得到所述核心线程的处理结果,并将每一个所述核心线程的处理结果合并为所述批处理任务的子执行结果;其中,所述多笔交易处理过程被调用时,用于所述单笔交易处理器、所述多笔交易后处理器和所述异常处理器处理所述核心线程对应的线程分组;
返回剩余数据标识;其中,所述剩余数据标识用于判断是否存在未被处理的所述目标交易数据。
10.根据权利要求9所述的装置,其特征在于,所述调用单元利用所述核心线程调用多笔交易处理过程处理所述核心线程对应的数据分组,得到所述核心线程的处理结果时,具体用于:
创建目标数据分组的子汇总对象,并将所述子汇总对象添加至所述所述批处理统计实例;其中,所述目标数据分组指代所述核心线程对应的数据分组;
判断所述目标数据分组是否存在未处理的交易数据;
若是,从所述目标数据分组读取一笔未处理的交易数据;
调用单笔交易处理过程处理读取的交易数据,得到所述交易数据对应的交易结果;其中,所述单笔交易处理过程被调用时,用于调用所述单笔交易处理器处理所述核心线程对应的线程分组;
返回执行所述判断所述目标数据分组是否存在未处理的交易数据;
若所述单笔交易处理过程处理失败,调用所述异常处理器抛出异常;
若所述目标数据分组不存在未处理的交易数据,调用所述多笔交易后处理器将各个所述交易结果合并为所述核心线程的处理结果。
CN202110851694.XA 2021-07-27 2021-07-27 数据批处理的方法和装置 Active CN113495784B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202110851694.XA CN113495784B (zh) 2021-07-27 2021-07-27 数据批处理的方法和装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202110851694.XA CN113495784B (zh) 2021-07-27 2021-07-27 数据批处理的方法和装置

Publications (2)

Publication Number Publication Date
CN113495784A true CN113495784A (zh) 2021-10-12
CN113495784B CN113495784B (zh) 2024-03-19

Family

ID=77996619

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202110851694.XA Active CN113495784B (zh) 2021-07-27 2021-07-27 数据批处理的方法和装置

Country Status (1)

Country Link
CN (1) CN113495784B (zh)

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20030131339A1 (en) * 2001-08-06 2003-07-10 Kulkarni Vinay Vasant Methods and apparatus for batch program implementation
CN104199869A (zh) * 2014-08-18 2014-12-10 中国建设银行股份有限公司 一种业务批处理方法、业务服务器以及系统
CN106775985A (zh) * 2016-12-26 2017-05-31 中国建设银行股份有限公司 一种批处理任务调度方法及装置
CN113407429A (zh) * 2021-06-23 2021-09-17 中国建设银行股份有限公司 一种任务处理方法和装置

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20030131339A1 (en) * 2001-08-06 2003-07-10 Kulkarni Vinay Vasant Methods and apparatus for batch program implementation
CN104199869A (zh) * 2014-08-18 2014-12-10 中国建设银行股份有限公司 一种业务批处理方法、业务服务器以及系统
CN106775985A (zh) * 2016-12-26 2017-05-31 中国建设银行股份有限公司 一种批处理任务调度方法及装置
CN113407429A (zh) * 2021-06-23 2021-09-17 中国建设银行股份有限公司 一种任务处理方法和装置

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
解志君;王小刚;翟世臣;: "基于Spring Batch构建企业级大数据批处理应用研究", 信息化研究, no. 06, 20 December 2016 (2016-12-20) *

Also Published As

Publication number Publication date
CN113495784B (zh) 2024-03-19

Similar Documents

Publication Publication Date Title
JP7023718B2 (ja) リアルタイムデータストリームに対して実行するためのクエリの選択
JP6177179B2 (ja) エラーハンドリングをもつトランザクションのグラフ型計算
US9009734B2 (en) Application level speculative processing
CN101681272B (zh) 使用事务来并行化顺序框架
CN105164639B (zh) 控制由计算系统执行的任务
US10942824B2 (en) Programming model and framework for providing resilient parallel tasks
US11093241B2 (en) Outlier software component remediation
US9239732B2 (en) Unrolling aggregation operations in asynchronous programming code having multiple levels in hierarchy
US8271768B2 (en) Concurrent handling of exceptions in received aggregate exception structure with supplied exception handlers and marking handled exceptions
Derks et al. Customized atomicity specification for transactional workflows
WO2023082575A1 (zh) 一种面向神经网络模型计算的图执行流水并行方法和装置
Gavran et al. Rely/guarantee reasoning for asynchronous programs
US8146085B2 (en) Concurrent exception handling using an aggregated exception structure
Michel et al. A microkernel architecture for constraint programming
O'Leary et al. Protocol verification using flows: An industrial experience
CN112990780B (zh) 一种工作流的构建方法、装置和设备
CN113495784B (zh) 数据批处理的方法和装置
US8490115B2 (en) Ambient state for asynchronous methods
CN111353766A (zh) 分布式业务系统的业务流程处理系统及方法
US8627301B2 (en) Concurrent management of adaptive programs
CN111538491A (zh) 数据事件处理方法、装置、设备和存储介质
US20130173682A1 (en) Floating-point error propagation in dataflow
Loureiro Hybrid Smart Contracts in Ethereum
CN111078449A (zh) 信息处理方法、信息处理装置及终端设备
Saraswat Concurrent constraint-based memory machines: a framework for java memory models (summary)

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