一种持久化实例对象的处理方法及装置.pdf

上传人:b*** 文档编号:1627281 上传时间:2018-06-30 格式:PDF 页数:14 大小:1.90MB
返回 下载 相关 举报
摘要
申请专利号:

CN201410613369.X

申请日:

2014.11.04

公开号:

CN104376054A

公开日:

2015.02.25

当前法律状态:

授权

有效性:

有权

法律详情:

授权|||实质审查的生效IPC(主分类):G06F 17/30申请日:20141104|||公开

IPC分类号:

G06F17/30; G06F9/44

主分类号:

G06F17/30

申请人:

东软集团股份有限公司

发明人:

赵振国

地址:

110179辽宁省沈阳市浑南新区新秀街2号

优先权:

专利代理机构:

北京集佳知识产权代理有限公司11227

代理人:

王宝筠

PDF下载: PDF下载
内容摘要

本发明实施例公开了一种持久化实例对象的处理方法,所述方法包括:获取持久化实例对象,将所述持久化实例对象放在线程中;标注所述持久化实例对象的持久化状态;当流程引擎需要对所述持久化实例对象进行操作时,从线程中提取所述持久化实例对象进行操作,操作完毕后重新放入线程中,并根据所述操作内容更改所述持久化状态;当流程引擎对所述持久化实例对象操作结束时,根据所述持久化实例对象当前的持久化状态生成SQL语句;向数据库提交所述SQL语句。本发明实施例还提供了一种持久化实例对象的处理装置。本发明减小了数据库的访问压力,提高了数据库的处理性能,同时也提高了持久化实例对象的处理效率。

权利要求书

权利要求书
1.  一种持久化实例对象的处理方法,其特征在于,所述方法包括:
获取持久化实例对象,将所述持久化实例对象放在线程中;
标注所述持久化实例对象的持久化状态;
当流程引擎需要对所述持久化实例对象进行操作时,从线程中提取所述持久化实例对象进行操作,操作完毕后重新放入线程中,并根据所述操作内容更改所述持久化状态;
当流程引擎对所述持久化实例对象操作结束时,根据所述持久化实例对象当前的持久化状态生成SQL语句;
向数据库提交所述SQL语句。

2.  根据权利要求1所述的持久化实例对象的处理方法,其特征在于,当获取的所述持久化实例对象未存储于数据库中,则标注所述持久化实例对象的持久化状态为“INSERT”;
当流程引擎对所述持久化实例对象进行的操作为更新时,则所述持久化状态更改为“INSERT”;
当流程引擎对所述持久化实例对象进行的操作为删除时,则删除所述持久化实例对象和所述持久化状态。

3.  根据权利要求1所述的持久化实例对象的处理方法,其特征在于,当获取的所述持久化实例对象存储于数据中,则标注所述持久化实例对象的持久化状态为“SELECT”;
当流程引擎对所述持久化实例对象进行的操作为更新时,则所述持久化状态更改为“UPDATE”;
当流程引擎对所述持久化实例对象进行的操作为删除时,则所述持久化状态更改为“DELETE”。

4.  根据权利要求1所述的持久化实例对象的处理方法,其特征在于,在所述向数据库提交所述SQL语句步骤之前,所述方法还包括:
开启数据库事务;
在所述向数据库提交所述SQL语句步骤之后,所述方法还包括:
提交数据库事务。

5.  根据权利要求1所述的持久化实例对象的处理方法,其特征在于, 在所述向数据库提交所述SQL语句之前,所述方法还包括:
按照所述SQL语句对应的数据库优先级由高到低的顺序对所述SQL语句进行排序。

6.  一种持久化实例对象的处理装置,其特征在于,所述装置包括:获取单元、标注单元、处理单元、生成单元和语句提交单元;
其中,所述获取单元与所述标注单元连接,所述标注单元与所述处理单元连接,所述处理单元与所述生成单元连接,所述生成单元与所述语句提交单元连接;
所述获取单元,用于获取持久化实例对象,将所述持久化实例对象放在线程中;
所述标注单元,用于标注所述持久化实例对象的持久化状态;
所述处理单元,用于当流程引擎需要对所述持久化实例对象进行操作时,从线程中提取所述持久化实例对象进行操作,操作完毕后重新放入线程中,并根据所述操作内容更改所述持久化状态;
所述生成单元,用于当流程引擎对所述持久化实例对象操作结束时,根据所述持久化实例对象当前的持久化状态生成SQL语句;
所述语句提交单元,用于向数据库提交所述SQL语句。

7.  根据权利要求6所述的持久化实例对象的处理装置,其特征在于,所述装置还包括:事务开启单元和事务提交单元;
其中,所述生成单元与所述事务开启单元连接,所述事务开启单元与所述语句提交单元连接,所述语句提交单元与所述事务提交单元连接;
所述事务开启单元,用于开启数据库事务;
所述事务提交单元,用于提交数据库事务。

8.  根据权利要求6所述的持久化实例对象的处理装置,其特征在于,所述装置还包括:排序单元,连接于所述生成单元和所述语句提交单元之间,用于按照所述SQL语句对应的数据库优先级由高到低的顺序对所述SQL语句进行排序。

说明书

说明书一种持久化实例对象的处理方法及装置
技术领域
本发明涉及计算机领域,尤其涉及一种持久化实例对象的处理方法及装置。
背景技术
随着企业信息化的快速发展,业务流程管理(Business Process Management,简称BPM)在信息化过程中的作用越来越突出。流程引擎是一种计算机化的标识模型,是能够完全或者部分自动执行经营过程的有限状态机,其作用是根据一系列过程规则,文档、信息或任务在不同的执行者之间进行传递与执行。
流程引擎内部存在三种实例对象:流程实例、节点实例和工作项实例,流程引擎根据状态转移图以及相关冲突机制对这三种对象的状态做多次修改,最终使流程状态达到一个相对稳定的状态。
现有技术在修改实例对象时首先开启数据库事务获取持久化实例对象,所谓“持久化”是相对于“非持久化”而言,对于缓存中的数据,其属性是非持久化的;而对于数据库的数据,其属性则是持久化的,也就是说,如果不是主动删除,持久化的数据是不会自动消失的,而非持久化的数据在一段时间后会自动删除。
在获取了持久化实例对象后,流程引擎需要修改数据库中所述持久化实例对象的状态时,流程引擎根据修改的内容生成对应的SQL语句并提交给数据库。当流程引擎对所述持久化实例对象操作完毕,则提交数据库事务,以执行这些SQL语句,完成对数据库中持久化实例对象的状态的修改。
其中,事务(Transaction)是并发控制的基本单位,事务定义了一个工作单元范围,在这个工作单元内可对资源进行一系列操作,这些操作要么都执行,要么都不执行。事务应该具有四个特性:原子性、一致性、隔离性、持续性,这四个特性通常称为事务的ACID特性。SQL是指结构化查询语言,即一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统。
现有技术中,每次流程引擎修改实例对象时都要生成对应的SQL语句并提交给数据库,由于SQL语句数量众多,导致数据库系统压力繁重,严重降低了数据库的性能,导致流程引擎操作效率低下。
发明内容
为了解决现有技术的上述技术问题,本发明实施例提供一种持久化实例对象的处理方法及装置,减小了数据库的访问压力,提高了数据库的处理性能,同时也提高了持久化实例对象的处理效率。
本发明实施例提供了一种持久化实例对象的处理方法,所述方法包括:
获取持久化实例对象,将所述持久化实例对象放在线程中;
标注所述持久化实例对象的持久化状态;
当流程引擎需要对所述持久化实例对象进行操作时,从线程中提取所述持久化实例对象进行操作,操作完毕后重新放入线程中,并根据所述操作内容更改所述持久化状态;
当流程引擎对所述持久化实例对象操作结束时,根据所述持久化实例对象当前的持久化状态生成SQL语句;
向数据库提交所述SQL语句。
优选的,当获取的所述持久化实例对象未存储于数据库中,则标注所述持久化实例对象的持久化状态为“INSERT”;
当流程引擎对所述持久化实例对象进行的操作为更新时,则所述持久化状态更改为“INSERT”;
当流程引擎对所述持久化实例对象进行的操作为删除时,则删除所述持久化实例对象和所述持久化状态。
优选的,当获取的所述持久化实例对象存储于数据中,则标注所述持久化实例对象的持久化状态为“SELECT”;
当流程引擎对所述持久化实例对象进行的操作为更新时,则所述持久化状态更改为“UPDATE”;
当流程引擎对所述持久化实例对象进行的操作为删除时,则所述持久化状态更改为“DELETE”。
优选的,在所述向数据库提交所述SQL语句步骤之前,所述方法还包 括:
开启数据库事务;
在所述向数据库提交所述SQL语句步骤之后,所述方法还包括:
提交数据库事务。
优选的,在所述向数据库提交所述SQL语句之前,所述方法还包括:
按照所述SQL语句对应的数据库优先级由高到低的顺序对所述SQL语句进行排序。
本发明实施例还提供了一种持久化实例对象的处理装置,所述装置包括:获取单元、标注单元、处理单元、生成单元和语句提交单元;
其中,所述获取单元与所述标注单元连接,所述标注单元与所述处理单元连接,所述处理单元与所述生成单元连接,所述生成单元与所述语句提交单元连接;
所述获取单元,用于获取持久化实例对象,将所述持久化实例对象放在线程中;
所述标注单元,用于标注所述持久化实例对象的持久化状态;
所述处理单元,用于当流程引擎需要对所述持久化实例对象进行操作时,从线程中提取所述持久化实例对象进行操作,操作完毕后重新放入线程中,并根据所述操作内容更改所述持久化状态;
所述生成单元,用于当流程引擎对所述持久化实例对象操作结束时,根据所述持久化实例对象当前的持久化状态生成SQL语句;
所述语句提交单元,用于向数据库提交所述SQL语句。
优选的,所述装置还包括:事务开启单元和事务提交单元;
其中,所述生成单元与所述事务开启单元连接,所述事务开启单元与所述语句提交单元连接,所述语句提交单元与所述事务提交单元连接;
所述事务开启单元,用于开启数据库事务;
所述事务提交单元,用于提交数据库事务。
优选的,所述装置还包括:排序单元,连接于所述生成单元和所述语句提交单元之间,用于按照所述SQL语句对应的数据库优先级由高到低的顺序对所述SQL语句进行排序。
与现有技术相比,本发明具有以下优点:
本发明提供的持久化实例对象的处理方法及装置仅仅在线程中更改持久化实例对象以及持久化状态,在流程引擎对所述持久化实例对象进行操作时不需要数据库的参与,当流程引擎对所述持久化实例对象操作结束后,根据其当前的持久化实例对象生成SQL语句,因此,每个持久化实例对象至多生成一条SQL语句。相对于现有技术而言,由于本实施提供的持久化实例对象的处理方法精简了SQL语句,所以减小了数据库的访问压力,提高了数据库的处理性能,同时也提高了持久化实例对象的处理效率。
附图说明
为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请中记载的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其它的附图。
图1为本发明提供的一种持久化实例对象的处理方法实施例一的流程图;
图2为本发明提供的一种持久化实例对象的处理方法实施例二的流程图;
图3为本发明提供的一种持久化实例对象的处理装置实施例一的结构框图;
图4为本发明提供的一种持久化实例对象的处理装置实施例二的结构框图。
具体实施方式
为了使本技术领域的人员更好地理解本发明方案,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
方法实施例一:
参见图1,该图为本发明提供的一种持久化实例对象的处理方法实施例一流程图。
本实施例提供的持久化实例对象的处理方法包括如下步骤:
S101:获取持久化实例对象,并将所述持久化实例对象放在线程中。
由于线程具有缓存周期短的特点,一次业务逻辑执行完毕后就会清除,不会长期占有内存,也不会产生内存溢出的问题,因此,将持久化实例对象放在线程中可以提高持久化实例对象的处理效率。
S102:标注所述持久化实例对象的持久化状态。
按照事先是否存在于数据库中,所述持久化实例对象包括两种:新产生的持久化实例对象,即事先未存在于数据库中,和事先已存在于数据库中的持久化实例对象。
对于新产生的持久化实例对象,直接放到线程中,并将所述持久化状态标注为“INSERT”,其含义为“插入”;对于事先已经存在于数据库中的持久化实例对象,从数据库中进行查询,然后放到线程中,并将其持久化状态标记为“SELECT”,其含义为“选取”。
S103:当流程引擎需要对所述持久化实例对象进行操作时,从线程中提取所述持久化实例对象进行操作,操作完毕后重新放入线程中,并根据所述操作内容更改所述持久化状态。
对于新产生的持久化实例对象,当流程引擎对其的操作是更新时,流程引擎从线程中提取所述持久化实例对象进行更新,更新操作完成后,将更新后的持久化实例对象重新放入线程中,并且将所述持久化状态更改为“INSERT”,或者也可以理解为保持“INSERT”状态不变;当流程引擎对所述新产生的持久化实例对象的操作是删除时,流程引擎从线程中提取所述持久化实例,连同其持久化状态一起删除,因此在步骤S104中是不需要生成SQL语句的。
对于事先存在于数据库中的持久化实例对象,当流程引擎对其的操作是更新时,流程引擎从线程中提取所述持久化实例对象进行更新,更新操作完成后,将更新后的持久化实例对象重新放入线程中,并将所述持久化对象更改为“UPDATE”;当流程引擎对所述新产生的持久化实例对象的操 作是删除时,流程引擎从线程中提取所述持久化实例对象进行删除,并将其持久化状态更改为“DELETE”。
S104:当流程引擎对所述持久化实例对象操作结束时,根据所述持久化实例对象当前的持久化状态生成SQL语句。
S105:向数据库提交所述SQL语句。
现有技术中,流程引擎每次对持久化实例对象进行操作,都会相应生成一条SQL语句,并向数据库进行提交,而由于事务的原子性,事务中的所有操作要么都执行,要么都不执行,因此对于同一个持久化实例对象,最后生成的SQL语句才是有效的。由于在实际应用中流程引擎往往需要对同一持久化对象大量的进行操作,所以现有技术这种流程引擎的操作方法给数据库造成很大的访问压力,降低了数据库的处理性能,同时也降低了持久化实例对象的处理效率。
本实施例提供的持久化实例对象的处理方法仅仅在线程中更改持久化实例对象以及持久化状态,在流程引擎对所述持久化实例对象进行操作时不需要数据库的参与,当流程引擎对所述持久化实例对象操作结束后,根据其当前的持久化实例对象生成SQL语句,因此,每个持久化实例对象至多生成一条SQL语句。相对于现有技术而言,由于本实施提供的持久化实例对象的处理方法精简了SQL语句,所以减小了数据库的访问压力,提高了数据库的处理性能,同时也提高了持久化实例对象的处理效率。
举例而言,当流程引擎获取的持久化实例对象为事先存储于数据库中的持久化实例对象时,假设流程引擎对其进行了三次操作,这三次操作分别为:更新、更新和删除。现有技术中会产生三句SQL语句,数据库也会对应进行三次更改操作,其中,第一次更改结果会被第二次更改结果所覆盖,而第二次更改结果会在第三次操作中被删除,因此,虽然删除该持久化实例对象才是最终结果,前两次的更改操作依然需要被执行。
而根据本实施例提供的方案,当流程引擎获取到实现存储于数据库中的持久化实例对象后,标注所述持久化实例对象的持久化状态“SELECT”。当流程引擎对所述持久化实例对象进行第一次和第二次更新时,其持久化状态更改为“UPDATE”,并且仅更新线程中的持久化实例对象。当流程引 擎对所述持久化实例对象进行删除操作时,其持久化状态更改为“DELETE”,并根据该持久化状态生成SQL语句。对于数据库而言,在接收到所述SQL语句后,直接对对应的持久化实例对象进行删除,而无需进行更新操作,起到精简SQL语句的效果。
方法实施例二:
参见图2,该图为本发明提供的一种持久化实例对象的处理方法实施例二流程图。
本实施例提供的持久化实例对象的处理方法包括如下步骤:
S201:获取持久化实例对象,将所述持久化实例对象放在线程中。
S202:标注所述持久化实例对象的持久化状态。
S203:当流程引擎需要对所述持久化实例对象进行操作时,从线程中提取所述持久化实例对象进行操作,操作完毕后重新放入线程中,并根据所述操作内容更改所述持久化状态。
S204:当流程引擎对所述持久化实例对象操作结束时,根据所述持久化实例对象当前的持久化状态生成SQL语句。
S205:按照所述SQL语句对应的数据库优先级由高到低的顺序对所述SQL语句进行排序。
在实际应用中,流程引擎会进行很多操作,例如流程发起、节点发起、流程回退、流程挂起等,而每个操作都可能会针对对多个数据库表,在并发情况下,由于各个操作访问数据库表的顺序不同,就有可能在提交SQL语句的时产生数据库死锁,并发量越大,产生死锁的几率越大。
举例而言,假设有两个数据库表A和B,同时有两个线程甲、乙对这两张表进行SQL语句提交操作,但是顺序不同。甲线程先对A表执行了提交(锁定了A表),乙线程先对B表执行了提交(锁定了B表),当甲线程提交完A表后继续提交B表时发现B表已经被乙线程锁定了,甲线程只能等待乙线程释放对B表的锁定才能继续执行;同理乙线程继续对A表进行提交时,发现A表被甲线程锁定了,乙线程只能等待甲线程释放对A表的锁才能继续执行,这样就导致甲乙两个线程都在等待对方释放已经占有的锁资源,最终都不能向下执行,从而造成死锁。
在本实施例中,对每个线程都按照所述SQL语句对应的数据库优先级由高到低的顺序对所述SQL语句进行排序,保证所有线程都按照固定的顺序提交数据库表,这样就可以有效避免无序带来的数据库死锁问题。
以上述例子为例,在本实施例中,假设甲线程有a、b、c三个SQL语句,其中a、b对应A表,c对应B表;乙线程有d、e、f、g四个SQL语句,其中,d、e对应B表,f、g对应A表。假设A表优先级高于B表,那么甲线程和乙线程对A表和B表的执行顺序均为先执行A表的SQL语句,后执行B表的SQL语句。如果甲线程比乙线程先执行A表,那么乙线程就会等待,直到甲线程将A表和B表的所有SQL语句都执行成功,乙线程才会顺序执行A表和B表。
当然,对于同一个表内的SQL语句也可以根据优先级进行排序,例如甲线程针对数据库表A的SQL语句a和b的优先级分别为80和100,那么就先执行b语句,后执行a语句。参见下表,表1为未经排序的SQL语句,表2为排序后的SQL语句。
表1 未经排序的SQL语句

表2 排序后的SQL语句


S206:开启数据库事务。
现有技术中在开启数据库事务时获取持久化实例对象,当所有SQL语句提交后提交数据库事务,因此,整个持久化实例对象的处理流程都需要占用数据库内存。对于高并发、大业务量的BPM系统,数据库资源是紧缺资源,如果长时间占用数据库内存,则会严重影响数据库的访问性能。另外,通常情况下,应用服务器会保存一个数据库连接池,由于数据库连接池个数有限,长时间的数据库事务会影响数据库连接不能及时释放,占用大量的连接,严重时可能会耗尽连接,导致其他线程处于等待状态,影响访问的速度。
为了解决现有技术中由于整个持久化实例对象的处理流程都需要占用数据库内存而导致的影响数据库访问性能的技术问题,本实施例在向数据库提交SQL语句之前才开启数据库,因此,数据库事务时间仅为提交SQL语句的时间,因此大大缩减了事务的时间跨度,有效提升了数据库资源访问效率。
S207:向数据库提交所述SQL语句。
S208:提交数据库事务。
综上所述,本实施例提供的持久化实例对象的处理方法克服了现有技术中数据库死锁的问题,并且缩短了事务的时间跨度,有效提升了数据库资源访问效率。
基于以上实施例提供的一种持久化实例对象的处理方法,本发明实施例还提供了一种持久化实例对象的处理装置,下面结合附图来详细说明其工作原理。
装置实施例一:
参见图3,该图为本发明提供的一种持久化实例对象的处理装置实施例一结构框图。
本实施例提供的持久化实例对象的处理装置包括:
获取单元301、标注单元302、处理单元303、生成单元304和语句提交单元305;
其中,所述获取单元301与所述标注单元302连接,所述标注单元302与所述处理单元303连接,所述处理单元303与所述生成单元304连接,所述生成单元304与所述语句提交单元305连接;
所述获取单元301,用于获取持久化实例对象,将所述持久化实例对象放在线程中;
所述标注单元302,用于标注所述持久化实例对象的持久化状态;
所述处理单元303,用于当流程引擎需要对所述持久化实例对象进行操作时,从线程中提取所述持久化实例对象进行操作,操作完毕后重新放入线程中,并根据所述操作内容更改所述持久化状态;
所述生成单元304,用于当流程引擎对所述持久化实例对象操作结束时,根据所述持久化实例对象当前的持久化状态生成SQL语句;
所述语句提交单元305,用于向数据库提交所述SQL语句。
本实施例提供的持久化实例对象的处理装置仅仅在线程中更改持久化实例对象以及持久化状态,在流程引擎对所述持久化实例对象进行操作时不需要数据库的参与,当流程引擎对所述持久化实例对象操作结束后,根据其当前的持久化实例对象生成SQL语句,因此,每个持久化实例对象至多生成一条SQL语句。相对于现有技术而言,由于本实施提供的持久化实例对象的处理方法精简了SQL语句,所以减小了数据库的访问压力,提高了数据库的处理性能,同时也提高了持久化实例对象的处理效率。
装置实施例二:
参见图4,该图为本发明提供的一种持久化实例对象的处理装置实施例二结构框图。
在上述装置实施例一的基础上,本发明实施例提供的一种持久化实例对象的处理装置还包括:
排序单元306,连接于所述生成单元304和所述语句提交单元305之间,用于按照所述SQL语句对应的数据库优先级由高到低的顺序对所述 SQL语句进行排序。
在本实施例中,对每个线程都按照所述SQL语句对应的数据库优先级由高到低的顺序对所述SQL语句进行排序,保证所有线程都按照固定的顺序操作数据库表,这样就可以有效避免无序带来的数据库死锁问题。
为了解决现有技术中由于整个持久化实例对象的处理流程都需要占用数据库内存而导致的影响数据库访问性能的技术问题,在本实施例中,所述装置还包括:
事务开启单元307和事务提交单元308;
其中,所述排序单元306与所述事务开启单元307连接,所述事务开启单元307与所述语句提交单元305连接,所述语句提交单元305与所述事务提交单元308连接;
所述事务开启单元307,用于开启数据库事务;
所述事务提交单元308,用于提交数据库事务。
本实施例在向数据库提交SQL语句之前才开启数据库,因此,数据库事务时间仅为提交SQL语句的时间,因此大大缩减了事务的时间跨度,有效提升了数据库资源访问效率。
本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于装置实施例而言,由于其基本相似于方法实施例,所以描述得比较简单,相关之处参见方法实施例的部分说明即可。以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元及模块可以是或者也可以不是物理上分开的。另外,还可以根据实际的需要选择其中的部分或者全部单元和模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。
以上所述仅是本发明的具体实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。

一种持久化实例对象的处理方法及装置.pdf_第1页
第1页 / 共14页
一种持久化实例对象的处理方法及装置.pdf_第2页
第2页 / 共14页
一种持久化实例对象的处理方法及装置.pdf_第3页
第3页 / 共14页
点击查看更多>>
资源描述

《一种持久化实例对象的处理方法及装置.pdf》由会员分享,可在线阅读,更多相关《一种持久化实例对象的处理方法及装置.pdf(14页珍藏版)》请在专利查询网上搜索。

1、(10)申请公布号 (43)申请公布日 (21)申请号 201410613369.X(22)申请日 2014.11.04G06F 17/30(2006.01)G06F 9/44(2006.01)(71)申请人东软集团股份有限公司地址 110179 辽宁省沈阳市浑南新区新秀街2号(72)发明人赵振国(74)专利代理机构北京集佳知识产权代理有限公司 11227代理人王宝筠(54) 发明名称一种持久化实例对象的处理方法及装置(57) 摘要本发明实施例公开了一种持久化实例对象的处理方法,所述方法包括:获取持久化实例对象,将所述持久化实例对象放在线程中;标注所述持久化实例对象的持久化状态;当流程引擎需要。

2、对所述持久化实例对象进行操作时,从线程中提取所述持久化实例对象进行操作,操作完毕后重新放入线程中,并根据所述操作内容更改所述持久化状态;当流程引擎对所述持久化实例对象操作结束时,根据所述持久化实例对象当前的持久化状态生成SQL语句;向数据库提交所述SQL语句。本发明实施例还提供了一种持久化实例对象的处理装置。本发明减小了数据库的访问压力,提高了数据库的处理性能,同时也提高了持久化实例对象的处理效率。(51)Int.Cl.(19)中华人民共和国国家知识产权局(12)发明专利申请权利要求书2页 说明书8页 附图3页(10)申请公布号 CN 104376054 A(43)申请公布日 2015.02.。

3、25CN 104376054 A1/2页21.一种持久化实例对象的处理方法,其特征在于,所述方法包括:获取持久化实例对象,将所述持久化实例对象放在线程中;标注所述持久化实例对象的持久化状态;当流程引擎需要对所述持久化实例对象进行操作时,从线程中提取所述持久化实例对象进行操作,操作完毕后重新放入线程中,并根据所述操作内容更改所述持久化状态;当流程引擎对所述持久化实例对象操作结束时,根据所述持久化实例对象当前的持久化状态生成SQL语句;向数据库提交所述SQL语句。2.根据权利要求1所述的持久化实例对象的处理方法,其特征在于,当获取的所述持久化实例对象未存储于数据库中,则标注所述持久化实例对象的持久。

4、化状态为“INSERT”;当流程引擎对所述持久化实例对象进行的操作为更新时,则所述持久化状态更改为“INSERT”;当流程引擎对所述持久化实例对象进行的操作为删除时,则删除所述持久化实例对象和所述持久化状态。3.根据权利要求1所述的持久化实例对象的处理方法,其特征在于,当获取的所述持久化实例对象存储于数据中,则标注所述持久化实例对象的持久化状态为“SELECT”;当流程引擎对所述持久化实例对象进行的操作为更新时,则所述持久化状态更改为“UPDATE”;当流程引擎对所述持久化实例对象进行的操作为删除时,则所述持久化状态更改为“DELETE”。4.根据权利要求1所述的持久化实例对象的处理方法,其特。

5、征在于,在所述向数据库提交所述SQL语句步骤之前,所述方法还包括:开启数据库事务;在所述向数据库提交所述SQL语句步骤之后,所述方法还包括:提交数据库事务。5.根据权利要求1所述的持久化实例对象的处理方法,其特征在于,在所述向数据库提交所述SQL语句之前,所述方法还包括:按照所述SQL语句对应的数据库优先级由高到低的顺序对所述SQL语句进行排序。6.一种持久化实例对象的处理装置,其特征在于,所述装置包括:获取单元、标注单元、处理单元、生成单元和语句提交单元;其中,所述获取单元与所述标注单元连接,所述标注单元与所述处理单元连接,所述处理单元与所述生成单元连接,所述生成单元与所述语句提交单元连接;。

6、所述获取单元,用于获取持久化实例对象,将所述持久化实例对象放在线程中;所述标注单元,用于标注所述持久化实例对象的持久化状态;所述处理单元,用于当流程引擎需要对所述持久化实例对象进行操作时,从线程中提取所述持久化实例对象进行操作,操作完毕后重新放入线程中,并根据所述操作内容更改所述持久化状态;所述生成单元,用于当流程引擎对所述持久化实例对象操作结束时,根据所述持久化实例对象当前的持久化状态生成SQL语句;权 利 要 求 书CN 104376054 A2/2页3所述语句提交单元,用于向数据库提交所述SQL语句。7.根据权利要求6所述的持久化实例对象的处理装置,其特征在于,所述装置还包括:事务开启单。

7、元和事务提交单元;其中,所述生成单元与所述事务开启单元连接,所述事务开启单元与所述语句提交单元连接,所述语句提交单元与所述事务提交单元连接;所述事务开启单元,用于开启数据库事务;所述事务提交单元,用于提交数据库事务。8.根据权利要求6所述的持久化实例对象的处理装置,其特征在于,所述装置还包括:排序单元,连接于所述生成单元和所述语句提交单元之间,用于按照所述SQL语句对应的数据库优先级由高到低的顺序对所述SQL语句进行排序。权 利 要 求 书CN 104376054 A1/8页4一种持久化实例对象的处理方法及装置技术领域0001 本发明涉及计算机领域,尤其涉及一种持久化实例对象的处理方法及装置。。

8、背景技术0002 随着企业信息化的快速发展,业务流程管理(Business Process Management,简称BPM)在信息化过程中的作用越来越突出。流程引擎是一种计算机化的标识模型,是能够完全或者部分自动执行经营过程的有限状态机,其作用是根据一系列过程规则,文档、信息或任务在不同的执行者之间进行传递与执行。0003 流程引擎内部存在三种实例对象:流程实例、节点实例和工作项实例,流程引擎根据状态转移图以及相关冲突机制对这三种对象的状态做多次修改,最终使流程状态达到一个相对稳定的状态。0004 现有技术在修改实例对象时首先开启数据库事务获取持久化实例对象,所谓“持久化”是相对于“非持久化。

9、”而言,对于缓存中的数据,其属性是非持久化的;而对于数据库的数据,其属性则是持久化的,也就是说,如果不是主动删除,持久化的数据是不会自动消失的,而非持久化的数据在一段时间后会自动删除。0005 在获取了持久化实例对象后,流程引擎需要修改数据库中所述持久化实例对象的状态时,流程引擎根据修改的内容生成对应的SQL语句并提交给数据库。当流程引擎对所述持久化实例对象操作完毕,则提交数据库事务,以执行这些SQL语句,完成对数据库中持久化实例对象的状态的修改。0006 其中,事务(Transaction)是并发控制的基本单位,事务定义了一个工作单元范围,在这个工作单元内可对资源进行一系列操作,这些操作要么。

10、都执行,要么都不执行。事务应该具有四个特性:原子性、一致性、隔离性、持续性,这四个特性通常称为事务的ACID特性。SQL是指结构化查询语言,即一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统。0007 现有技术中,每次流程引擎修改实例对象时都要生成对应的SQL语句并提交给数据库,由于SQL语句数量众多,导致数据库系统压力繁重,严重降低了数据库的性能,导致流程引擎操作效率低下。发明内容0008 为了解决现有技术的上述技术问题,本发明实施例提供一种持久化实例对象的处理方法及装置,减小了数据库的访问压力,提高了数据库的处理性能,同时也提高了持久化实例对象的处理效率。000。

11、9 本发明实施例提供了一种持久化实例对象的处理方法,所述方法包括:0010 获取持久化实例对象,将所述持久化实例对象放在线程中;0011 标注所述持久化实例对象的持久化状态;0012 当流程引擎需要对所述持久化实例对象进行操作时,从线程中提取所述持久化说 明 书CN 104376054 A2/8页5实例对象进行操作,操作完毕后重新放入线程中,并根据所述操作内容更改所述持久化状态;0013 当流程引擎对所述持久化实例对象操作结束时,根据所述持久化实例对象当前的持久化状态生成SQL语句;0014 向数据库提交所述SQL语句。0015 优选的,当获取的所述持久化实例对象未存储于数据库中,则标注所述持。

12、久化实例对象的持久化状态为“INSERT”;0016 当流程引擎对所述持久化实例对象进行的操作为更新时,则所述持久化状态更改为“INSERT”;0017 当流程引擎对所述持久化实例对象进行的操作为删除时,则删除所述持久化实例对象和所述持久化状态。0018 优选的,当获取的所述持久化实例对象存储于数据中,则标注所述持久化实例对象的持久化状态为“SELECT”;0019 当流程引擎对所述持久化实例对象进行的操作为更新时,则所述持久化状态更改为“UPDATE”;0020 当流程引擎对所述持久化实例对象进行的操作为删除时,则所述持久化状态更改为“DELETE”。0021 优选的,在所述向数据库提交所述。

13、SQL语句步骤之前,所述方法还包括:0022 开启数据库事务;0023 在所述向数据库提交所述SQL语句步骤之后,所述方法还包括:0024 提交数据库事务。0025 优选的,在所述向数据库提交所述SQL语句之前,所述方法还包括:0026 按照所述SQL语句对应的数据库优先级由高到低的顺序对所述SQL语句进行排序。0027 本发明实施例还提供了一种持久化实例对象的处理装置,所述装置包括:获取单元、标注单元、处理单元、生成单元和语句提交单元;0028 其中,所述获取单元与所述标注单元连接,所述标注单元与所述处理单元连接,所述处理单元与所述生成单元连接,所述生成单元与所述语句提交单元连接;0029 。

14、所述获取单元,用于获取持久化实例对象,将所述持久化实例对象放在线程中;0030 所述标注单元,用于标注所述持久化实例对象的持久化状态;0031 所述处理单元,用于当流程引擎需要对所述持久化实例对象进行操作时,从线程中提取所述持久化实例对象进行操作,操作完毕后重新放入线程中,并根据所述操作内容更改所述持久化状态;0032 所述生成单元,用于当流程引擎对所述持久化实例对象操作结束时,根据所述持久化实例对象当前的持久化状态生成SQL语句;0033 所述语句提交单元,用于向数据库提交所述SQL语句。0034 优选的,所述装置还包括:事务开启单元和事务提交单元;0035 其中,所述生成单元与所述事务开启。

15、单元连接,所述事务开启单元与所述语句提交单元连接,所述语句提交单元与所述事务提交单元连接;说 明 书CN 104376054 A3/8页60036 所述事务开启单元,用于开启数据库事务;0037 所述事务提交单元,用于提交数据库事务。0038 优选的,所述装置还包括:排序单元,连接于所述生成单元和所述语句提交单元之间,用于按照所述SQL语句对应的数据库优先级由高到低的顺序对所述SQL语句进行排序。0039 与现有技术相比,本发明具有以下优点:0040 本发明提供的持久化实例对象的处理方法及装置仅仅在线程中更改持久化实例对象以及持久化状态,在流程引擎对所述持久化实例对象进行操作时不需要数据库的参。

16、与,当流程引擎对所述持久化实例对象操作结束后,根据其当前的持久化实例对象生成SQL语句,因此,每个持久化实例对象至多生成一条SQL语句。相对于现有技术而言,由于本实施提供的持久化实例对象的处理方法精简了SQL语句,所以减小了数据库的访问压力,提高了数据库的处理性能,同时也提高了持久化实例对象的处理效率。附图说明0041 为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请中记载的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其它的附图。0042 图1为。

17、本发明提供的一种持久化实例对象的处理方法实施例一的流程图;0043 图2为本发明提供的一种持久化实例对象的处理方法实施例二的流程图;0044 图3为本发明提供的一种持久化实例对象的处理装置实施例一的结构框图;0045 图4为本发明提供的一种持久化实例对象的处理装置实施例二的结构框图。具体实施方式0046 为了使本技术领域的人员更好地理解本发明方案,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护。

18、的范围。0047 方法实施例一:0048 参见图1,该图为本发明提供的一种持久化实例对象的处理方法实施例一流程图。0049 本实施例提供的持久化实例对象的处理方法包括如下步骤:0050 S101:获取持久化实例对象,并将所述持久化实例对象放在线程中。0051 由于线程具有缓存周期短的特点,一次业务逻辑执行完毕后就会清除,不会长期占有内存,也不会产生内存溢出的问题,因此,将持久化实例对象放在线程中可以提高持久化实例对象的处理效率。0052 S102:标注所述持久化实例对象的持久化状态。0053 按照事先是否存在于数据库中,所述持久化实例对象包括两种:新产生的持久化实例对象,即事先未存在于数据库中。

19、,和事先已存在于数据库中的持久化实例对象。0054 对于新产生的持久化实例对象,直接放到线程中,并将所述持久化状态标注为“INSERT”,其含义为“插入”;对于事先已经存在于数据库中的持久化实例对象,从数据库中说 明 书CN 104376054 A4/8页7进行查询,然后放到线程中,并将其持久化状态标记为“SELECT”,其含义为“选取”。0055 S103:当流程引擎需要对所述持久化实例对象进行操作时,从线程中提取所述持久化实例对象进行操作,操作完毕后重新放入线程中,并根据所述操作内容更改所述持久化状态。0056 对于新产生的持久化实例对象,当流程引擎对其的操作是更新时,流程引擎从线程中提取。

20、所述持久化实例对象进行更新,更新操作完成后,将更新后的持久化实例对象重新放入线程中,并且将所述持久化状态更改为“INSERT”,或者也可以理解为保持“INSERT”状态不变;当流程引擎对所述新产生的持久化实例对象的操作是删除时,流程引擎从线程中提取所述持久化实例,连同其持久化状态一起删除,因此在步骤S104中是不需要生成SQL语句的。0057 对于事先存在于数据库中的持久化实例对象,当流程引擎对其的操作是更新时,流程引擎从线程中提取所述持久化实例对象进行更新,更新操作完成后,将更新后的持久化实例对象重新放入线程中,并将所述持久化对象更改为“UPDATE”;当流程引擎对所述新产生的持久化实例对象。

21、的操作是删除时,流程引擎从线程中提取所述持久化实例对象进行删除,并将其持久化状态更改为“DELETE”。0058 S104:当流程引擎对所述持久化实例对象操作结束时,根据所述持久化实例对象当前的持久化状态生成SQL语句。0059 S105:向数据库提交所述SQL语句。0060 现有技术中,流程引擎每次对持久化实例对象进行操作,都会相应生成一条SQL语句,并向数据库进行提交,而由于事务的原子性,事务中的所有操作要么都执行,要么都不执行,因此对于同一个持久化实例对象,最后生成的SQL语句才是有效的。由于在实际应用中流程引擎往往需要对同一持久化对象大量的进行操作,所以现有技术这种流程引擎的操作方法给。

22、数据库造成很大的访问压力,降低了数据库的处理性能,同时也降低了持久化实例对象的处理效率。0061 本实施例提供的持久化实例对象的处理方法仅仅在线程中更改持久化实例对象以及持久化状态,在流程引擎对所述持久化实例对象进行操作时不需要数据库的参与,当流程引擎对所述持久化实例对象操作结束后,根据其当前的持久化实例对象生成SQL语句,因此,每个持久化实例对象至多生成一条SQL语句。相对于现有技术而言,由于本实施提供的持久化实例对象的处理方法精简了SQL语句,所以减小了数据库的访问压力,提高了数据库的处理性能,同时也提高了持久化实例对象的处理效率。0062 举例而言,当流程引擎获取的持久化实例对象为事先存。

23、储于数据库中的持久化实例对象时,假设流程引擎对其进行了三次操作,这三次操作分别为:更新、更新和删除。现有技术中会产生三句SQL语句,数据库也会对应进行三次更改操作,其中,第一次更改结果会被第二次更改结果所覆盖,而第二次更改结果会在第三次操作中被删除,因此,虽然删除该持久化实例对象才是最终结果,前两次的更改操作依然需要被执行。0063 而根据本实施例提供的方案,当流程引擎获取到实现存储于数据库中的持久化实例对象后,标注所述持久化实例对象的持久化状态“SELECT”。当流程引擎对所述持久化实例对象进行第一次和第二次更新时,其持久化状态更改为“UPDATE”,并且仅更新线程中的持久化实例对象。当流程。

24、引擎对所述持久化实例对象进行删除操作时,其持久化状态更改说 明 书CN 104376054 A5/8页8为“DELETE”,并根据该持久化状态生成SQL语句。对于数据库而言,在接收到所述SQL语句后,直接对对应的持久化实例对象进行删除,而无需进行更新操作,起到精简SQL语句的效果。0064 方法实施例二:0065 参见图2,该图为本发明提供的一种持久化实例对象的处理方法实施例二流程图。0066 本实施例提供的持久化实例对象的处理方法包括如下步骤:0067 S201:获取持久化实例对象,将所述持久化实例对象放在线程中。0068 S202:标注所述持久化实例对象的持久化状态。0069 S203:当。

25、流程引擎需要对所述持久化实例对象进行操作时,从线程中提取所述持久化实例对象进行操作,操作完毕后重新放入线程中,并根据所述操作内容更改所述持久化状态。0070 S204:当流程引擎对所述持久化实例对象操作结束时,根据所述持久化实例对象当前的持久化状态生成SQL语句。0071 S205:按照所述SQL语句对应的数据库优先级由高到低的顺序对所述SQL语句进行排序。0072 在实际应用中,流程引擎会进行很多操作,例如流程发起、节点发起、流程回退、流程挂起等,而每个操作都可能会针对对多个数据库表,在并发情况下,由于各个操作访问数据库表的顺序不同,就有可能在提交SQL语句的时产生数据库死锁,并发量越大,产。

26、生死锁的几率越大。0073 举例而言,假设有两个数据库表A和B,同时有两个线程甲、乙对这两张表进行SQL语句提交操作,但是顺序不同。甲线程先对A表执行了提交(锁定了A表),乙线程先对B表执行了提交(锁定了B表),当甲线程提交完A表后继续提交B表时发现B表已经被乙线程锁定了,甲线程只能等待乙线程释放对B表的锁定才能继续执行;同理乙线程继续对A表进行提交时,发现A表被甲线程锁定了,乙线程只能等待甲线程释放对A表的锁才能继续执行,这样就导致甲乙两个线程都在等待对方释放已经占有的锁资源,最终都不能向下执行,从而造成死锁。0074 在本实施例中,对每个线程都按照所述SQL语句对应的数据库优先级由高到低的。

27、顺序对所述SQL语句进行排序,保证所有线程都按照固定的顺序提交数据库表,这样就可以有效避免无序带来的数据库死锁问题。0075 以上述例子为例,在本实施例中,假设甲线程有a、b、c三个SQL语句,其中a、b对应A表,c对应B表;乙线程有d、e、f、g四个SQL语句,其中,d、e对应B表,f、g对应A表。假设A表优先级高于B表,那么甲线程和乙线程对A表和B表的执行顺序均为先执行A表的SQL语句,后执行B表的SQL语句。如果甲线程比乙线程先执行A表,那么乙线程就会等待,直到甲线程将A表和B表的所有SQL语句都执行成功,乙线程才会顺序执行A表和B表。0076 当然,对于同一个表内的SQL语句也可以根据。

28、优先级进行排序,例如甲线程针对数据库表A的SQL语句a和b的优先级分别为80和100,那么就先执行b语句,后执行a语句。参见下表,表1为未经排序的SQL语句,表2为排序后的SQL语句。0077 表1 未经排序的SQL语句0078 说 明 书CN 104376054 A6/8页90079 表2 排序后的SQL语句0080 0081 0082 S206:开启数据库事务。0083 现有技术中在开启数据库事务时获取持久化实例对象,当所有SQL语句提交后提交数据库事务,因此,整个持久化实例对象的处理流程都需要占用数据库内存。对于高并发、大业务量的BPM系统,数据库资源是紧缺资源,如果长时间占用数据库内存。

29、,则会严重影响数据库的访问性能。另外,通常情况下,应用服务器会保存一个数据库连接池,由于数据库连接池个数有限,长时间的数据库事务会影响数据库连接不能及时释放,占用大量的连接,严重时可能会耗尽连接,导致其他线程处于等待状态,影响访问的速度。0084 为了解决现有技术中由于整个持久化实例对象的处理流程都需要占用数据库内存而导致的影响数据库访问性能的技术问题,本实施例在向数据库提交SQL语句之前才开启数据库,因此,数据库事务时间仅为提交SQL语句的时间,因此大大缩减了事务的时间跨度,有效提升了数据库资源访问效率。0085 S207:向数据库提交所述SQL语句。0086 S208:提交数据库事务。00。

30、87 综上所述,本实施例提供的持久化实例对象的处理方法克服了现有技术中数据库说 明 书CN 104376054 A7/8页10死锁的问题,并且缩短了事务的时间跨度,有效提升了数据库资源访问效率。0088 基于以上实施例提供的一种持久化实例对象的处理方法,本发明实施例还提供了一种持久化实例对象的处理装置,下面结合附图来详细说明其工作原理。0089 装置实施例一:0090 参见图3,该图为本发明提供的一种持久化实例对象的处理装置实施例一结构框图。0091 本实施例提供的持久化实例对象的处理装置包括:0092 获取单元301、标注单元302、处理单元303、生成单元304和语句提交单元305;009。

31、3 其中,所述获取单元301与所述标注单元302连接,所述标注单元302与所述处理单元303连接,所述处理单元303与所述生成单元304连接,所述生成单元304与所述语句提交单元305连接;0094 所述获取单元301,用于获取持久化实例对象,将所述持久化实例对象放在线程中;0095 所述标注单元302,用于标注所述持久化实例对象的持久化状态;0096 所述处理单元303,用于当流程引擎需要对所述持久化实例对象进行操作时,从线程中提取所述持久化实例对象进行操作,操作完毕后重新放入线程中,并根据所述操作内容更改所述持久化状态;0097 所述生成单元304,用于当流程引擎对所述持久化实例对象操作结。

32、束时,根据所述持久化实例对象当前的持久化状态生成SQL语句;0098 所述语句提交单元305,用于向数据库提交所述SQL语句。0099 本实施例提供的持久化实例对象的处理装置仅仅在线程中更改持久化实例对象以及持久化状态,在流程引擎对所述持久化实例对象进行操作时不需要数据库的参与,当流程引擎对所述持久化实例对象操作结束后,根据其当前的持久化实例对象生成SQL语句,因此,每个持久化实例对象至多生成一条SQL语句。相对于现有技术而言,由于本实施提供的持久化实例对象的处理方法精简了SQL语句,所以减小了数据库的访问压力,提高了数据库的处理性能,同时也提高了持久化实例对象的处理效率。0100 装置实施例。

33、二:0101 参见图4,该图为本发明提供的一种持久化实例对象的处理装置实施例二结构框图。0102 在上述装置实施例一的基础上,本发明实施例提供的一种持久化实例对象的处理装置还包括:0103 排序单元306,连接于所述生成单元304和所述语句提交单元305之间,用于按照所述SQL语句对应的数据库优先级由高到低的顺序对所述SQL语句进行排序。0104 在本实施例中,对每个线程都按照所述SQL语句对应的数据库优先级由高到低的顺序对所述SQL语句进行排序,保证所有线程都按照固定的顺序操作数据库表,这样就可以有效避免无序带来的数据库死锁问题。0105 为了解决现有技术中由于整个持久化实例对象的处理流程都需要占用数据库内存而导致的影响数据库访问性能的技术问题,在本实施例中,所述装置还包括:0106 事务开启单元307和事务提交单元308;说 明 书CN 104376054 A10。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 物理 > 计算;推算;计数


copyright@ 2017-2020 zhuanlichaxun.net网站版权所有
经营许可证编号:粤ICP备2021068784号-1