读写事务控制方法、系统、终端设备及存储介质

阅读: 评论:0

著录项
  • CN202010674837.X
  • 20200714
  • CN111984379A
  • 20201124
  • 上海金仕达软件科技有限公司
  • 朱鸿斌;宫耀东;夏之春;左若愚
  • G06F9/46
  • G06F9/46

  • 上海市浦东新区自由贸易试验区亮景路210号
  • 上海(31)
  • 深圳中一联合知识产权代理有限公司
  • 翁唱玲
摘要
本申请提供了一种读写事务控制方法、系统、终端设备及存储介质,该方法包括:若接收到携带写事务的事务申请指令,且事务待写数量大于0,将事务申请指令携带的写事务加入事务待写队列;若事务待写数量等于0,且事务在写数量大于0,对事务申请指令携带的写事务进行写锁的申请,若申请成功,向写事务授权所述写锁,并执行事务申请指令携带的写事务;若接收到携带读事务的事务申请指令,且事务在写数量大于0,且事务待写数量等于0,针对事务申请指令携带的读事务进行读锁的申请,若申请成功,向事务申请指令携带的读事务授权读锁,并执行事务申请指令携带的读事务。本申请无需对数据对象进行加锁,保障了读事务与写事务之间能够并发执行。
权利要求

1.一种读写事务控制方法,应用于任一数据对象,其特征在于,所述方法包括:

若接收到携带写事务的事务申请指令,则获取事务待写数量,所述事务待写数量为事务待写队列中的写事务的数量;若所述事务待写数量大于0,则将所述事务申请指令携带的写事务加入所述事务待写队列,所述事务待写队列中存储有不同写事务与待执行顺序之间的对应关系;

若所述事务待写数量等于0,且事务在写数量大于0,则对所述事务申请指令携带的写事务进行写锁的申请,若所述申请成功,则向所述写事务授权所述写锁,并执行所述事务申请指令携带的写事务;

若接收到携带读事务的事务申请指令,则获取所述事务在写数量,若所述事务在写数量大于0,且所述事务待写数量等于0,则针对所述事务申请指令携带的读事务进行读锁的申请,若所述申请成功,则向所述事务申请指令携带的读事务授权所述读锁,并执行所述事务申请指令携带的读事务。

2.如权利要求1所述的读写事务控制方法,其特征在于,所述若接收到携带写事务的事务申请指令之后,还包括:

若所述事务待写数量等于0,且所述事务在写数量等于0,则向所述事务申请指令携带的写事务授权所述写锁,并执行所述事务申请指令携带的写事务;

若所述事务待写数量等于0,且所述事务在写数量大于0,则对所述事务申请指令携带的写事务进行所述写锁的申请,若申请失败,则将所述事务申请指令携带的写事务加入所述事务待写队列。

3.如权利要求1所述的读写事务控制方法,其特征在于,所述若接收到携带读事务的事务申请指令,则获取所述事务在写数量之后,还包括:

若所述事务在写数量等于0,则向所述事务申请指令携带的读事务授权所述读锁,并执行所述事务申请指令携带的读事务;

若所述事务在写数量大于0,且所述事务待写数量大于0,则将所述事务申请指令携带的读事务加入事务待读队列,所述事务待读队列中存储有不同读事务与待执行排序之间的对应关系。

4.如权利要求1所述的读写事务控制方法,其特征在于,所述方法还包括:

若检测到所述写锁被释放,且所述事务待写数量大于0,则获取所述事务待写队列中排序在第一的写事务;

向所述排序在第一的写事务授权所述写锁,并执行所述排序在第一的写事务。

5.如权利要求4所述的读写事务控制方法,其特征在于,所述若检测到所述写锁被释放之后,还包括:

若所述事务待写数量等于0,则向所述事务待读队列中的读事务均授权所述读锁,并分别执行所述事务待读队列中的读事务。

6.如权利要求1至3任一所述的读写事务控制方法,其特征在于,所述执行所述事务申请指令携带的写事务之后,还包括:

若所述事务申请指令携带的写事务是数据更新事务,则对所述事务申请指令携带的写事务对应的数据对象添加脏数据标记;

若所述数据更新事务结束,则删除所述数据更新事务对应的数据对象上的所述脏数据标记。

7.如权利要求6所述的读写事务控制方法,其特征在于,所述方法还包括:

若接收到携带写事务和读事务的事务申请指令,则将所述事务申请指令携带的写事务和读事务对应设置为并发写事务和并发读事务;

若所述并发读事务被授权所述写锁,则直接执行所述并发读事务;

若所述并发读事务读取到所述脏数据标记,则对所述并发读事务进行所述读锁的申请;

若申请成功,或所述并发写事务结束,则向所述并发读事务授权所述读锁,并继续执行所述并发读事务。

8.一种读写事务控制系统,应用于任一数据对象,其特征在于,包括:

事务待写数量获取模块,用于若接收到携带写事务的事务申请指令,则获取事务待写数量,所述事务待写数量为事务待写队列中的写事务的数量;若所述事务待写数量大于0,则将所述事务申请指令携带的写事务加入所述事务待写队列,所述事务待写队列中存储有不同写事务与待执行顺序之间的对应关系;

写锁申请模块,用于若所述事务待写数量等于0,且事务在写数量大于0,则对所述事务申请指令携带的写事务进行写锁的申请,若所述申请成功,则向所述写事务授权所述写锁,并执行所述事务申请指令携带的写事务;

读锁申请模块,用于若接收到携带读事务的事务申请指令,则获取所述事务在写数量,若所述事务在写数量大于0,且所述事务待写数量等于0,则针对所述事务申请指令携带的读事务进行读锁的申请,若所述申请成功,则向所述事务申请指令携带的读事务授权所述读锁,并执行所述事务申请指令携带的读事务。

9.一种终端设备,包括存储器、处理器以及存储在所述存储器中并可在所述处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现如权利要求1至7任一项所述的方法。

10.一种存储介质,所述存储介质存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现如权利要求1至7任一项所述的方法。

说明书
技术领域

本申请属于数据库管理技术领域,尤其涉及一种读写事务控制方法、系统、终端设备及存储介质。

随着技术的发展,现在有很多业务领域对数据存取访问的性能要求越来越高。比如金融行业、互联网行业、电信行业等。部分业务领域甚至出现性能决定产品的成败,比如金融行业的交易系统等。这些业务领域大量采用内存数据库,把数据存取访问从物理硬盘转移到内存,业务系统的性能得到数量级的提升,因此,为保障数据存取访问的效率,针对数据对象的读写事务控制提出了更高的要求。

现有的读写事务控制过程中,均是采用悲观锁(Pessimistic Lock)的方式读写事务控制,当执行写事务时,对数据对象进行加锁,以防止其他写事务或读事务对数据对象的操作,但由于采用悲观锁的方式使得读事务与写事务不能并发进行,进而导致读写事务执行效率低下。

本申请实施例提供了一种读写事务控制方法、系统、终端设备及存储介质,旨在解决现有的读写事务控制过程中,由于采用悲观锁的方式使得读事务与写事务不能并发进行,所导致的读写事务执行效率低下问题。

第一方面,本申请实施例提供了一种读写事务控制方法,应用于任一数据对象,所述方法包括:

若接收到携带写事务的事务申请指令,则获取事务待写数量,所述事务待写数量为事务待写队列中的写事务的数量;若所述事务待写数量大于0,则将所述事务申请指令携带的写事务加入所述事务待写队列,所述事务待写队列中存储有不同写事务与待执行顺序之间的对应关系;

若所述事务待写数量等于0,且事务在写数量大于0,则对所述事务申请指令携带的写事务进行写锁的申请,若所述申请成功,则向所述写事务授权所述写锁,并执行所述事务申请指令携带的写事务;

若接收到携带读事务的事务申请指令,则获取所述事务在写数量,若所述事务在写数量大于0,且所述事务待写数量等于0,则针对所述事务申请指令携带的读事务进行读锁的申请,若所述申请成功,则向所述事务申请指令携带的读事务授权所述读锁,并执行所述事务申请指令携带的读事务。

本申请实施例与现有技术相比存在的有益效果是:通过申请写锁或读锁的方式进行写事务和读事务的执行管理,无需对数据对象进行加锁,进而保障了读事务与写事务之间能够并发执行,提高了读、写事务的执行效率,若事务待写数量大于0,则将事务申请指令携带的写事务加入事务待写队列,使得写事务与写事务之间串行执行,进而防止了写事务并发执行所导致的数据错误,提高了数据对象的数据稳定性。

进一步地,所述若接收到携带写事务的事务申请指令之后,还包括:

若所述事务待写数量等于0,且所述事务在写数量等于0,则向所述事务申请指令携带的写事务授权所述写锁,并执行所述事务申请指令携带的写事务;

若所述事务待写数量等于0,且所述事务在写数量大于0,则对所述事务申请指令携带的写事务进行所述写锁的申请,若申请失败,则将所述事务申请指令携带的写事务加入所述事务待写队列。

进一步地,所述若接收到携带读事务的事务申请指令,则获取所述事务在写数量之后,还包括:

若所述事务在写数量等于0,则向所述事务申请指令携带的读事务授权所述读锁,并执行所述事务申请指令携带的读事务;

若所述事务在写数量大于0,且所述事务待写数量大于0,则将所述事务申请指令携带的读事务加入事务待读队列,所述事务待读队列中存储有不同读事务与待执行排序之间的对应关系。

进一步地,所述方法还包括:

若检测到所述写锁被释放,且所述事务待写数量大于0,则获取所述事务待写队列中排序在第一的写事务;

向所述排序在第一的写事务授权所述写锁,并执行所述排序在第一的写事务。

进一步地,所述若检测到所述写锁被释放之后,还包括:

若所述事务待写数量等于0,则向所述事务待读队列中的读事务均授权所述读锁,并分别执行所述事务待读队列中的读事务。

进一步地,所述执行所述事务申请指令携带的写事务之后,还包括:

若所述事务申请指令携带的写事务是数据更新事务,则对所述事务申请指令携带的写事务对应的数据对象添加脏数据标记;

若所述数据更新事务结束,则删除所述数据更新事务对应的数据对象上的所述脏数据标记。

进一步地,所述方法还包括:

若接收到携带写事务和读事务的事务申请指令,则将所述事务申请指令携带的写事务和读事务对应设置为并发写事务和并发读事务;

若所述并发读事务被授权所述写锁,则直接执行所述并发读事务;

若所述并发读事务读取到所述脏数据标记,则对所述并发读事务进行所述读锁的申请;

若申请成功,或所述并发写事务结束,则向所述并发读事务授权所述读锁,并继续执行所述并发读事务。

第二方面,本申请实施例提供了一种读写事务控制系统,应用于任一数据对象,包括:

事务待写数量获取模块,用于若接收到携带写事务的事务申请指令,则获取事务待写数量,所述事务待写数量为事务待写队列中的写事务的数量;若所述事务待写数量大于0,则将所述事务申请指令携带的写事务加入所述事务待写队列,所述事务待写队列中存储有不同写事务与待执行顺序之间的对应关系;

写锁申请模块,用于若所述事务待写数量等于0,且事务在写数量大于0,则对所述事务申请指令携带的写事务进行写锁的申请,若所述申请成功,则向所述写事务授权所述写锁,并执行所述事务申请指令携带的写事务;

读锁申请模块,用于若接收到携带读事务的事务申请指令,则获取所述事务在写数量,若所述事务在写数量大于0,且所述事务待写数量等于0,则针对所述事务申请指令携带的读事务进行读锁的申请,若所述申请成功,则向所述事务申请指令携带的读事务授权所述读锁,并执行所述事务申请指令携带的读事务。

第三方面,本申请实施例提供了一种终端设备,包括存储器、处理器以及存储在所述存储器中并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现如上述的方法。

第四方面,本申请实施例提供了一种存储介质,所述存储介质存储有计算机程序,所述计算机程序被处理器执行时实现如上述的方法。

第五方面,本申请实施例提供了一种计算机程序产品,当计算机程序产品在终端设备上运行时,使得终端设备执行上述第一方面中任一项所述的读写事务控制方法。

可以理解的是,上述第二方面至第五方面的有益效果可以参见上述第一方面中的相关描述,在此不再赘述。

为了更清楚地说明本申请实施例中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍。

图1至图2是本申请第一实施例提供的读写事务控制方法的流程图;

图3是本申请第二实施例提供的读写事务控制方法的流程图;

图4是本申请第三实施例提供的读写事务控制系统的结构示意图;

图5是本申请第四实施例提供的终端设备的结构示意图。

以下描述中,为了说明而不是为了限定,提出了诸如特定系统结构、技术之类的具体细节,以便透彻理解本申请实施例。然而,本领域的技术人员应当清楚,在没有这些具体细节的其它实施例中也可以实现本申请。在其它情况中,省略对众所周知的系统、装置、电路以及方法的详细说明,以免不必要的细节妨碍本申请的描述。

应当理解,当在本申请说明书和所附权利要求书中使用时,术语“包括”指示所描述特征、整体、步骤、操作、元素和/或组件的存在,但并不排除一个或多个其它特征、整体、步骤、操作、元素、组件和/或其集合的存在或添加。

还应当理解,在本申请说明书和所附权利要求书中使用的术语“和/或”是指相关联列出的项中的一个或多个的任何组合以及所有可能组合,并且包括这些组合。

如在本申请说明书和所附权利要求书中所使用的那样,术语“如果”可以依据上下文被解释为“当...时”或“一旦”或“响应于确定”或“响应于检测到”。类似地,短语“如果确定”或“如果检测到[所描述条件或事件]”可以依据上下文被解释为意指“一旦确定”或“响应于确定”或“一旦检测到[所描述条件或事件]”或“响应于检测到[所描述条件或事件]”。

另外,在本申请说明书和所附权利要求书的描述中,术语“第一”、“第二”、“第三”等仅用于区分描述,而不能理解为指示或暗示相对重要性。

在本申请说明书中描述的参考“一个实施例”或“一些实施例”等意味着在本申请的一个或多个实施例中包括结合该实施例描述的特定特征、结构或特点。由此,在本说明书中的不同之处出现的语句“在一个实施例中”、“在一些实施例中”、“在其他一些实施例中”、“在另外一些实施例中”等不是必然都参考相同的实施例,而是意味着“一个或多个但不是所有的实施例”,除非是以其他方式另外特别强调。术语“包括”、“包含”、“具有”及它们的变形都意味着“包括但不限于”,除非是以其他方式另外特别强调。

实施例一

请参阅图1至图2,是本申请第一实施例提供的读写事务控制方法的流程图,该读写事务控制方法应用于任一数据对象,包括步骤:

步骤S10,若接收到携带写事务的事务申请指令,则获取事务待写数量;

其中,该数据对象可以为任一的数据库或指定的数据等,当该数据对象接收到携带写事务的事务申请指令时,则获取事务待写数量,该事务待写数量为事务待写队列中的写事务的数量,该事务待写队列中存储有不同写事务与待执行顺序之间的对应关系,该事务待写队列中存储的写事务均为待执行的写事务。

例如,该事务待写队列中存储有写事务A、写事务B和写事务C时,则该事务待写数量为3个,且该事务待写队列中的待执行顺序为:写事务A-写事务B-写事务C。

步骤S20,判断所述事务待写数量是否大于0;

若所述事务待写数量大于0,则判定该事务待写队列中存储有至少一个待执行的写事务,并执行步骤S30;

步骤S30,将所述事务申请指令携带的写事务加入事务待写队列;

其中,该数据对象获取该事务申请指令的发送时间,并将该发送时间与该事务申请指令携带的写事务对应存储至事务待写队列中,即在该事务待写队列中基于写事务对应的发送时间进行不同写事务的待执行顺序的排序。

例如,当事务待写队列中依序存储有写事务A、写事务B和写事务C,且在10点01分接收到的携带写事务D的事务申请指令,在10点02分接收到的携带写事务E的事务申请指令,则将写事务D和写事务E加入该事务待写队列,该事务待写队列中的待执行顺序为:写事务A-写事务B-写事务C-写事务D-写事务E。

若所述事务待写数量不大于0,则判定事务待写数量等于0,即针对该数据对象不存在待执行的写事务,执行步骤S40;

步骤S40,获取事务在写数量,并判断所述事务在写数量是否大于0;

其中,该事务在写数量为针对该数据对象正在执行写事务的事务数量。

若该事务在写数量不大于0,判定事务在写数量等于0,即针对该数据对象不存在正在执行的写事务,执行步骤S50;

步骤S50,向所述事务申请指令携带的写事务授权写锁,并执行所述事务申请指令携带的写事务;

其中,该数据对象通过向该事务申请指令携带的写事务授权写锁的设计,使得能有效的执行该事务申请指令携带的写事务,该事务申请指令携带的写事务中存储有用户预先设置的写事务操作,该写事务操作包括读取数据、下载数据、更新数据或修改数据等,该写事务操作可以用于更新数据对象。

本实施例中,当任一写事务被授权写锁时,则执行该写事务中存储的写事务操作,若写事务未被授权该写锁,则对应的写事务未被激活,不能执行,进一步地,本实施例中,当执行任一写事务时,均不会对数据对象进行加锁,进而有效的保障了写事务与读事务之间的并发执行,提高了数据读写事务执行效率。

若该事务在写数量大于0,判定针对该数据对象存在正执行的写事务,并执行步骤S60;

步骤S60,对所述事务申请指令携带的写事务进行写锁的申请;

其中,若事务待写数量不大于0,且该事务在写数量大于0,则对该事务申请指令携带的写事务进行写锁的申请,即,若该数据对象不存在待执行的写事务,且存在正在执行的写事务,则针对该事务申请指令携带的写事务进行写锁的申请,以判断该事务申请指令携带的写事务是否能被授权进行写事务操作。

本实施例中,针对任一数据对象均只设有一个写锁,即当任一写事务被授权了写锁,则执行该被授权了的写事务,且该被授权了的写事务上的写锁未释放时,其他写事务均不能被授权该写锁,即该其他写事务均不能执行,进而防止了写事务并发执行所导致的数据错误,提高了数据对象的数据稳定性。进一步的,当该被授权了的写事务结束时,则释放该写锁。

具体的,该步骤中,通过对该事务申请指令携带的写事务进行写锁的申请设计,以采用主动查询的方式检测该事务申请指令携带的写事务是否能被授权写锁,防止了该事务申请指令携带的写事务由于采用被动方式等待被授权所导致的写事务执行效率低下的问题。

步骤S70,若申请成功,则向所述事务申请指令携带的写事务授权所述写锁,并执行所述事务申请指令携带的写事务;

其中,若针对该事务申请指令携带的写事务的写锁的申请成功,则判定针对该数据对象正在执行的写事务已经结束,对该事务申请指令携带的写事务可以授权写锁,以保障该事务申请指令携带的写事务的执行。

步骤S80,若申请失败,则将所述事务申请指令携带的写事务加入所述事务待写队列;

具体的,该步骤中,可以基于预设时间间隔的方式持续对该事务申请指令携带的写事务进行写锁的申请,当判断到针对该事务申请指令携带的写事务的申请次数大于次数阈值时,则判定针对该事务申请指令携带的写事务的写锁的申请失败,通过将该事务申请指令携带的写事务加入事务待写队列等待进行写锁的授权。

本实施例中,写事务的激活执行与针对该数据对象的读事务的状态无关,只与事务待写数量、事务在写数量和写锁的授权状态相关,该写锁的授权状态包括被授权写锁和未被授权写锁,进而保障了写事务与读事务之间的并发执行,提高了数据读写事务执行效率。

可选的,请参阅图2,该读写事务控制方法还包括以下步骤:

步骤S11,若接收到携带读事务的事务申请指令,则获取所述事务在写数量;

其中,该事务申请指令携带的读事务中存储有读事务操作,该读事务操作包括读取数据或下载数据等,该读事务操作不能对数据对象进行更新。

步骤S21,判断所述事务在写数量是否等于0;

若该事务在写数量等于0,则判定针对该数据对象不存在正在执行的写事务,并执行步骤S31;

步骤S31,向所述事务申请指令携带的读事务授权所述读锁,并执行所述事务申请指令携带的读事务;

其中,若针对该数据对象不存在正在执行的写事务,则向事务申请指令携带的读事务授权读锁,并执行该事务申请指令携带的读事务,该读锁用于授权对应读事务的读取功能,该读取功能包括读取数据或下载数据等。

本实施例中,针对任一数据对象均设有多个写锁,即针对该数据对象可以同时存在多个正执行的不同的读事务,进而保障了不同读事务与读事务之间的并发执行,提高了读事务的执行效率。

若该事务在写数量不等于0,则判定针对该数据对象存在正在执行的写事务,并执行步骤S41;

步骤S41,获取事务待写数量,并判断所述事务待写数量是否等于0;

其中,若针对该数据对象存在正在执行的写事务,则获取针对该数据对象的事务待写数量,即获取该事务待写队列中写事务的事务数量。

若该事务待写数量不等于0,则判定针对该数据对象存在待执行的写事务,并执行步骤S51;

步骤S51,将所述事务申请指令携带的读事务加入事务待读队列;

其中,该事务待读队列中存储有不同读事务与待执行顺序之间的对应关系,若针对该数据对象存在正在执行的写事务,且存在待执行的写事务,则将事务申请指令携带的的读事务加入事务待读队列等待授权写锁。

若该事务待写数量等于0,则判定针对该数据对象不存在待执行的写事务,并执行步骤S61;

步骤S61,针对所述事务申请指令携带的读事务进行读锁的申请;

其中,若针对该数据对象存在正在执行的写事务,但不存在待执行的写事务,则针对该事务申请指令携带的读事务进行读锁的申请,以判断该事务申请指令携带的读事务是否能被授权读锁。

具体的,该步骤中,通过对该事务申请指令携带的读事务进行读锁的申请设计,以采用主动查询的方式检测该事务申请指令携带的读事务是否能被授权读锁,防止了读事务由于采用被动方式等待被授权读锁所导致的读事务执行效率低下的问题。

步骤S71,若申请成功,则向所述事务申请指令携带的读事务授权所述读锁,并执行所述事务申请指令携带的读事务;

步骤S81,若申请失败,则将所述事务申请指令携带的读事务加入所述事务待读队列;

其中,针对该读锁的申请与写锁的申请相同,均可以基于预设时间间隔的方式持续对该读事务进行读锁的申请,当判断到针对该事务申请指令携带的读事务的申请次数大于次数阈值时,则判定针对该事务申请指令携带的读事务的读锁的申请失败,通过将该事务申请指令携带的读事务加入事务待读队列等待进行读锁的授权。

可选的,本实施例中,在“执行所述事务申请指令携带的写事务”之后,还包括步骤:

若所述事务申请指令携带的写事务是数据更新事务,则对所述事务申请指令携带的写事务对应的数据对象添加脏数据标记;

其中,若该事务申请指令携带的写事务是数据更新事务,则判定该事务申请指令携带的写事务需要对该数据对象进行数据更新,通过对该事务申请指令携带的写事务对应的数据对象添加脏数据标记的设计,以标记该数据对象正处于更新状态,使得用户在对该数据对象进行读取时,能有效的提示用户该数据对象当前被读取到的数据会发生更新。

可选的,该步骤中,若该数据更新事务结束,则删除该数据更新事务对应的数据对象上的脏数据标记,即当该数据更新事务结束,已经完成对该数据对象的数据更新,通过删除该数据更新事务对应的数据对象上的脏数据标记的设计,以防止对该数据对象状态的错误标记。

本实施例中,读事务和读事务是可以并发进行,写事务和写事务是串行执行,读事务和写事务并发,通过申请写锁或读锁的方式进行写事务和读事务的执行管理,无需对数据对象进行加锁,进而保障了读事务与写事务之间的并发执行,提高了读、写事务的执行效率,若事务待写数量大于0,则将事务申请指令携带的写事务加入事务待写队列,使得写事务与写事务之间串行执行,进而防止了写事务并发执行所导致的数据错误,提高了数据对象的数据稳定性。

进一步地,本实施例中,写事务与读事务的并发,采取乐观锁的策略,写事务开启的时候,申请了写锁,同时对更新的资源加上脏数据标记。读事务开启的时,不会立即申请锁,而是直接开始读取数据,只有碰到脏数据标记,表明该数据处于更新过程中,读事务才申请读锁。写事务提交之后,脏数据标记恢复正常,读事务被激活,接着读取数据。乐观锁的策略能让读锁尽可能与写事务并发进行,在实际的应用场景中,由于数据存取访问速度都是内存访问级别,事务的执行时间非常短,读写发生冲突可能性大大降低,采用乐观锁的策略管理读写事务并发,大大提高了事务数据存取访问性能。

实施例二

请参阅图3,是本申请第二实施例提供的读写事务控制方法的流程图,相对于图1对应的实施例,本实施例提供的读写事务控制方法还包括:

步骤S12,若检测到所述写锁被释放,则获取事务待写数量;

其中,若检索到被授权写锁的写事务结束时,则触发该事务待写数量的获取。

步骤S22,判断所述事务待写数量是否大于0;

其中,通过判断该事务待写数量是否大于0,以判断针对该数据对象是否存在待执行的写事务;

若所述事务待写数量大于0,则判定针对该数据对象存在待执行的写事务,并执行步骤S32;

步骤S32,获取所述事务待写队列中的排序在第一的写事务,向所述排序在第一的写事务授权所述写锁,并执行所述排序在第一的写事务;

该步骤中,若针对该数据对象存在待执行的写事务,则获取该事务待写队列中的排序在第一的写事务,即当写锁被释放,且针对该数据对象存在待执行的写事务时,则每次对该事务待写队列中的一个写事务进行写锁的授权,以保障写事务与写事务之间的串行执行。

若所述事务待写数量不大于0,则判定针对该数据对象不存在待执行的写事务,并执行步骤S42;

步骤S42,向所述事务待读队列中的读事务均授权所述读锁,并分别执行所述事务待读队列中的读事务;

其中,若写锁被释放,且针对该数据对象不存在待执行的写事务时,则同时激活并执行该事务待读队列中的所有待执行的读事务,有效的保障了读事务与读事务之间的并发执行。

可选的,本实施例中,所述方法还包括:

若接收到携带写事务和读事务的事务申请指令,则将所述事务申请指令携带的写事务和读事务对应设置为并发写事务和并发读事务;

若所述并发读事务被授权所述写锁,则直接执行所述并发读事务;

若所述并发读事务读取到所述脏数据标记,则对所述并发读事务进行所述读锁的申请;

若申请成功,或所述并发写事务结束,则向所述并发读事务授权所述读锁,并继续执行所述并发读事务;

其中,通过将该事务申请指令携带的写事务和读事务对应设置为并发写事务和并发读事务,使得该并发读事务的执行不需要申请读锁,进而保障了同一个事务申请指令中读事务和写事务之间的并发执行,提高了数据读写事务执行效率。

进一步的,若该并发读事务读取到脏数据标记,通过对该并发读事务进行读锁的申请设计,以停止该并发读事务执行,进而防止了由于数据对象处于更新状态所导致的数据读取错误,且当读锁申请成功,或该并发写事务结束时,则判定该数据对象已经完成了数据的更新,因此,通过向该并发读事务授权读锁,以保障该并发读事务的持续进行,该并发读事务被授权读锁后所读取的数据为数据对象更新后的数据。

本实施例中,当释放写锁,优先授权待执行的写事务,且每次均只对一个待执行的写事务授权写锁,保障了写事务与写事务之间的串行执行,提高了数据读写的准确性,若不存在待执行的写事务时,则同时授权所有待执行的读事务,有效的保障了读事务与读事务之间的并发执行,若该并发读事务读取到脏数据标记,通过对该并发读事务进行读锁的申请设计,以停止该并发读事务执行,进而防止了由于数据对象处于更新状态所导致的数据读取错误。

进一步地,本实施例中,读写锁的特点是写锁是串行执行,读锁可以并行执行,写锁也会阻塞读锁,在激活锁的时候,写锁优先激活,每次最多激活一个写锁,如果可以激活读锁,则所有读锁同时激活,在数据库的应用场景中,应用层对数据写入优先级要求比较高,如果有新的数据要写入,需要尽快执行,而应用层的读取次数一般远远超过写入次数,在不影响数据一致性的情况下,数据读取的性能越高越好。

实施例三

对应于上文实施例所述的读写事务控制方法,图4示出了本申请第三实施例提供的读写事务控制系统100的结构示意图,为了便于说明,仅示出了与本申请实施例相关的部分。

参照图4,该系统应用于任一数据对象,包括:事务待写数量获取模块10、写锁申请模块11和读锁申请模块12,其中:

事务待写数量获取模块10,用于若接收到携带写事务的事务申请指令,则获取事务待写数量,所述事务待写数量为事务待写队列中的写事务的数量;若所述事务待写数量大于0,则将所述事务申请指令携带的写事务加入所述事务待写队列,所述事务待写队列中存储有不同写事务与待执行顺序之间的对应关系。

写锁申请模块11,用于若所述事务待写数量等于0,且事务在写数量大于0,则对所述事务申请指令携带的写事务进行写锁的申请,若所述申请成功,则向所述写事务授权所述写锁,并执行所述事务申请指令携带的写事务。

其中,所述写锁申请模块11还用于:若所述事务待写数量等于0,且所述事务在写数量等于0,则向所述事务申请指令携带的写事务授权所述写锁,并执行所述事务申请指令携带的写事务;

若所述事务待写数量等于0,且所述事务在写数量大于0,则对所述事务申请指令携带的写事务进行所述写锁的申请,若申请失败,则将所述事务申请指令携带的写事务加入所述事务待写队列。

可选的,所述写锁申请模块11还用于:若所述事务在写数量等于0,则向所述事务申请指令携带的读事务授权所述读锁,并执行所述事务申请指令携带的读事务;

若所述事务在写数量大于0,且所述事务待写数量大于0,则将所述事务申请指令携带的读事务加入事务待读队列,所述事务待读队列中存储有不同读事务与待执行排序之间的对应关系。

读锁申请模块12,用于若接收到携带读事务的事务申请指令,则获取所述事务在写数量,若所述事务在写数量大于0,且所述事务待写数量等于0,则针对所述事务申请指令携带的读事务进行读锁的申请,若所述申请成功,则向所述事务申请指令携带的读事务授权所述读锁,并执行所述事务申请指令携带的读事务。

可选的,所述读写事务控制系统100还包括:

写锁释放控制模块13,用于若检测到所述写锁被释放,且所述事务待写数量大于0,则获取所述事务待写队列中的排序在第一的写事务;

向所述排序在第一的写事务授权所述写锁,并执行所述排序在第一的写事务。

可选的,所述写锁释放控制模块13还用于:若检测到所述写锁被释放,且所述事务待写数量等于0,则向所述事务待读队列中的读事务均授权所述读锁,并分别执行所述事务待读队列中的读事务。

脏数据标记模块14,用于若所述事务申请指令携带的写事务是数据更新事务,则对所述事务申请指令携带的写事务对应的数据对象添加脏数据标记;

若所述数据更新事务结束,则删除所述数据更新事务对应的数据对象上的所述脏数据标记。

并发事务管理模块15,用于若接收到携带写事务和读事务的事务申请指令,则将所述事务申请指令携带的写事务和读事务对应设置为并发写事务和并发读事务;

若所述并发读事务被授权所述写锁,则直接执行所述并发读事务;

若所述并发读事务读取到所述脏数据标记,则对所述并发读事务进行所述读锁的申请;

若申请成功,或所述并发写事务结束,则向所述并发读事务授权所述读锁,并继续执行所述并发读事务。

本实施例中,通过申请写锁或读锁的方式进行写事务和读事务的执行管理,无需对数据对象进行加锁,进而保障了读事务与写事务之间的并发执行,提高了读、写事务的执行效率,若事务待写数量大于0,则将事务申请指令携带的写事务加入事务待写队列,使得写事务与写事务之间串行执行,进而防止了写事务并发执行所导致的数据错误,提高了数据对象的数据稳定性。

需要说明的是,上述装置/模块之间的信息交互、执行过程等内容,由于与本申请方法实施例基于同一构思,其具体功能及带来的技术效果,具体可参见方法实施例部分,此处不再赘述。

图5为本申请第四实施例提供的终端设备2的结构示意图。如图5所示,该实施例的终端设备2包括:至少一个处理器20(图5中仅示出一个处理器)、存储器21以及存储在所述存储器21中并可在所述至少一个处理器20上运行的计算机程序22,所述处理器20执行所述计算机程序22时实现上述任意各个方法实施例中的步骤。

所述终端设备2可以是桌上型计算机、笔记本、掌上电脑及云端服务器等计算设备。该终端设备可包括,但不仅限于,处理器20、存储器21。本领域技术人员可以理解,图5仅仅是终端设备2的举例,并不构成对终端设备2的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件,例如还可以包括输入输出设备、网络接入设备等。

所称处理器20可以是中央处理单元(Central Processing Unit,CPU),该处理器20还可以是其他通用处理器、数字信号处理器(Digital Signal Processor,DSP)、专用集成电路(Application Specific Integrated Circuit,ASIC)、现场可编程门阵列(Field-Programmable Gate Array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。

所述存储器21在一些实施例中可以是所述终端设备2的内部存储单元,例如终端设备2的硬盘或内存。所述存储器21在另一些实施例中也可以是所述终端设备2的外部存储设备,例如所述终端设备2上配备的插接式硬盘,智能存储卡(Smart Media Card,SMC),安全数字(Secure Digital,SD)卡,闪存卡(Flash Card)等。进一步地,所述存储器21还可以既包括所述终端设备2的内部存储单元也包括外部存储设备。所述存储器21用于存储操作系统、应用程序、引导装载程序(BootLoader)、数据以及其他程序等,例如所述计算机程序的程序代码等。所述存储器21还可以用于暂时地存储已经输出或者将要输出的数据。

所属领域的技术人员可以清楚地了解到,为了描述的方便和简洁,仅以上述各功能单元、模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能单元、模块完成,即将所述装置的内部结构划分成不同的功能单元或模块,以完成以上描述的全部或者部分功能。实施例中的各功能单元、模块可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中,上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。另外,各功能单元、模块的具体名称也只是为了便于相互区分,并不用于限制本申请的保护范围。上述系统中单元、模块的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。

本申请实施例还提供了一种网络设备,该网络设备包括:至少一个处理器、存储器以及存储在所述存储器中并可在所述至少一个处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现上述任意各个方法实施例中的步骤。

本申请实施例还提供了一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序被处理器执行时实现可实现上述各个方法实施例中的步骤。

本申请实施例提供了一种计算机程序产品,当计算机程序产品在移动终端上运行时,使得移动终端执行时实现可实现上述各个方法实施例中的步骤。

所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请实现上述实施例方法中的全部或部分流程,可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一计算机可读存储介质中,该计算机程序在被处理器执行时,可实现上述各个方法实施例的步骤。其中,所述计算机程序包括计算机程序代码,所述计算机程序代码可以为源代码形式、对象代码形式、可执行文件或某些中间形式等。所述计算机可读介质至少可以包括:能够将计算机程序代码携带到拍照装置/终端设备的任何实体或装置、记录介质、计算机存储器、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,RandomAccess Memory)、电载波信号、电信信号以及软件分发介质。例如U盘、移动硬盘、磁碟或者光盘等。在某些司法管辖区,根据立法和专利实践,计算机可读介质不可以是电载波信号和电信信号。

在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述或记载的部分,可以参见其它实施例的相关描述。

本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请的范围。

在本申请所提供的实施例中,应该理解到,所揭露的装置/网络设备和方法,可以通过其它的方式实现。例如,以上所描述的装置/网络设备实施例仅仅是示意性的,例如,所述模块或单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通讯连接可以是通过一些接口,装置或单元的间接耦合或通讯连接,可以是电性,机械或其它的形式。

所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。

以上所述实施例仅用以说明本申请的技术方案,而非对其限制;尽管参照前述实施例对本申请进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本申请各实施例技术方案的精神和范围,均应包含在本申请的保护范围之内。

本文发布于:2023-04-13 03:22:13,感谢您对本站的认可!

本文链接:https://patent.en369.cn/patent/1/86235.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 369专利查询检索平台 豫ICP备2021025688号-20 网站地图