一种基于数据库的事务控制方法及装置的制作方法

文档序号:6370472阅读:122来源:国知局
专利名称:一种基于数据库的事务控制方法及装置的制作方法
技术领域
本发明涉及计算机通信技术领域,尤其涉及一种基于数据库的事务控制方法及装置。
背景技术
在数据库中,事务是指单个工作单元执行的一系列操作,即将ー组相关的操作进行绑定,从而形成事务。对事务进行操作吋,虽然仍然有可能发生错误,但是由于事务是ー组相关操作绑定的结果,因此可以确保系统的一致性和可靠性。事务包含一个开头和ー个结尾,该开头和结尾指定了事务的边界,事务在其边界 之间可以跨越进程和计算机。事务在其边界内的所有资源都參与同一个事务,若要维护事务边界内各个资源间的一致性,则事务必须具备原子性、一致性、隔离性和持续性。事务控制是指在数据库中,为确保事务内各个资源间的一致性,即确保事务的原子性、隔离性、一致性和持续性,对事务进行的一系列管理活动。现有技术下,基于数据库事务控制的方法通常为采用应用程序进行事务控制,如 Java 中的 JDBC (Java Data Base Connectivity, Java 数据库连接)事务和 JTA (JavaTransaction API)事务进行事务控制。采用该方法对事务进行控制,是将事务中的服务分先后顺序依次对数据库进行访问和处理,因此,当事务控制应用程序出现异常退出吋,部分数据库默认设置为将没有完成的请求自动提交,这样,会导致数据的不一致,不能完全满足事务的四大特性。综上所述,现有技术下,数据库中的事务控制过程存在事务控制应用程序异常中断退出时,会导致数据库中数据不完整的问题。

发明内容
本发明实施例提供一种基于数据库的事务控制方法及装置,用以解决现有技术中存在的事务控制过程中出现的事务控制应用程序因异常中断退出时,导致的数据库中数据不完整问题。本发明实施例提供的具体技术方案如下一种基于数据库事务控制的方法,包括预先将各类事务分别划分为原子级服务并进行保存;接收客户端请求,并将所述客户端请求解析为对应的原子级服务;当判定所述客户端请求对应的任意一原子级服务从属的至少ー个事务包含其他原子级服务吋,将所述其他原子级服务和所述任意一原子级服务合并列出对应的服务列表;从数据库中读取对应所述服务列表中各原子级服务的执行函数,并基于获得的执行函数对各原子级服务进行处理。一种基于数据库事务控制的装置,包括
事务划分模块11,用于预先将各类事务分别划分为原子级服务并进行保存;解析模块12,用于接收客户端请求,并将所述客户端请求解析为对应的原子级服务;列表模块13,用于当判定所述客户端请求对应的任意一原子级服务从属的至少一个事务包含其他原子级服务时,将所述其他原子级服务和所述任意一原子级服务合并列出对应的服务列表;处理模块14,用于从数据库中读取对应所述服务列表中各原子级服务的存储函数,并基于获得的存储函数对各原子级服务进行处理。本发明实施例中,预先将各类事务分别划分为原子级服务并进行保存,接收客户端的请求,并将该客户端请求解析为对应的原子级服务,当判定该客户端请求对应的任意一原子级服务从属的至少一个事务包含其他原子级服务时,将上述其他原子级服务和任意 一原子级服务合并列出对应的服务列表,然后从数据库中获得对应上述服务列表中各原子级服务的执行函数,并基于该执行函数对各原子级服务进行处理。从而,使数据库中的事务控制更加方便,同时兼顾事务的四大特性,满足了在数据库中对事务进行一致性控制的要求,即服务列表中所有原子级服务同时执行,避免了系统或程序中断造成的事务处理不完全问题。


图I为本发明实施例中基于数据库事务控制装置结构图;图2为本发明实施例中解析模块结构图;图3为本发明实施例中基于数据库事务控制的流程图;图4为本发明实施例中在数据库中对事务控制的详细流程图。
具体实施例方式本发明实施例中,为了解决现有技术中存在的事务控制过程中事务控制应用程序出现异常中断退出时,导致的数据库中数据不完整问题。预先将各类事务分别划分为原子级服务并进行保存,接收客户端的请求,并将该客户端请求解析为对应的原子级服务,当判定该客户端请求对应的任意一原子级服务从属的至少一个事务包含其他原子级服务时,将上述其他原子级服务和任意一原子级服务合并列出对应的服务列表,然后从数据库中读取对应上述服务列表中各原子级服务的执行函数,并基于该执行函数对各原子级服务进行处理。从而,使数据库中的事务控制更加方便,同时兼顾事务的四大特性,满足了在数据库中对事务进行一致性控制的要求,即服务列表中所有原子级服务同时执行,一次性处理客户端请求,避免了系统或程序中断造成的事务处理不完全问题。本发明技术方案应用于基于复杂业务的数据库事务控制,对一个数据库或者多个数据库组成的数据库集群进行事务控制。下面结合附图对本发明优选的实施方式进行详细说明。参阅图I所示为本发明实施例中,基于数据库的事务控制装置包括事务划分模块11,解析模块12,列表模块13和处理模块14,其中,事务划分模块11,用于预先将各类事务分别划分为原子级服务并进行保存;
解析模块12,用于接收客户端请求,并将所述客户端请求解析为对应的原子级服务;列表模块13,用于当判定所述客户端请求对应的任意一原子级服务从属的至少ー个事务包含其他原子级服务吋,将所述其他原子级服务和所述任意一原子级服务合并列出对应的服务列表;处理模块14,用于从数据库中获取对应所述服务列表中各原子级服务的执行函数,并基于获得的执行函数对各原子级服务进行处理。參阅图2所示,解析模块12包含请求接收单元121和请求解析单元122,其中,请求接收单元121,用于接收客户端发送的请求;请求解析単元122,用于将所述客户端请求解析为对应的原子级服务。
列表模块13包含判断単元131和合并列表単元132,其中,判断単元131,用于判断所述客户端请求对应的任意一原子级服务从属的至少ー个事务是否包含其他原子级服务;合并单列表単元132,用于将所述原子级服务本身,或者所述原子级服务从属的至少ー个事物中包含的其他原子级服务合并列出对应的服务列表。处理模块14包含数据库访问单元141和请求响应单元142,其中,数据库访问单元141,用于从数据库中获得对应所述服务列表中各原子级服务的执行函数,并基于获得的执行函数对各原子级服务进行处理;请求响应单元142,用于将所述处理结果响应信息返回至客户端。基于上述技术方案,參阅图3所示,本发明实施例中,基于数据库对事务控制的详细流程如下步骤300 :预先将各类事务分别划分为原子级服务并进行保存。对各类事务进行划分,划分为不可再划分的最小单元即原子级服务,并对上述划分的原子级服务进行保存。上述原子级服务为不可再划分的最小単元,ー个原子级服务对应于至少ー个数据操作,一个数据操作对应于一个存储函数,该存储函数又包含数据库中与之对应执行函数的链接,该执行函数用于处理上述原子级服务。根据客户端的请求,可以任意调用上述原子级服务,即原子级服务根据客户端的请求可以进行任意组合,无须对不同请求的组合在数据库中建立不同的维护数据进行维护,从而节约了系统空间,使事务控制过程灵活方便。步骤310 :接收客户端的请求,并将该客户端请求解析为对应的原子级服务。具体为接收客户端的请求,可以是接收ー个客户端发送的ー个请求,并将该客户端请求解析为对应的原子级服务;或者,接收ー个客户端发送的每ー个请求,并将该客户端请求分别解析为对应的原子级服务;或者,接收多个客户端发送的请求,并将上述每ー个客户端的请求分别解析为对应的原子级服务。上述客户端请求包含如下标识信息请求类型标识,如异步请求或者同步请求,客户端请求为异步请求的指定异步响应接ロ ;客户端请求对应的ー个或者多个原子级服务的事务标识(id)。上述客户端请求可以是ー个请求,可以是多个请求。客户端发送的请求信息形式如下
报文头报文体其中,报文体部分包含上述客户端请求标识信息。例如
<batch>
<service>
<id>lll</id>
<tranid>789578412</ tranid>
< step>l</ step >
<count>2</count>
<mode>0</mode>
<url></ur1>
<param >
</ param>
</service〉
< service>
</ service〉
〈/batch〉根据客户端请求包含的标识信息,将上述客户端请求解析为请求对应的事务服务接口,事务原子级服务,事务原子级服务的所有属性,如同步异步信息、异步响应接口等,原子级服务跟事务相关的属性,如事务标识(id)等。步骤320 :当判定客户端请求对应的任意一原子级服务从属的至少一个事务包含其他原子级服务时,将其他原子级服务和任意一原子级服务合并列出对应的服务列表。具体为上述任意一原子级服务以下称为原子级服务S。根据上述解析结果,判断客户端请求对应的服务接口是否存在,如果不存在,则根据上述请求解析过程中得到的请求标识类型,即同步异步信息,返回上述服务接口不存在判定结果的响应信息至客户端请求接口或
者异步响应接口,例如,该响应信息实例如下所示<batch>
<service>
<id>lll</id>
<tranid>789578412</ tranid>
< step>l</ &tep >
<count>2</count>
<code>0</code>
<de!code></ del code >
<delmsg></ delmsg >
くparam >
</ param〉
く/service>
< service>
</ service>
</batch>如果存在客户端请求对应的服务接ロ,扫描预存的各事务包含的原子级服务,确定包含上述客户端请求对应的原子级服务s的事务;根据扫描结果进一歩判定包含该客户端请求对应的原子级服务s的事务是否包含其他原子级服务。在数据库中,ー个事务可以包含多个原子级服务,ー个原子级服务又可能属于不同的事务,因此,ー个原子级服务所在事务中可能包含其他原子级服务。如果该客户端请求对应的原子级服务从属的事务不包含其他原子级服务,则进行步骤330 ;如果该客户端请求对应的原子级服务从属的事务包含其他原子级服务,则从内存、缓存或者内存数据库等存储介质中获得客户端请求对应的原子级服务所在事务对应的其他服务列表,并将上述客户端请求对应的原子级服务并入上述服务列表中。由于ー个原子级服务可能属于不同的事务,因此,上述服务列表根据客户的指示有两种形式将各事务包含的其他原子级服务与原子级服务s合并生成总服务列表;或者,将每ー个事务包含的其他原子级服务分别与原子级服务s合并,对应相应的事务生成服务列表。例如,原子级服务s属于事务A、B、C,事务A、B、C均包含除s外的其他原子级服务,此时,可以根据客户指示,将s对应于事务A、B、C分别列出服务列表a、b、c,也可以将事务A、B、C中所有原子级服务合并为ー个总的服务列表t。将上述原子级服务s从属的全部事务包含的其他原子级服务,和原子级服务s合并列出对应的服务列表;或者,根据用户指示,选取原子级服务s从属的全部事务中的指定事务,并将该指定事务包含的其他原子级服务与原子级服务S合并列出对应的服务列表。例如,原子级服务S从属于事务A、B、C,且事务A、B、C均包含除原子级服务S外的其他原子级服务,采用本发明技术方案,可以将事务A、B、C三个事务各自包含的其他原子级服务与原子级服务s合并列出对应的服务列表;也可以根据用户指示,仅列出事务B包含的其他原子级服务与原子级服务s合并列出对应的服务列表。判断上述服务列表是否完整,如果不完整,即客户端请求对应的原子级服务从属的全部或指定事务包含的全部原子级服务并未全部列入服务列表,则将上述服务列表存储在内存、缓存或者内存数据库等存储介质中,直至在预设时间内上述服务列表完整,若到达预定时间点时,上述服务列表不完整,则清空上述服务列表并将该清空信息返回给客户端,这样,能够达到不占用系统空间的目的,若仍需要对上述请求,则需要客户端重新发送该请求消息,系统重新进行处理;如果上述服务列表完整,则进行步骤330。步骤330 :从数据库中获取对应服务列表中各原子级服务的执行函数,并基于获得的执行函数对各原子级服务进行处理。具体为 从系统中读取对应服务列表中各原子级服务的存储函数,根据原子级服务对应的存储函数可以从数据库中获得处理该原子级服务的执行函数,基于该执行函数对原子级服务进行处理。基于上述系统中与存储函数对应的执行函数对原子级服务进行访问和处理,能够达到一次性处理客户端请求,一次性访问数据库的目的,有效避免了因为程序或者系统错误造成的未处理事务即进行提交的问题,保证了数据库事务的一致性。对数据库处理完毕以后,根据上述对原子级服务标识信息的解析结果判断客户端请求的类型,如果为同步请求,则将上述处理完毕的响应信息返回至客户端请求接ロ ;如果为异步请求,则将上述处理完毕的响应信息根据异步请求的地址返回至异步响应接ロ。—个客户端请求对应ー个或者多个原子级服务,ー个原子级服务可以属于多个事务,因此,一个客户端请求可以请求多个事务,采用本发明技术方案,客户端可以发送ー个或者多个请求,而上述请求可以请求多个事务,多个事务中对应的原子级服务可以进行任意组合,应用灵活方便。例如,以客户端请求对应ー个原子级服务S,原子级服务s从属的事务不包含其他原子级服务,对于上述服务列表中所有原子级服务对应的所有存储函数合并对应于数据库中执行函数建立链接的过程请求对应的原子级服务s对应于多个存储函数存储函数I、存储函数2……存储函数n,将上述原子级服务s中的所有存储函数进行排列,对排列后的存储函数进行拼接并从数据库获得处理该原子级服务的执行函数,基于上述执行函数对原子级服务进行一次性处理,达到一次性处理客户端请求的目的。上述数据库的访问和处理结束后,即刻清除上述服务列表,以节省系统存储空间,避免系统中存储空间被大量占用,系统运行速度缓慢的问题。例如,參阅图4所示,本发明实施例的具体流程为步骤401 :预先将各类事务分别划分为原子级服务并进行保存。步骤402 :接收客户端的请求,根据客户端请求包含的标识信息,将上述客户端请求解析为请求对应的事务服务接ロ,事务原子级服务,事务原子级服务的所有属性,和原子级服务跟事务相关的属性。
步骤403 :判断客户端请求对应的服务接ロ是否存在。步骤404:如果客户端请求对应的服务接ロ不存在,则根据上述请求解析过程中得到的请求标识类型,即同步异步信息,返回上述服务接ロ不存在判定结果的响应信息至客户端请求接ロ或者异步响应接ロ。步骤405 :如果客户端请求对应的服务接ロ存在,判断客户端请求对应的任意一原子级服务从属的至少ー个事务是否包含其他原子级服务。步骤406 :如果该客户端请求对应的原子级服务从属的事务不包含其他原子级服务,则直接得出仅包含原子级服务的服务列表。步骤407 :如果该客户端请求对应的原子级服务从属的事务包含其他原子级服务,则从内存、缓存或者内存数据库等存储介质中获得客户端请求对应的原子级服务所在事务对应的其他服务列表,并将上述客户端请求对应的原子级服务并入上述服务列表中。
步骤408 :判断上述服务列表是否完整。步骤409 :如果上述服务列表不完整,即客户端请求对应的原子级服务从属的全部或指定事务包含的全部原子级服务并未全部列入服务列表,则将上述服务列表存储在内存、缓存或者内存数据库等存储介质中,直至在预设时间内上述服务列表完整,若到达预定时间点时,上述服务列表不完整,则清空上述服务列表并将该清空信息返回给客户端。步骤410 :如果上述服务列表完整,从数据库中获取对应服务列表中各原子级服务的执行函数,并基于获得的执行函数对各原子级服务进行处理。步骤411 :根据上述对原子级服务标识信息的解析结果判断客户端请求的类型。步骤412 :如果为同步请求,则将上述处理完毕的响应信息返回至客户端请求接□。步骤413 :如果为异步请求,则将上述处理完毕的响应信息根据异步请求的地址返回至异步响应接ロ。综上所述,本发明实施例可以支持复杂业务下数据库事务控制过程中,对多个原子级服务进行任意组合进行处理。通过对ー个请求或者多个请求或者请求组合对应的存储过程组成ー个数据块,基于该数据块对数据库进行一次性访问和处理,从而保证了数据库中事务的一致性,即服务列表中所有原子级服务同时执行,一次性处理客户端请求,避免多次请求数据库造成的事务不完整问题。显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。
权利要求
1.一种基于数据库的事务控制方法,其特征在于,包括 预先将各类事务分别划分为原子级服务并进行保存; 接收客户端请求,并将所述客户端请求解析为对应的原子级服务; 当判定所述客户端请求对应的任意一原子级服务从属的至少一个事务包含其他原子级服务时,将所述其他原子级服务和所述任意一原子级原子级服务合并列出对应的服务列表; 从数据库中获得对应所述服务列表中各原子级服务的执行函数,并基于获得的执行函数对各原子级服务进行处理。
2.如权利要求I所述的方法,其特征在于,所述接收客户端请求,并将客户端请求解析为对应的原子级服务,包括 接收一个客户端发送的一个请求,并将所述客户端请求解析为对应的原子级服务;或者,接收一个客户端发送的多个请求,并将所述客户端的每一个请求分别解析为对应的原子级服务;或者,接收多个客户端发送的请求,并将所述每一个客户端的请求分别解析为对应的原子级服务。
3.如权利要求I所述的方法,其特征在于,判定所述客户端请求对应的任意一原子级服务从属的第一事务包含其他原子级服务,包括 扫描预存的各事务包含的原子级服务,确定包含所述客户端请求对应的任意一原子级服务的事务; 根据扫描结果进一步判定包含所述客户端请求对应的任意一原子级服务的事务是否包含其他原子级服务。
4.如权利要求1、2或3所述的方法,其特征在于,将其他原子级服务和任意一原子级服务合并列出对应的服务列表,包括 将所述客户端请求对应的任意一原子级服务从属的全部事务包含的其他原子级服务,和所述任意一原子级服务合并列出对应的服务列表;或者,根据用户指示,选取所述客户端请求对应的任意一原子级服务从属的全部事务中的指定事务,并将所述指定事务包含的其他原子级服务与所述任意一原子级服务合并列出对应的服务列表。
5.如权利要求4所述的方法,其特征在于,将全部或指定的各个事务包含的其他原子级服务与所述任意一原子级服务合并列出对应的服务列表,包括 将各事务包含的其他原子级服务与所述任意一原子级服务合并生成总服务列表;或者,将每一个事务包含的其他原子级服务分别与所述任意一原子级服务合并,对应相应的事务生成服务列表。
6.如权利要求4所述的方法,其特征在于,从数据库中获得对应所述服务列表中各原子级服务的执行函数之前,还包括 判断将全部或指定的各个事务包含的其他原子级服务与所述任意一原子级服务合并列出对应的服务列表是否完整,若是,则触发执行开始从数据库中获取对应所述服务列表中各原子级服务的执行函数的操作,否则,等待服务列表补充完整后再触发执行开始从数据库中读取对应所述服务列表中各原子级服务的执行函数的操作。
7.如权利要求6所述的方法,其特征在于,若服务列表在预设时长内未补充完整时,则清空服务列表并等待下次的客户端请求。
8.一种基于数据库的事务控制装置,其特征在于,包括 事务划分模块,用于预先将各类事务分别划分为原子级服务并进行保存; 解析模块,用于接收客户端请求,并将所述客户端请求解析为对应的原子级服务; 列表模块,用于当判定所述客户端请求对应的任意一原子级服务从属的至少一个事务包含其他原子级服务时,将所述其他原子级服务和所述任意一原子级服务合并列出对应的服务列表; 处理模块,用于从数据库中获得对应所述服务列表中各原子级服务的执行函数,并基于获得的执行函数对各原子级服务进行处理。
9.如权利要求8所述的装置,其特征在于,解析模块,具体用于接收一个客户端发送的一个请求,并将所述客户端请求解析为对应的原子级服务;或者,接收一个客户端发送的多个请求,并将所述客户端的每一个请求分别解析为对应的原子级服务;或者,接收多个客户端发送的请求,并将所述每一个客户端的请求分别解析为对应的原子级服务。
10.如权利要求8所述的装置,其特征在于,列表模块,具体用于扫描事务划分模块预存的各事务包含的原子级服务,确定包含所述客户端请求对应的任意一原子级服务的事务;并根据扫描结果进一步判定包含所述客户端请求对应的任意一原子级服务的事务是否包含其他原子级服务。
11.如权利要求8、9或10所述的装置,其特征在于,列表模块,具体用于将所述客户端请求对应的任意一原子级服务从属的全部事务包含的其他原子级服务,和所述任意一原子级服务合并列出对应的服务列表;或者,根据用户指示,选取所述客户端请求对应的任意一原子级服务从属的全部事务中的指定事务,并将所述指定事务包含的其他原子级服务与所述任意一原子级服务合并列出对应的服务列表。
12.如权利要求10所述的装置,其特征在于,列表模块,具体用于将各事务包含的其他原子级服务与所述任意一原子级服务合并生成总服务列表;或者,将每一个事务包含的其他原子级服务分别与所述任意一原子级服务合并,对应相应的事务生成服务列表。
13.如权利要求12所述的装置,其特征在于,列表模块,还用于从数据库中获得对应所述服务列表中各原子级服务的执行函数之前,判断将全部或指定的各个事务包含的其他原子级服务与所述任意一原子级服务合并列出对应的服务列表是否完整,若是,则触发执行开始从数据库中获取对应所述服务列表中各原子级服务的执行函数的操作,否则,等待服务列表补充完整后再触发执行开始从数据库中读取对应所述服务列表中各原子级服务的执行函数的操作。
14.如权利要求13所述的装置,其特征在于,列表模块,还用于判定服务列表在预设时长内未补充完整时,清空服务列表并等待下次的客户端请求。
全文摘要
本发明公开了一种基于数据库事务控制方法及装置,具体方法为预先向各类事务分别划分为原子级服务并进行保存,接收客户端的请求,并将该客户端请求解析为对应的原子级服务,当判定该客户端请求对应的任意一原子级服务从属的至少一个事务包含其他原子级服务时,将上述其他原子级服务和任意一原子级服务合并列出对应的服务列表,然后从数据库中获取对应上述服务列表中各原子级服务的执行函数,并基于该执行函数对各原子级服务进行处理。从而,使数据库中的事务控制更加方便,同时兼顾事务的四大特性,满足了在数据库中对事务进行一致性控制的要求,即服务列表中所有原子级服务同时执行,避免了系统或程序中断造成的事务处理不完全问题。
文档编号G06F17/30GK102760155SQ20121017255
公开日2012年10月31日 申请日期2012年5月30日 优先权日2012年5月30日
发明者周智昊, 田承平, 黄胜鲁 申请人:中兴通讯股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1