基于声明的批处理方法和系统转让专利

申请号 : CN201811130206.0

文献号 : CN109165090B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 李渊汤杰

申请人 : 苏宁消费金融有限公司

摘要 :

本发明提供一种基于声明的批处理方法,适于根据批处理对象的类型进行批处理,批处理对象的类型包括基础批对象、分页批对象、分组批对象,包括以下步骤:创建一基础批处理模块、一分页批处理模块和一分组批处理模块,用以分别作为基础批对象、分页批对象、分组批对象的执行模块;响应于接收到一批处理对象,通过继承以声明该批处理对象的类型,并且更新批签名;根据所述批处理对象的类型,调用相应的执行模块以对批处理对象进行批处理。本发明避免了复杂的逻辑配置、组装调用灵活、实现了批处理和业务处理的解耦合,对于批异常,能够自动处理,实现断点恢复,使开发者从复杂的批处理解脱出来。

权利要求 :

1.一种基于声明的批处理方法,适于根据批处理对象的类型进行批处理,批处理对象的类型包括基础批对象、分页批对象、分组批对象,其特征在于,所述方法包括以下步骤:创建一基础批处理模块、一分页批处理模块和一分组批处理模块,用以分别作为基础批对象、分页批对象、分组批对象的执行模块;

响应于接收到一批处理对象,通过继承以声明该批处理对象的类型,并且更新批签名;

根据所述批处理对象的类型,调用相应的执行模块以对批处理对象进行批处理;

所述方法还包括:

响应于所述批处理对象被声明成分页批,调用分页批处理模块以获取该批处理对象的页并发数N并且对该批处理对象进行批处理:调取N页未执行或者执行失败的页,生成每页的起始行和结束行,并发执行,这一过程被定义成一次单次执行过程,其中,

1)响应于任意一次单次执行过程执行完毕,将本次单次执行过程处理的执行页标记成已执行;

2)响应于任意一次单次执行过程出现异常,回滚当前执行页,将其标记成执行失败,向上抛出以等待重新处理;

循环所述单次执行过程直至所述批处理对象的所有页被全部标记成已执行。

2.根据权利要求1所述的基于声明的批处理方法,其特征在于,所述方法还包括:所述基础批处理模块、分页批处理模块和分组批处理模块根据更新后的批签名以获取所述批处理对象的执行参数。

3.根据权利要求1或者2所述的基于声明的批处理方法,其特征在于,所述批签名包括批处理对象的类型、页并发数、每页数据量、动态批次号中的几种或者全部。

4.根据权利要求1所述的基于声明的批处理方法,其特征在于,所述方法还包括:所述基础批处理模块和分页批处理模块链接至一业务入口;

如果所述批处理对象为基础批和/或分页批,回调业务入口以对该批处理对象执行业务逻辑。

5.一种基于声明的批处理系统,其特征在于,所述批处理系统包括一批声明模块、一批入口模块、一基础批处理模块、一分页批处理模块和一分组批处理模块:所述批声明模块用以声明批处理对象类型,包括批继承子模块、批签名子模块、业务入口子模块;

所述批继承子模块响应于接收到一批处理对象,通过继承以声明该批处理对象的类型,所述批签名子模块用以更新已声明的批处理对象的批签名,所述业务入口子模块链接至一业务处理模块,业务处理模块用以对批处理对象执行业务逻辑;

所述批入口模块链接至批声明模块,接收所有经由批声明模块处理后的批处理对象以对其执行批处理逻辑;

所述基础批处理模块包括批控制子模块、批执行子模块;

所述批控制子模块用以通过批签名查看批处理对象的历史记录,以确定批处理对象的执行情况以及更新批执行结果,所述批执行子模块用以回调批声明模块的业务入口子模块以对批处理对象执行业务逻辑;

所述分组批处理模块包括一批列表子模块,批列表子模块用以分解接收的分组批为若干个单位批处理对象,并且生成一批列表,根据批列表中批处理对象的排列次序回调批声明模块,以逐一确认该分组批所包括的所有单位批处理对象的执行逻辑;

所述分页批处理模块包括一count子模块,一页列表子模块、一页调用子模块;

所述count子模块用以回调批声明模块的业务入口子模块,获取批处理对象批次处理的数据量,所述页列表子模块用以根据获取的批次处理的数据量和批签名的每页数据量,生成批处理对象的总页数,所述页调用子模块则用以根据批签名的页并发数N,循环调用批声明模块的业务入口子模块,以对批处理对象执行业务逻辑。

6.根据权利要求5所述的基于声明的批处理系统,其特征在于,所述批入口子模块集成至基础批处理模块中。

7.根据权利要求5或者6所述的基于声明的批处理系统,其特征在于,所述基础批的批处理代码包括:

8.根据权利要求5或者6所述的基于声明的批处理系统,其特征在于,所述分页批的批处理代码包括:

9.根据权利要求5或者6所述的基于声明的批处理系统,其特征在于,所述分组批的批处理代码包括:

说明书 :

基于声明的批处理方法和系统

技术领域

[0001] 本发明涉及批处理领域,具体而言涉及一种基于声明的批处理方法和系统。

背景技术

[0002] 在一些奖励计算中,具有批处理多,批处理复杂度高,数据量大,容错要求高的特点。需要满足以下要求:
[0003] 1)防止重复计算。
[0004] 2)多个批对外能够只展示成一个批。
[0005] 3)数据量大时,能够解决大事务问题。
[0006] 4)批异常处理:断批时,可以从还原点正确续批。
[0007] 5)能够根据机器性能,随时调整处理的并发数。
[0008] 6)采用统一入口:调用简单,方便批的统一执行控制。
[0009] 7)解耦合:业务和批框架解耦合,使开发专注于业务处理,从繁琐的批控制中解放出来。

发明内容

[0010] 本发明目的在于提供一种基于声明的批处理方法和系统,通过批签名和继承的关系,声明批处理对象的调用链和唯一签名,指定其所属类别,根据不同的类别调用对应的批处理模块后,引入具体的业务实现类以完成对批处理对象的执行逻辑,本发明避免了复杂的逻辑配置、组装调用灵活、实现了批处理和业务处理的解耦合,对于批异常,能够自动处理,实现断点恢复。
[0011] 为达成上述目的,本发明提出一种基于声明的批处理方法,适于根据批处理对象的类型进行批处理,批处理对象的类型包括基础批对象、分页批对象、分组批对象,所述方法包括以下步骤:
[0012] 创建一基础批处理模块、一分页批处理模块和一分组批处理模块,用以分别作为基础批对象、分页批对象、分组批对象的执行模块;
[0013] 响应于接收到一批处理对象,通过继承以声明该批处理对象的类型,并且更新批签名;
[0014] 根据所述批处理对象的类型,调用相应的执行模块以对批处理对象进行批处理。
[0015] 进一步的,所述方法还包括:
[0016] 所述基础批处理模块、分页批处理模块和分组批处理模块根据更新后的批签名以获取所述批处理对象的执行参数。
[0017] 进一步的,所述批签名包括批处理对象的类型、页并发数、每页数据量、动态批次号中的几种或者全部。
[0018] 进一步的,所述方法还包括:
[0019] 响应于所述批处理对象被声明成分页批,调用分页批处理模块以获取该批处理对象的页并发数N并且对该批处理对象进行批处理:
[0020] 调取N页未执行或者执行失败的页,生成每页的起始行和结束行,并发执行,这一过程被定义成一次单次执行过程,其中,
[0021] 1)响应于任意一次单次执行过程执行完毕,将本次单次执行过程处理的执行页标记成已执行;
[0022] 2)响应于任意一次单次执行过程出现异常,回滚当前执行页,将其标记成执行失败,向上抛出以等待重新处理;
[0023] 循环所述单次执行过程直至所述批处理对象的所有页被全部标记成已执行。
[0024] 进一步的,所述方法还包括:
[0025] 所述基础批处理模块和分页批处理模块链接至一业务入口;
[0026] 如果所述批处理对象为基础批和/或分页批,回调业务入口以对该批处理对象执行业务逻辑。
[0027] 基于前述方法,本发明提出一种基于声明的批处理系统,所述批处理系统包括一批声明模块、一批入口模块、一基础批处理模块、一分页批处理模块和一分组批处理模块:
[0028] 所述批声明模块用以声明批处理对象类型,包括批继承子模块、批签名子模块、业务入口子模块;
[0029] 所述批继承子模块响应于接收到一批处理对象,通过继承以声明该批处理对象的类型,所述批签名子模块用以更新已声明的批处理对象的批签名,所述业务入口子模块链接至一业务处理模块,业务处理模块用以对批处理对象执行业务逻辑;
[0030] 所述批入口模块链接至批声明模块,接收所有经由批声明模块处理后的批处理对象以对其执行批处理逻辑;
[0031] 所述基础批处理模块包括批控制子模块、批执行子模块;
[0032] 所述批控制子模块用以通过批签名查看批处理对象的历史记录,以确定批处理对象的执行情况以及更新批执行结果,所述批执行子模块用以回调批声明模块的业务入口子模块以对批处理对象执行业务逻辑;
[0033] 所述分组批处理模块包括一批列表子模块,批列表子模块用以分解接收的分组批为若干个单位批处理对象,并且生成一批列表,根据批列表中批处理对象的排列次序回调批声明模块,以逐一确认该分组批所包括的所有单位批处理对象的执行逻辑;
[0034] 所述分页批处理模块包括一count子模块,一页列表子模块、一页调用子模块;
[0035] 所述count子模块用以回调批声明模块的业务入口子模块,获取批处理对象批次处理的数据量,所述页列表子模块用以根据获取的批次处理的数据量和批签名的每页数据量,生成批处理对象的总页数,所述页调用子模块则用以根据批签名的页并发数N,循环调用批声明模块的业务入口子模块,以对批处理对象执行业务逻辑。
[0036] 进一步的,所述批入口子模块集成至基础批处理模块中。
[0037] 进一步的,所述基础批的批处理代码包括:
[0038]
[0039] 进一步的,所述分页批的批处理代码包括:
[0040]
[0041] 进一步的,所述分组批的批处理代码包括:
[0042]
[0043]
[0044] 由以上本发明的技术方案,与现有相比,其显著的有益效果在于,[0045] 1)通过声明来确认业务要调用的框架底层功能,省去了复杂的逻辑配置。
[0046] 2)采用批签名,使调度控制清晰,执行上下文清晰。
[0047] 3)采用回调机制,实现了批处理框架和业务处理的解耦合。
[0048] 4)组装调用灵活,性能调优灵活,对于批异常,能够自动处理,实现断点恢复。
[0049] 应当理解,前述构思以及在下面更加详细地描述的额外构思的所有组合只要在这样的构思不相互矛盾的情况下都可以被视为本公开的发明主题的一部分。另外,所要求保护的主题的所有组合都被视为本公开的发明主题的一部分。
[0050] 结合附图从下面的描述中可以更加全面地理解本发明教导的前述和其他方面、实施例和特征。本发明的其他附加方面例如示例性实施方式的特征和/或有益效果将在下面的描述中显见,或通过根据本发明教导的具体实施方式的实践中得知。

附图说明

[0051] 附图不意在按比例绘制。在附图中,在各个图中示出的每个相同或近似相同的组成部分可以用相同的标号表示。为了清晰起见,在每个图中,并非每个组成部分均被标记。现在,将通过例子并参考附图来描述本发明的各个方面的实施例,其中:
[0052] 图1是本发明的基于声明的批处理方法流程图。
[0053] 图2是本发明的基于声明的批处理系统结构图。

具体实施方式

[0054] 为了更了解本发明的技术内容,特举具体实施例并配合所附图式说明如下。
[0055] 在本公开中参照附图来描述本发明的各方面,附图中示出了许多说明的实施例。本公开的实施例不必定意在包括本发明的所有方面。应当理解,上面介绍的多种构思和实施例,以及下面更加详细地描述的那些构思和实施方式可以以很多方式中任意一种来实施,这是因为本发明所公开的构思和实施例并不限于任何实施方式。另外,本发明公开的一些方面可以单独使用,或者与本发明公开的其他方面的任何适当组合来使用。
[0056] 在本申请中:
[0057] 批签名:唯一确定批上下文的模型类,包含了批类型,批次号,并发设置等,用于批执行逻辑和调用链的控制。
[0058] 基础批:该框架的最底层,是其它批的父类,以及基础批/分页批/分组批的执行入口。
[0059] 分组批:批集合,用于流程化的业务调用链,集合里可以是基础批/分页批/分组批的任意组合。
[0060] 分页批:分页处理数据,用于数据量大的场景,会自动按数据量生成一批带有偏移量的子批,然后并发处理子批的数据,异常重跑时,会根据处理结果为非成功的子批得到还原点,继续偏移执行。
[0061] 结合图1,本发明的目的是提出一种基于声明的批处理方法,适于根据批处理对象的类型进行批处理,批处理对象的类型包括基础批对象、分页批对象、分组批对象,其特征在于,所述方法包括以下步骤:
[0062] S1:创建一基础批处理模块、一分页批处理模块和一分组批处理模块,用以分别作为基础批对象、分页批对象、分组批对象的执行模块。
[0063] S2:响应于接收到一批处理对象,通过继承以声明该批处理对象的类型,并且更新批签名。
[0064] S3:根据所述批处理对象的类型,调用相应的执行模块以对批处理对象进行批处理。
[0065] 如前所述,批签名是指唯一确定批上下文的模型类,包含了批类型、批次号、并发设置等,用于批执行逻辑和调用链的控制,批签名内包含的内容根据批处理对象的类型而定。例如,对于分页批,批签名包括批处理对象的类型、页并发数、每页数据量、动态批次号中的几种或者全部。
[0066] 在步骤S3中,所述基础批处理模块、分页批处理模块和分组批处理模块根据更新后的批签名以获取所述批处理对象的执行参数。
[0067] 当批处理对象被判定为分页批时,调用分页批处理模块对其进行处理,在处理过程中,由于是并发执行,存在出现异常处理的可能,为了解决异常批处理过程,本发明提及了一种分页批的批处理方法。
[0068] 当所述批处理对象被声明成分页批时,调用分页批处理模块以获取该批处理对象的页并发数N并且对该批处理对象进行批处理,过程如下:
[0069] 调取N页未执行或者执行失败的页,生成每页的起始行和结束行,并发执行,这一过程被定义成一次单次执行过程,其中,存在两种情况:
[0070] 1)执行过程无异常:当任意一次单次执行过程执行完毕时,将本次单次执行过程处理的执行页标记成已执行。
[0071] 2)执行过程出现异常:当任意一次单次执行过程出现异常时,回滚当前执行页,将其标记成执行失败,向上抛出以等待重新处理。
[0072] 循环所述单次执行过程直至所述批处理对象的所有页被全部标记成已执行。
[0073] 和现有开源批处理框架对比,本发明提出的基于声明的批处理系统还实现了批处理框架和业务的解耦合,具体的,所述基础批处理模块和分页批处理模块链接至一业务入口。
[0074] 如果所述批处理对象为基础批和/或分页批,回调业务入口以对该批处理对象执行业务逻辑。
[0075] 通过这一方式,将批处理框架和业务做了解耦合,使得开发人员能够专注于业务处理,而不必理会繁琐的批控制。
[0076] 结合图2,在此基础上,本发明还提及一种基于声明的批处理系统,所述批处理系统包括一批声明模块、一批入口模块、一基础批处理模块、一分页批处理模块和一分组批处理模块。
[0077] 所述批声明模块用以声明批处理对象类型,包括批继承子模块、批签名子模块、业务入口子模块。
[0078] 所述批继承子模块响应于接收到一批处理对象,通过继承以声明该批处理对象的类型,声明是基础批或分组批或分页批。
[0079] 所述批签名子模块用以更新已声明的批处理对象的批签名,例如静态的批类型/每页数据量/页并发数、以及动态的批次号等等。
[0080] 所述业务入口子模块为业务的具体实现类,链接至一业务处理模块,业务处理模块用以对批处理对象执行业务逻辑。
[0081] 所述批入口模块作为所有批处理对象的执行入口,链接至批声明模块,接收所有经由批声明模块处理后的批处理对象以对其执行批处理逻辑。
[0082] 所述基础批处理模块包括批控制子模块、批执行子模块。
[0083] 所述批控制子模块用以通过批签名查看批处理对象的历史记录,以确定批处理对象的执行情况以及更新批执行结果,所述批执行子模块用以回调批声明模块的业务入口子模块以对批处理对象执行业务逻辑。
[0084] 对于基础批,批控制子模块通过批签名,查看历史记录,决定批是否可以执行,并统一捕捉异常,更新批执行结果,再通过批执行子模块回调声明批的业务入口,执行业务逻辑。
[0085] 所述分组批处理模块包括一批列表子模块,批列表子模块用以分解接收的分组批为若干个单位批处理对象,并且生成一批列表,根据批列表中批处理对象的排列次序回调批声明模块,以逐一确认该分组批所包括的所有单位批处理对象的执行逻辑。
[0086] 例如,所述批列表子模块可以通过xml配置具体批列表内容引用,列表内容可以是基础批,分组批,分页批的组合,因为列表里的也是批,所以会回调批声明,决定单个批的执行逻辑。
[0087] 所述分页批处理模块包括一count子模块,一页列表子模块、一页调用子模块。
[0088] 所述count子模块用以回调批声明模块的业务入口子模块,获取批处理对象批次处理的数据量,所述页列表子模块用以根据获取的批次处理的数据量和批签名的每页数据量,生成批处理对象的总页数,所述页调用子模块则用以根据批签名的页并发数N,循环调用批声明模块的业务入口子模块,以对批处理对象执行业务逻辑,具体的执行过程包括:
[0089] 根据批签名的页并发数N,循环每次查出N页未执行或者执行失败的页,并生成每页的起始行和结束行,并发执行。处理异常时,回滚该N页,并设置该N页执行失败,并向上抛出,否则,更新该N页为已执行。
[0090] 分页执行通常在数据量大时用到,在本发明提及的批处理框架基础上,对于一分页批,首先count一下该批次的数据量,然后根据数据量和批签名的每页处理数和页并发数,生成页列表保存,然后循环页列表里未执行或执行失败的页,生成需要执行的数据区间,并执行提交,解决了大事务和续批时还原点问题。
[0091] 考虑到批处理框架的高度集成性,我们可以将批入口子模块集成至基础批处理模块中。
[0092] 在前述批处理方法和批处理系统的基础上,本发明提出了其中一部分批处理的代码设计。
[0093] 一、基础批
[0094] 所述基础批的批处理代码包括:
[0095]
[0096]
[0097] 二、分页批
[0098] 所述分页批的批处理代码包括:
[0099]
[0100] 三、分组批
[0101] 所述分组批的批处理代码包括:
[0102]
[0103]
[0104] 下面以一次执行奖励计算为例,对该基于声明的批处理系统的工作原理做具体阐述。
[0105] 声明类:具体内容如下
[0106]
[0107] 具体的,步骤(1)声明了一个批,并指定该批继承分页批,来使用分页批的公共功能模块,步骤(2)指定了需要调用的业务实现类,步骤(3)分页批回调count方法,生成页列表,(4)分页批回调业务逻辑方法,具体实现由2指定的业务实现完成,(5)根据静态的批类型/每页数据量/页并发数等,和动态的批次号,来生成当前调用的唯一签名,供批执行控制和批的上下文使用。
[0108] 从而,本发明提及一种基于声明的批处理方法和系统,通过批签名和继承的关系,声明批处理对象的调用链和唯一签名,指定其所属类别,根据不同的类别调用对应的批处理模块后,引入具体的业务实现类以完成对批处理对象的执行逻辑,本发明避免了复杂的逻辑配置、组装调用灵活、实现了批处理和业务处理的解耦合,对于批异常,能够自动处理,实现断点恢复。
[0109] 虽然本发明已以较佳实施例揭露如上,然其并非用以限定本发明。本发明所属技术领域中具有通常知识者,在不脱离本发明的精神和范围内,当可作各种的更动与润饰。因此,本发明的保护范围当视权利要求书所界定者为准。