发明内容
针对上述技术问题,本发明的目的之一在于提供一种流程引擎事务处理方法,其能够使系统稳定性增强,降低数据库操作时长。
本发明的目的之二在于提供一种流程引擎事务处理装置,其用于实现本发明的目的之一。
为实现本发明的目的之一,采用如下技术方案:
流程引擎事务处理方法,包括如下步骤:
步骤A:接收数据请求,对符合预设条件的数据请求生成相应的唯一编码,并将该数据请求保存至数据库中;
步骤B:根据该数据请求中的执行特性将该数据请求分配至相应的流程节点;对数据请求进行相应的动作标示以生成操作事务,将该操作事务保存至数据库中,并开启数据库事务,将该操作事务提交至数据库;
步骤C:数据库触发该操作事务,发送通知至流程节点所对应的用户,以使用户对数据请求进行处理。
优选的,步骤A具体包括如下子步骤:
步骤a1:接收数据请求,判断该数据请求是否符合预设条件,若是,执行步骤a2,否则,将该数据请求退回至提出数据请求的发起方;
步骤a2:将该数据请求生成相应的唯一编码,并将该数据请求保存至数据库中。
优选的,所述动作标示包括新增、修改和删除。
为实现本发明的目的之二,采用如下技术方案:
流程引擎事务处理装置,包括如下单元:
接收单元:用于接收数据请求,对符合预设条件的数据请求生成相应的唯一编码,并将该数据请求保存至数据库中;
分配单元:用于根据该数据请求中的执行特性将该数据请求分配至相应的流程节点;对数据请求进行相应的动作标示以生成操作事务,将该操作事务保存至数据库中,并开启数据库事务,将该操作事务提交至数据库;
触发单元:用于数据库触发该操作事务,发送通知至流程节点所对应的用户,以使用户对数据请求进行处理。
优选的,所述接收单元具体包括如下模块:
判断模块:用于接收数据请求,判断该数据请求是否符合预设条件,若是,执行生成模块,否则,将该数据请求退回至提出数据请求的发起方;
生成模块:用于将该数据请求生成相应的唯一编码,并将该数据请求保存至数据库中。
优选的,所述动作标示包括新增、修改和删除。
相比现有技术,本发明的有益效果在于:
本发明将数据请求的流程处理分成三个阶段分别执行,延迟开启数据库事务的时间,从而缩短了数据库操作事务的时长,增强了系统的稳定性。
具体实施方式
下面,结合附图以及具体实施方式,对本发明做进一步描述:
流程引擎作为应用系统的一部分,并为之提供对各应用系统有决定作用的、并根据角色、分工和条件的不同信息传递路由、内容等级等核心解决方案。工作流引擎包括了流程的节点里、流向管理、时限管理等重要功能,是系统中业务实现的强大逻辑层。事务是数据库运行中的一个逻辑工作单位,由DBMS中的事务管理子系统负责事务的处理,其具有以下特性:原子性,一个事务中所以对数据库的操作是一个不可分割的操作序列,要么全做,要么不做;一致性,数据不会因为事务的执行而遭到破坏;隔离性,一个事务的执行,不受其他事务(进程)的干扰,即并发执行的每个事务之间互不干扰;持久性,一个事务一旦提交,它对数据库的改变讲师永久的。在对数据库进行相关操作时,数据库可能会对数据进行相关的锁操作,锁的类型有三种:共享锁,多个事务可封锁一个共享页,任何事务都不能修改该页,通常是该页被读取完毕,共享锁立即被释放;排它锁,仅允许一个事务封锁此页,其他任何事务必须等到排它锁被释放才能对该页进行访问,排它锁一直到事务结束才能被释放;更新锁,用来预定要对此页施加排它锁,允许其他事务读,但不允许再施加更新锁或排它锁,当被读取的页将被更新时,则升级为排它锁,更新锁一直到事务结束才能被释放。
参见图1,本发明提供一种流程引擎事务处理方法,通过对长事务的拆分,分为业务处理阶段、流程处理阶段、处理事件触发阶段,事务一分为三,将事务缩短,同时引擎实现自身的数据完成性控制机制,保证三阶段处理的数据完整性,具体包括如下步骤:
步骤S1:接收数据请求,对符合预设条件的数据请求生成相应的唯一编码,并将该数据请求保存至数据库中;步骤S1属于业务处理阶段,将本次数据请求进行保存,该保存包括缓存,用于后续阶段失败时该数据请求还原操作使用。在数据库都持久化了每个数据请求的唯一编码,使得数据不会因并发导致还原错误。
对于步骤S1,可具体分为如下步骤:
步骤a1:接收数据请求,判断该数据请求是否符合预设条件,若是,执行步骤a2,否则,将该数据请求退回至提出数据请求的发起方;发起方提出数据请求,系统接到数据请求之后进行判断是否符合预设条件;
步骤a2:将该数据请求生成相应的唯一编码,并将该数据请求保存至数据库中。通过生成唯一编码,让系统可以快速判断并避免同时操作同一流程。
步骤S2:根据该数据请求中的执行特性将该数据请求分配至相应的流程节点;对数据请求进行相应的动作标示以生成操作事务,将该操作事务保存至数据库中,并开启数据库事务,将该操作事务提交至数据库;
本步骤属于流程处理阶段,将数据边处理,边增量加入流程数据容器,待流程处理全部完成,一次性提交差异数据到数据库,并将差异信息记录用于数据还原使用。
动作标示包括新增、修改和删除。例如,发起方发了一个数据请求,例如,发起方申请请假,包括了执行特性,如请假一天,发出一个第一请假流程,则该动作标示为新增,之后该发起方对该请假的执行特性进行修改,更别为请假两天,则该请求数据的动作标示为修改。通过动作标示可标示出流程正在处理中,当缓存判断通过后再判断流程是否正在处理,达到二次判断,加强准确性。
在本步骤中才开启数据库事务,因而目前为止数据库事务为将操作事务提交。需要注意的是,即使不开启数据库事务,也可以将数据保存是数据库中。
步骤S3:数据库触发该操作事务,发送通知至流程节点所对应的用户,以使用户对数据请求进行处理。
本步骤属于处理事件触发阶段,数据库针对操作事务进行相关的操作处理。
一般的处理方式都是数据提交给流程引擎,流程引擎开启数据库事务,处理整个处理过程,包括业务逻辑处理的数据查询准备,逻辑的判断处理,处理结果的保存,流程的推动,其他相关接口的调用。这个过程是相当长的。有时会达到10秒甚至更长。而数据库事务开启时间达到10秒,对数据库的处理和并发控制是有压力的,很容易出现数据库死锁,或是数据库连接池连接不够用,导致整个系统停止响应的重大系统故障。
下面,通过一个请假流程进行对比说明:
传统的流程处理方式如下:
员工提交请假单给系统,系统接收数据后直接开启数据库事务(事务t1),查询该申请人是否有剩余年假步骤a1耗时300ms),如果有剩余年假则允许申请,系统创建请假单并保存到数据库(步骤a2耗时500ms),再判断员工请假天数,如果请假1天,就将流程推动到“主管审核”(步骤a3耗时500ms)。单据现在已经到达主管处等待领导审核。系统查询数据库,组织好短信内容,将短信存入数据库(步骤a4耗时200ms)。之后,提交数据库事务(事务t1),流程处理结束。
以上整个过程都在一个事务内完成,事务t1耗时,t1=a1+a2+a3+a4=300ms+500ms+500ms+200ms=1500ms。
本发明的流程处理方式如下:
员工提交请假单给系统(员工通过系统提交请假单,员工提交请假单的端口定义为发起方,提交请假单事件为数据请求),系统接收数据请求后,不开启数据库事务的前提下,进行第一阶段“业务逻辑处理”。先是要查询该申请人是否有剩余年假(是否有剩余年假即是是否符合预设条件,在本案例中,有年假才可以申请年假,则有足够的年假即为预设条件),本步骤b1耗时300ms,如果有剩余年假则允许申请,系统生成唯一编码,创建申请单将唯一编码一并写入请假单(也就是将唯一编码和数据请求一起一并保存),保存到数据库(步骤b2耗时500ms),系统内存记录操作日志。供异常发生时数据可按唯一编码回退还原。此时,业务数据处理完毕,进入第二阶段“流程处理阶段”。请假单由流程引擎核心判断员工请假天数(本案例的请假天数则是工作流程中所述的执行特性),如果请假1天,就将流程推动到“主管审核”,如果大于一天则推动至“经理审核”(主管审核和经理审核都是流程节点,对应执行特性的不同,分配至不同的流程节点),本步骤b3耗时500ms,此时,流程的数据已经形成,并在每条数据上标示了“新增”、“修改”、“删除”的数据库操作的标示动作,根据这些标示动作,可以生成操作日志,操作日志生成后,流程引擎通过API打开数据库事务(事务s1),将每条数据请求根据操作的动作标示,来实际操作数据库将数据保存,并将日志数据也保存到数据库(步骤b4耗时100ms)。提交事务s1之后,流程进入第三阶段“事件触发阶段”。系统触发清单单进入“主管审核”环节的事件,该事件被定义为发送短信动作,也就是说,系统中有请假单派给主管,就要发短信通知主管。此时系统是这么做的,系统查询数据库组织好短信内容(步骤b5耗时100ms),开启事务(s2)将短信存入数据库(b6耗时100ms)提交事务s2,流程处理结束。在每一个流程阶段都分别对数据请求进行保存,以便后续还原。
以上处理过程,系统一共开启了2个事务,时长分别为:
s1=b4=100ms,s2=b6=100ms。
同样的请假处理流程,传统的流程处理方式,将形成长事务系统隐患,1500ms只是假设时间,但例子的数据假设口径都是一致的。因此,时间耗时比较长短,是有指导意义的。优化后的事务处理比传统处理方式事务时长更短。从处理机制上也可以看出,当业务复杂越高传统处理方式的事务处理将越长,而改进后的处理方式将不会随业务复杂度的提高,事务处理时长增加。改进后的事务处理时长基本是稳定在一个固定的时间区间内。从而使系统更加稳定。
另一方面,本发明还提供一种流程引擎事务处理装置,其包括接收单元:用于接收数据请求,对符合预设条件的数据请求生成相应的唯一编码,并将该数据请求保存至数据库中;
分配单元:用于根据该数据请求中的执行特性将该数据请求分配至相应的流程节点;对数据请求进行相应的动作标示以生成操作事务,将该操作事务保存至数据库中,并开启数据库事务,将该操作事务提交至数据库;
触发单元:用于数据库触发该操作事务,发送通知至流程节点所对应的用户,以使用户对数据请求进行处理。
其中,接收单元具体包括如下模块:
判断模块:用于接收数据请求,判断该数据请求是否符合预设条件,若是,执行生成模块,否则,将该数据请求退回至提出数据请求的发起方;
生成模块:用于将该数据请求生成相应的唯一编码,并将该数据请求保存至数据库中。
对本领域的技术人员来说,可根据以上描述的技术方案以及构思,做出其它各种相应的改变以及形变,而所有的这些改变以及形变都应该属于本发明权利要求的保护范围之内。