一种数据处理方法、系统及相关组件与流程

文档序号:17442246发布日期:2019-04-17 04:55阅读:163来源:国知局
一种数据处理方法、系统及相关组件与流程

本申请涉及数据存储领域,特别涉及一种数据处理方法、系统、一种计算机可读存储介质及一种电子设备。



背景技术:

对于数据并发操作中控制冲突的方法一般可分为乐观锁和悲观锁两种。乐观锁就是每次去访问数据的时候都认为别人不会修改,所以不会上锁,但是在更新的时候会判断一下在此期间别人有没有去更新这条,即是否产生了数据冲突,如果产生冲突则本次操作会被中断回滚。悲观锁则相反,每次访问数据前都会加锁,直到本次操作完成。乐观锁适用于读操作较多的应用类型,冲突很少发生的时候,这样可以提高吞吐量。

但是,现有技术在处理数据访问冲突的过程中若出现访问请求冲突会产生二次冲突,导致访问延时较长,严重影响了系统性能和用户体验。

因此,如何处理数据访问冲突,避免处理冲突过程中出现的二次冲突,提升系统性能是本领域技术人员目前需要解决的技术问题。



技术实现要素:

本申请的目的是提供一种数据处理方法、系统、一种计算机可读存储介质及一种电子设备,能够处理数据访问冲突,避免处理冲突过程中出现的二次冲突,提升系统性能。

为解决上述技术问题,本申请提供一种数据处理方法,该数据处理方法包括:

接收第一数据访问请求,并根据所述第一数据访问请求从数据库中读取目标数据,以便对所述目标数据执行所述第一数据访问请求对应的操作;

当检测到所述目标数据对应的数据冲突时,将所述第一数据访问请求添加至任务队列;

依次读取所述任务队列中的访问请求,当读取到所述第一数据访问请求时,从所述数据库中读取新的目标数据,并对所述新的目标数据执行加锁操作;

对所述新的目标数据执行所述第一数据访问请求对应的操作。

可选的,在对所述目标数据执行所述数据访问请求对应的操作之后,还包括:

判断是否存在第二数据访问请求修改所述目标数据;

若是,则判定检测到所述数据冲突。

可选的,在将所述数据访问请求添加至任务队列之后,还包括:

当接收到所述目标数据的访问地址对应的第三数据访问请求时,将所述第三数据访问请求添加至所述任务队列。

可选的,对所述目标数据执行所述第一数据访问请求对应的操作包括:

获取所述第一数据访问请求对应的数据操作算法,对所述目标数据执行所述数据操作算法对应的操作。

可选的,在对所述新的目标数据执行所述第一数据访问请求对应的操作之后,还包括:

对所述新的目标数据执行解锁操作。

可选的,在对所述新的目标数据执行所述第一数据访问请求对应的操作之后,还包括:

将执行所述操作之后的新的目标数据写入所述数据库。

可选的,根据所述第一数据访问请求从数据库中读取目标数据包括:

根据所述第一数据访问请求确定目标访问地址,从所述数据库中读取与所述目标访问地址对应的所述目标数据。

本申请还提供了一种数据处理系统,该数据处理系统包括:

第一处理模块,用于接收第一数据访问请求,并根据所述第一数据访问请求从数据库中读取目标数据,以便对所述目标数据执行所述第一数据访问请求对应的操作;

队列添加模块,用于当检测到所述目标数据对应的数据冲突时,将所述第一数据访问请求添加至任务队列;

重新读取模块,用于依次读取所述任务队列中的访问请求,当读取到所述第一数据访问请求时,从所述数据库中读取新的目标数据,并对所述新的目标数据执行加锁操作;

第二处理模块,用于对所述新的目标数据执行所述第一数据访问请求对应的操作。

本申请还提供了一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序执行时实现上述数据处理方法执行的步骤。

本申请还提供了一种电子设备,包括存储器和处理器,所述存储器中存储有计算机程序,所述处理器调用所述存储器中的计算机程序时实现上述数据处理方法执行的步骤。

本申请提供了一种数据处理方法,包括接收第一数据访问请求,并根据所述第一数据访问请求从数据库中读取目标数据,以便对所述目标数据执行所述第一数据访问请求对应的操作;当检测到所述目标数据对应的数据冲突时,将所述第一数据访问请求添加至任务队列;依次读取所述任务队列中的访问请求,当读取到所述第一数据访问请求时,从所述数据库中读取新的目标数据,并对所述新的目标数据执行加锁操作;对所述新的目标数据执行所述第一数据访问请求对应的操作。

本申请在检测到数据冲突时,将数据冲突对应的第一数据访问请求添加至任务队列,依次读取任务队列中的访问请求,当读取到第一数据访问请求时,重新从数据库中读取对应的新的目标数据,并对新的目标数据执行对应的操作。进一步的,本申请在读取新的目标数据后对其执行加锁操作,保证第一数据访问请求在数据冲突后再次操作数据时不被其他用户冲突,因此本申请可以处理数据访问冲突,避免处理冲突过程中出现的二次冲突,提升系统性能。本申请同时还提供了一种数据处理系统、一种计算机可读存储介质和一种电子设备,具有上述有益效果,在此不再赘述。

附图说明

为了更清楚地说明本申请实施例,下面将对实施例中所需要使用的附图做简单的介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1为本申请实施例所提供的一种数据处理方法的流程图;

图2为本申请实施例所提供的另一种数据处理方法的流程图;

图3为本申请实施例所提供的一种数据处理系统的结构示意图。

具体实施方式

为使本申请实施例的目的、技术方案和优点更加清楚,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。

下面请参见图1,图1为本申请实施例所提供的一种数据处理方法的流程图。

具体步骤可以包括:

s101:接收第一数据访问请求,并根据所述第一数据访问请求从数据库中读取目标数据,以便对所述目标数据执行所述第一数据访问请求对应的操作;

其中,本实施例的执行主体可以为数据存储装置,默认存在其他装置或用户生成第一数据访问请求的操作。第一数据访问请求是对于数据库中目标数据的访问请求,通过读取目标数据可以对目标数据执行相应的操作,如读写操作等。本步骤中默认存在接收到第一数据访问请求之后,根据第一数据访问请求确定带访问数据的地址,根据该地址从数据库中读取对应的目标数据。此处不限定第一数据访问请求对应的操作类型,在对目标数据执行第一数据访问请求对应的操作之后的数据可以与执行操作之前的目标数据相同,也可以存在修改,此处不进行限定。

s102:当检测到所述目标数据对应的数据冲突时,将所述第一数据访问请求添加至任务队列;

其中,本实施例中提到的数据冲突是指在s101根据第一数据访问请求对目标数据执行相关操作的过程中,检测到有其他的数据访问请求更新了该目标数据。此处提到的目标数据的数据冲突具体是指,数据库中根据第一数据访问请求确定的地址对应的数据存在数据冲突。本实施例默认数据库中的数据在被访问时都会添加乐观锁。

举例说明上述过程,第一数据访问请求对应的数据的地址为0001,从数据库中读取地址为0001的目标数据a0并根据第一数据访问请求对目标数据a0执行相关操作最终得到目标数据a1。此时需要将目标数据a1写回数据库地址0001的位置,若检测到在根据第一数据访问请求对目标数据a0执行相关操作的过程中,存在其他数据访问请求也读取了数据库中地址为0001的目标数据a0并进行相关处理得到目标数据a2,并且在将目标数据a1写回数据库地址0001的位置之前,先将目标数据a2写回数据库的0001地址对应的位置,此时则判定检测到目标数据对应的数据冲突,需要将第一数据访问请求添加至任务队列中。

在本步骤之前,默认存在创建任务队列的操作,以便存放延迟的任务请求和冲突的任务请求。可以理解的是,由于检测到数据冲突第一数据访问请求对目标数据执行的相关操作得到的数据是不符合数据一致性要求的,因此需要重新执行第一数据访问请求对应的相关操作。

s103:依次读取所述任务队列中的访问请求,当读取到所述第一数据访问请求时,从所述数据库中读取新的目标数据,并对所述新的目标数据执行加锁操作;

其中,此处不限定任务队列中的访问请求的数量,同时不限定读取任务队列中的访问请求的次序,任务队列中的访问请求包括延迟执行的人物请求和发生数据冲突的访问请求。当读取到s102中添加至任务队列的第一数据访问请求时,可以执行s101中相关的处理操作相当于重新接收一遍第一数据访问请求,根据第一数据访问请求确定将要访问数据的地址,从数据库中读取改地址对应新的目标数据。需要说明的是,由于目标数据存在对应的数据冲突,因此在s103中读取的新的目标数据和s101中读取的目标数据即使在数据库中的地址相同,但是数据内容必然会发生改变。

值得一提的是,本步骤为了避免第一数据访问请求再次出现因数据冲突而进入任务队列的状况,本步骤在从所述数据库中读取新的目标数据的同时对所述新的目标数据执行加锁操作,根据第一数据访问请求对新的目标数据执行相应的处理操作结束之前,不允许通过其他数据访问请求读取数据库中新的目标数据对应地址的数据。此时相对于对数据库中新的目标数据对应的地址的数据添加悲观锁。

s104:对所述新的目标数据执行所述第一数据访问请求对应的操作。

其中,本步骤建立在s103已经对新的目标数据执行加锁操作的基础上,重新对新的目标数据执行第一数据访问请求对应的操作。

此处继续以s102处进行解释的例子说明以上步骤中的操作过程:在将处理后的目标数据a1写回数据库之前,检测到数据库中的目标数据a0已经被更新为目标数据a1,说明存在数据冲突,将第一数据访问请求添加至任务队列。当从任务队列中读取到第一数据访问请求时,重新读取数据库中相同地址的新的目标数据a2,并对目标数据a2执行加锁操作,防止出现除了第一数据访问请求之外的其他请求对新的目标数据a2执行修改操作带来的二次数据冲突的问题。

本实施例在检测到数据冲突时,将数据冲突对应的第一数据访问请求添加至任务队列,依次读取任务队列中的访问请求,当读取到第一数据访问请求时,重新从数据库中读取对应的新的目标数据,并对新的目标数据执行对应的操作。进一步的,本实施例在读取新的目标数据后对其执行加锁操作,保证第一数据访问请求在数据冲突后再次操作数据时不被其他用户冲突,因此本实施例可以处理数据访问冲突,避免处理冲突过程中出现的二次冲突,提升系统性能。

下面请参见图2,图2为本申请实施例所提供的另一种数据处理方法的流程图,具体步骤可以包括:

s201:接收第一数据访问请求,并根据所述第一数据访问请求确定目标访问地址,从所述数据库中读取与所述目标访问地址对应的所述目标数据,以便对所述目标数据执行所述第一数据访问请求对应的操作。

s202:当检测到所述目标数据对应的数据冲突时,将所述第一数据访问请求添加至任务队列。

具体的,判断是否存在数据冲突的过程可以为:判断是否存在第二数据访问请求修改所述目标数据;若是,则判定检测到所述数据冲突。该过程可以存在于将s201得到的执行操作后的目标数据写回数据库之前。

s203:依次读取所述任务队列中的访问请求,当读取到所述第一数据访问请求时,从所述数据库中读取新的目标数据,并对所述新的目标数据执行加锁操作。

作为一种优选的实施方式,读取任务队列中的访问请求的顺序可以为按照访问请求到达任务队列的时间先后顺序,先到达任务队列先读取,后到达任务队列后读取。

s204:获取所述第一数据访问请求对应的数据操作算法,对所述目标数据执行所述数据操作算法对应的操作。

s205:对所述新的目标数据执行解锁操作。

作为一种优选的实施方式,在上述实施例的基础上s205之前还可以存在以下操作:当接收到所述目标数据的访问地址对应的第三数据访问请求时,将所述第三数据访问请求添加至所述任务队列。

在对新的目标数据解锁之前,若检测到第三数据访问请求同样需要对新的目标数据执行相关操作,由于s203加锁操作的存在,需要对第三数据访问请求进行延时处理,将第三数据访问请求添加至任务队列中。

下面通过在实际应用中一种处理数据访问冲突及脏数据的具体实施过程说明上述实施例描述的流程。

在执行处理流程之前,首先创建任务队列,用于存放延迟的任务请求和冲突的任务请求。当访问数据冲突后,可以在任务队列中暂存用户提交数据和数据操作算法,重新从数据库获取数据,并对数据加锁,重构用户操作过程后,提交更新的数据到数据库,对访问数据解锁。此时若有其它的访问请求访问相同地址的数,则需要放入任务队列,等待访问数据被解锁。设计任务队列用于存放数据冲突的访问请求和因访问数据被加锁而需要等待的访问请求的目的是:为了避免用户反复提交数据库访问请求。

当有数据访问请求时,具体算法流程如下:

步骤1、当接收到数据访问请求时,直接从数据库读取数据。

步骤2、操作完成后,提交更新后的数据到数据库。在提交数据更新之前,先检查在该访问请求读取数据后,有没有其他请求又修改了该数据,即是否产生了数据冲突。若无冲突,则将更新的数据写入数据库。若冲突,则把访问请求放入任务队列,重新从数据库获取访问数据,并且对数据加锁。

其中,当检测到数据冲突后,会在任务队列中暂存用户提交数据和数据操作算法,再次从数据库获取访问数据,并对数据加锁,重构用户操作过程后,提交更新的数据到数据库,对访问数据解锁。此时若有其它的访问请求访问相同地址的数,则需要放入任务队列,等待访问数据被解锁。

步骤3、获取本次用户访问请求的数据操作算法,重构用户操作过程,操作完成后更新到数据库,对访问数据解锁。

步骤4、在对数据进行访问的同时,若有其它用户访问该相同地址的数据,则放入任务队列的队尾。等待它前面的任务完成时再获取数据,跳转到步骤1继续执行。

上述过程通过创建任务队列存放冲突的访问请求,并且在检测到冲突后对访问数据加锁,重新获取访问数据,重构用户操作过程,避免冲突后访问请求被回滚。检测到冲突后加锁是为了保证同一个访问请求在数据冲突后再次操作数据时不被其它用户冲突,降低操作延时,提高用户效率。

请参见图3,图3为本申请实施例所提供的一种数据处理系统的结构示意图;

该系统可以包括:

第一处理模块100,用于接收第一数据访问请求,并根据所述第一数据访问请求从数据库中读取目标数据,以便对所述目标数据执行所述第一数据访问请求对应的操作;

队列添加模块200,用于当检测到所述目标数据对应的数据冲突时,将所述第一数据访问请求添加至任务队列;

重新读取模块300,用于依次读取所述任务队列中的访问请求,当读取到所述第一数据访问请求时,从所述数据库中读取新的目标数据,并对所述新的目标数据执行加锁操作;

第二处理模块400,用于对所述新的目标数据执行所述第一数据访问请求对应的操作。

进一步的,该系统还包括:

判断模块,用于判断是否存在第二数据访问请求修改所述目标数据;若是,则判定检测到所述数据冲突。

可选的,该系统还包括:

第三处理模块,用于当接收到所述目标数据的访问地址对应的第三数据访问请求时,将所述第三数据访问请求添加至所述任务队列。

进一步的,第一处理模块100,用于获取所述第一数据访问请求对应的数据操作算法,对所述目标数据执行所述数据操作算法对应的操作。

进一步的,该系统还包括:

解锁模块,用于对所述新的目标数据执行解锁操作。

进一步的,该系统还包括:

数据写入模块,用于将执行所述操作之后的新的目标数据写入所述数据库。

进一步的,重新读取模块300具体为用于依次读取所述任务队列中的访问请求,当读取到所述第一数据访问请求时,根据所述第一数据访问请求确定目标访问地址,从所述数据库中读取与所述目标访问地址对应的所述目标数据的模块。

由于系统部分的实施例与方法部分的实施例相互对应,因此系统部分的实施例请参见方法部分的实施例的描述,这里暂不赘述。

本申请还提供了一种计算机可读存储介质,其上存有计算机程序,该计算机程序被执行时可以实现上述实施例所提供的步骤。该存储介质可以包括:u盘、移动硬盘、只读存储器(read-onlymemory,rom)、随机存取存储器(randomaccessmemory,ram)、磁碟或者光盘等各种可以存储程序代码的介质。

本申请还提供了一种电子设备,可以包括存储器和处理器,所述存储器中存有计算机程序,所述处理器调用所述存储器中的计算机程序时,可以实现上述实施例所提供的步骤。当然所述电子设备还可以包括各种网络接口,电源等组件。

说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。对于实施例公开的系统而言,由于其与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。应当指出,对于本技术领域的普通技术人员来说,在不脱离本申请原理的前提下,还可以对本申请进行若干改进和修饰,这些改进和修饰也落入本申请权利要求的保护范围内。

还需要说明的是,在本说明书中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的状况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1