掌桥专利:专业的专利平台
掌桥专利
首页

一种数据库中事务并发控制的方法、装置、设备及介质

文献发布时间:2024-04-18 20:01:55


一种数据库中事务并发控制的方法、装置、设备及介质

技术领域

本发明涉及数据库技术领域,特别是涉及一种数据库中事务并发控制的方法、装置、设备及介质。

背景技术

随着数据库技术的发展,通过将全部数据存储在DRAM(Dynamic Random AccessMemory,动态随机存取存储器)中并结合轻量级的并发控制协议,主存数据库实现了较好的性能。然而,延迟敏感型应用程序进一步要求数据服务提供低且可预测的延迟,对于服务于Web搜索、电子邮件和许多其他类型的交互式服务的大型系统,在处理单个请求时,数据查询会分散到数千台数据服务器,其中可预测的低延迟非常重要。

目前,许多减少延迟的努力都集中在操作系统的各个层上,包括内核调度、队列管理和缓存机制。这些方法或通过将大请求与小请求分开来降低延迟峰值,避免由队首阻塞引起的排队延迟,或通过最小化后台操作如垃圾收集、数据压缩等带来的性能消耗来降低延迟。然而,这些方案没有关注请求冲突对延迟的影响,冲突在现代高争用的事务性工作负载中极为常见,虽然已经有大量的研究如事务调度、程序分析等致力于减轻请求冲突带来的开销,但这些技术主要关注吞吐量,而不是考虑延迟。

发明内容

鉴于上述问题,提出了以便提供克服上述问题或者至少部分地解决上述问题的一种数据库中事务并发控制的方法、装置、设备及介质,包括:

一种数据库中事务并发控制的方法,所述数据库基于两阶段锁定协议处理事务,所述方法包括:

在读取阶段,事务通过将相应的状态信息存储在锁管理器中来获取读取锁或写入锁,以在冲突事务提交时确认冲突事务之间的优先级;

将冲突检测从读取阶段延迟到提交阶段,并在提交阶段解决冲突事务时,按照冲突事务的状态信息进行序列化处理,以保证冲突事务的优先级。

可选地,还包括:

为每个工作线程创建一个私有缓冲区,并在读取阶段控制写操作在所述私有缓冲区中修改,以防止读取不完整或未提交的数据。

可选地,所述状态信息包括时间戳信息,所述序列化处理为按照时间戳顺序进行序列化处理。

可选地,所述在提交阶段解决冲突事务时,按照冲突事务的状态信息进行序列化处理,以保证冲突事务的优先级,包括:

判断当前事务的时间戳是否大于其他事务的时间戳;

如果当前事务的时间戳大于其他事务的时间戳,则中止当前事务;

如果当前事务的时间戳小于或等于其他事务的时间戳,控制提交事务等待,直到有冲突的事务提交。

可选地,还包括:

对于写写冲突,事务直接延迟获取写锁;

对于盲写操作,事务在提交阶段获取写锁;

对于读-修改-写操作,事务在读取阶段获取共享锁,并在提交阶段将共享锁升级为独占模式。

可选地,还包括:

通过使用无锁锁定的方式,在不同阶段获取锁并检测冲突。

可选地,还包括:

通过使用原子词的无锁列表实现无锁锁定;其中,在原子词中为每个工作线程分配一个位,该位的偏移量由工作线程的ID决定,当获得读锁时,将对应的位设置为1,并检查独占条目是否已经设置,如果独占条目已设置,则将其对应的位清零并等待。

一种数据库中事务并发控制的装置,所述数据库基于两阶段锁定协议处理事务,所述装置用于:

在读取阶段,事务通过将相应的状态信息存储在锁管理器中来获取读取锁或写入锁,以在冲突事务提交时确认冲突事务之间的优先级;

将冲突检测从读取阶段延迟到提交阶段,并在提交阶段解决冲突事务时,按照冲突事务的状态信息进行序列化处理,以保证冲突事务的优先级。

一种电子设备,包括处理器、存储器及存储在所述存储器上并能够在所述处理器上运行的计算机程序,所述计算机程序被所述处理器执行时实现如上所述的数据库中事务并发控制的方法。

一种计算机可读存储介质,所述计算机可读存储介质上存储计算机程序,所述计算机程序被处理器执行时实现如上所述的数据库中事务并发控制的方法。

本发明实施例具有以下优点:

在本发明实施例中,通过在读取阶段,事务通过将相应的状态信息存储在锁管理器中来获取读取锁或写入锁,以在冲突事务提交时确认冲突事务之间的优先级,将冲突检测从读取阶段延迟到提交阶段,并在提交阶段解决冲突事务时,按照冲突事务的状态信息进行序列化处理,以保证冲突事务的优先级,实现了在数据库的事务并发控制中考虑冲突对延迟的影响,通过延迟冲突检测强制执行提交优先级,避免死锁和饿死现象的发生,提升了数据库中事务处理的性能。

附图说明

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

图1是本发明一实施例提供的一种数据库中事务并发控制的方法的步骤流程图;

图2是本发明一实施例提供的另一种数据库中事务并发控制的方法的步骤流程图。

具体实施方式

为使本发明的上述目的、特征和优点能够更加明显易懂,下面结合附图和具体实施方式对本发明作进一步详细的说明。显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

对于并发控制协议,包括乐观并发控制(OCC,Optimistic Concurrency Control)和悲观两阶段锁定(2PL,Two-Phase Locking),它们在吞吐量和延迟方面各有优势。OCC假设事务之间的冲突很少见,因此它仅在提交阶段检测冲突,从而减少锁定开销并在多核服务器上有效扩展。此外,内存中的事务通常是短暂的,即使在中止率很高的情况下,OCC也能保持高效,因为重新运行中止事务的开销并不高。实际上,很多最近的工作都在讨论OCC的变体协议以提供更高的性能。

而2PL要求事务在访问记录前获取锁,2PL具有较长的锁定周期,对读锁定有特殊的要求,因此在最近的内存数据库中很少采用。然而,2PL的变体协议,如WOUND_WAIT(伤害_等待)协议在延迟方面表现很好,优于OCC协议12-20倍。对于延迟,具有高延迟的事务通常会中止多次,WOUND_WAIT通过首先提交具有较旧时间戳的事务来解决冲突。由于中止的事务仍然使用旧的时间戳,它们通常具有更高的提交优先级。因此,WOUND_WAIT通过防止中止的事务再次中止来提供低延迟。对于吞吐量,2PL效率较低,因为它在事务冲突时会产生不必要的阻塞和锁定开销。

为了提高并发事务的处理效率,通过延迟冲突检测强制执行提交优先级,避免死锁和饿死现象的发生。同时,算法设计了分阶段的锁原语,进而实现无锁锁定方式、最大限度地减少锁定开销。而且,具有悲观锁定和乐观读的性质。具体来说,事务必须在从数据库中访问记录之前获取读写锁,即悲观锁定,但是事务可以忽略锁冲突,直接访问记录而不被阻塞,即乐观读取。利用以上方法,可以同时实现高吞吐量和低延迟这两个特性,且具有灵活性、可操作性和可扩展性,提高了数据中台数据开发模块的事务处理性能,降低了系统成本,从而为用户带来更好的体验。

如图1,通过设置多个工作线程,并通过线程上下文,使用无锁锁定(原子词的无锁列表)来避免死锁、饿死等阻塞现象,且减少开销,并通过提交协议中延迟写锁获取和私有缓冲区写入,进而提供可串行化的隔离级别,以及实现高吞吐量、低延迟。

以下对各部分进行详细说明:

两阶段锁定:

2PL要求事务在写入或读取记录之前,以独占或共享模式获取记录的锁。为了确保正确性,2PL强制执行两条规则:第一,不同的事务不能同时拥有冲突的锁;第二,一旦事务放弃了锁的所有权,它就无法获得额外的锁。第二条规则将2PL分解为两个阶段(即增长阶段和收缩阶段)。当事务由于违反第一条规则而无法获取锁时,2PL会将请求事务放入等待队列,直到锁可用为止。存在许多2PL变体,以避免在等待周期中出现死锁。

WOUND_WAIT(伤害_等待)协议:

当一个事务请求某些所有者当前持有的锁时,时间戳大于的所有者被中止,即WOUND;然后,要么成为新的所有者,要么等待锁,这取决于是否所有所有者都被中止,以上过程称为WAIT。

数据结构:

假设系统启动了多个工作线程来运行客户端发布的事务。每个工作线程都拥有一个上下文(ctx),它在运行事务时包含以下信息。

·ctx.wid(16位,非零)是每个工作线程的ID。

·ctx.ts(47位)是当前运行事务的时间戳,它决定了提交阶段的序列号。

·ctx.status(1位)跟踪每个工作线程的状态,可以是正在运行,也可以是中止。使用WOUND_WAIT协议,工作线程通过切换运行该事务的线程的此字段来终止冲突事务。

在一示例中,wid、ts和status共同组成一个64位整数,该整数唯一标识当前运行的事务。所有工作线程的上下文组成一个数组,即ctx_arr[],该数组以工作者的ID为索引且可全局访问。

每个工作线程还维护当前事务的读写集。读集包含指向该事务读取的记录的指针,写集跟踪被修改的记录。同时被读取和修改的记录将同时出现在读集和写集中。写集中的每个项还拥有一个私有的缓冲区,以容纳事务对此记录的更新。

读取阶段:

工作线程在运行新事务之前初始化其上下文,并始终在实际访问记录之前获取相应的锁,如下所示:

Data:ctx_arr[]、读集、写集

1 EXECUTE(wid):

2 ctx_arr[wid].ts=new_ts();

3 ctx_arr[wid].status=running;

4...

5 LOCKRD(ctx_arr[wid]);

6...

7 LOCKWR(ctx_arr[wid]);

8 COMMIT(wid);

为了实现更高的并发性,为每条记录分配了一个锁管理器。锁管理器维护以下信息:第一,以独占方式拥有锁的当前写者w;第二,按时间戳升序排列的写者的等待名单;第三,按到达时间顺序排列的读者列表

具体而言,为了获得一个读锁,工作线程简单地忽略当前的写者并将自己直接插入到

提交阶段:

在事务完成时,工作者通过三个步骤提交事务,如下所示:

具体而言,在阶段1,工作线程在事务的写入集中检测所有记录的读写冲突。它首先将写入集中的锁升级为独占模式。独占(排他)锁会阻塞所有后来尝试获取读锁的读者,以防止它们读取到不完整的数据。当读者观察到锁处于独占模式时,如果读者拥有较小的时间戳,它将中止此提交事务,然后,读者等待直到独占锁被移除。排他锁模式的实现将在后面讨论。一旦锁处于独占模式,工作者就会通过扫描锁中的读者来检测冲突:它会杀死所有拥有更大时间戳的年轻读者,并等待年长的读者释放锁。

在阶段1之后,工作者可以安全地提交事务。在阶段2,工作者释放其读集中的所有读锁,这是通过将自己从读者列表中删除来完成的。在阶段3,工作者将修改后的记录提交到数据库并释放写锁。释放写锁包括三个步骤:从“等待名单”中删除已提交的事务,禁用独占锁定模式,并在“等待名单”中找到最年长的等待者并将锁的所有权移交给它。

活跃性:

正如并发控制算法中事务的生命周期所示,当一个事务持有一些冲突的锁时,它可以在任何阶段被其他冲突的事务杀死。因此,如果事务被杀死,该事务需要主动中止自己,这避免了循环依赖,从而确保了系统的活跃度。通过在事务同步等待锁时调用PollOnce()函数来实现这一点;请注意,一旦完成第1阶段,提交事务时就不再需要检查其状态;在这个阶段,它既不会获取更多的锁,也不会等待锁依赖。但是,其他事务不知道此类信息,并且仍可能杀死它。当工作线程运行下一个事务时,它最终会看到这个中止状态并中止当前事务,从而造成不必要的中止。通过将status和ts放在同一个64位字ctx中来解决这个问题。线程通过原子地更改整个字来中止或激活事务,只有当目标线程仍在使用原始时间戳时才会成功。

并发控制算法的抢占式中止属性(即,具有较小时间戳的事务可以中止具有较大时间戳的冲突事务)确保始终可以提交最旧的事务,因为其他冲突事务无法阻塞或中止它。此外,新生成的时间戳是单调的,被中止的事务在重新运行时仍然使用其原始时间戳。因此,一个被中止的事务在经过一定次数的重试后最终会成为最旧的事务然后提交,这从另一方面保证了协议的活跃性。鉴于以上分析,本并发控制算法没有饥饿现象,若令工作线程的数量少于物理CPU内核的数量,即使在锁管理器中使用忙等待,也不会出现死锁整个系统的情况。

插入操作:

插入操作的冲突检测是完全不同的,因为冲突发生在不存在的记录上,并且没有什么要锁定的。采用以下方法来解决这个问题,该方法在读取阶段为插入请求预先插入一条新记录。对键k的插入操作处理如下:如果k已经存在,则事务中止;否则,工作者初始化一条新记录r并提前获取它的写锁。锁获取总是成功的,因为该记录对其他并发事务仍然不可见。然后通过在索引结构中插入从的映射将记录发布到数据库。如果事务中止,则删除新插入的映射和记录。

延迟写锁获取:

盲写记录(即一个事务写入一条记录而不事先读取它)可以在提交之前被其他事务任意修改。因此,只需在提交阶段获取它们的写锁。Read-modify-write记录同时出现在read-set和write-set中。因此,只在读取阶段获取它们的读锁,并在提交事务之前将它们升级为独占模式。延迟写锁获取进一步带来了如下优化机会:通过在提交阶段获取写锁,一个事务已经拥有了一个完整的write-set,所以可以对write-set进行排序,并以一个确定的全局顺序来获取写锁,以避免死锁。通过启用延迟写锁获取,并发控制算法可以在没有任何锁阻塞的情况下完成读取阶段。

然而,发现在读取阶段过于乐观并不总是有益的。例如,在存储过程中,若并发事务过快地到达提交阶段,则本并发控制算法在使用WOUND_WAIT协议检测冲突时通常会导致较高的中止率。

无锁实现:

通过引入了latch-free locker,以无锁的方式处理读写冲突和写写冲突。前面介绍的并发控制算法将锁获取和冲突检测分解为不同的阶段,而这种独特的属性极大地简化了使用无锁数据结构实现锁原语的方式。

对于读锁,需要确保当多个读者同时在

对于写锁,只允许一个工作者独占写锁,这可以通过原子字w上的CAS指令来实现。检测写写冲突需要同时操作w和“等待名单”。但是,在“等待名单”中压入一个项并更改w的值不能以原子方式执行;;同样,释放锁并将锁交给最年长的等待者也不能以原子方式完成。当锁请求者T

使用原子词的无锁列表:

通过操作8字节原子词中的位可以进一步简化无锁列表的实现。具体来说,在原子词中为每个工作线程分配一个位,该位的偏移量由工作线程的ID,即wid决定。若要将项插入列表,工作线程只需通过fecth_and_add将相应位设置为1。为了支持独占模式,原子词的最后一位被保留作为excl_sig条目。当工作者获得读锁时,它使用fetch_and_add将对应的位设置为1,并检查excl_sig条目是否已经设置。如果已设置,读者将其对应的位清零并等待。因此,一个8字节的原子词最多可以支持63个工作线程,当添加更多工作线程时,可以对原子词进行扩充或使用无锁队列。

参照图2,示出了本发明一实施例提供的一种数据库中事务并发控制的方法的步骤流程图,所述数据库基于两阶段锁定协议处理事务。

具体的,可以包括如下步骤:

步骤201,在读取阶段,事务通过将相应的状态信息存储在锁管理器中来获取读取锁或写入锁,以在冲突事务提交时确认冲突事务之间的优先级。

步骤202,将冲突检测从读取阶段延迟到提交阶段,并在提交阶段解决冲突事务时,按照冲突事务的状态信息进行序列化处理,以保证冲突事务的优先级。

在本发明实施例中,通过使用标准的读取阶段和提交阶段处理事务。在读取阶段,事务通过将其状态(包括时间戳)存储在锁管理器中来获取读取或写入锁,这有助于在冲突事务提交时确认冲突事务之间的提交优先级。算法不会在读取阶段检查锁定冲突,因此锁定过程会立即结束。该算法将冲突检测延迟到提交阶段,算法可以确保在此阶段安全地延迟冲突,以免引起不一致的情况,并且不违反隔离性。

而且,通过在读取阶段安全地忽略冲突,事务永远不会读取不完整或未提交的数据,从而保证数据的安全性;通过在提交阶段解决冲突,事务可按时间戳顺序序列化,进而保证事务的优先级。

在本发明实施例中,可同时实现高吞吐量和低尾延迟的特性。相较于传统的并发控制算法,该算法可同时实现悲观锁定和乐观读取,乐观读取通过避免在读取阶段检测冲突来提高吞吐量。其次,悲观锁定要求事务将它们的时间戳保存在锁中,这使得算法能够按照时间戳顺序提交事务,从而提供低尾延迟。

在本发明一实施例中,还包括:

为每个工作线程创建一个私有缓冲区,并在读取阶段控制写操作在所述私有缓冲区中修改,以防止读取不完整或未提交的数据。

在本发明实施例中,为了避免在读取阶段检测读写冲突,算法为每个工作线程引入了一个私有缓冲区,读取阶段的写入事务在本地缓存更新,在此期间读取器可以直接读取此记录而不会被阻塞;同样,写入也可以绕过读取,因为读取操作无论如何都不会修改数据库。通过写操作总是先在本地缓冲区中修改,这可以防止读者在忽略写锁时读取不完整或未提交的数据。

在本发明一实施例中,所述状态信息包括时间戳信息,所述序列化处理为按照时间戳顺序进行序列化处理。

在本发明一实施例中,所述在提交阶段解决冲突事务时,按照冲突事务的状态信息进行序列化处理,以保证冲突事务的优先级,包括:

判断当前事务的时间戳是否大于其他事务的时间戳;如果当前事务的时间戳大于其他事务的时间戳,则中止当前事务;如果当前事务的时间戳小于或等于其他事务的时间戳,控制提交事务等待,直到有冲突的事务提交。

在提交阶段,通过扫描所有获取锁的事务的状态来解决潜在的冲突,如果其时间戳较大,算法会终止相应的事务;否则,算法让提交事务等待,直到有冲突的事务提交。

通过本发明实施例,在读取阶段乐观地读取记录,以消除不必要的阻塞开销,进而获得高吞吐量,在提交阶段,算法确保事务始终按照时间戳顺序提交,从而获得低延迟。

在本发明一实施例中,还包括:

对于写写冲突,事务直接延迟获取写锁;对于盲写操作,事务在提交阶段获取写锁;对于读-修改-写操作,事务在读取阶段获取共享锁,并在提交阶段将共享锁升级为独占模式。

在本发明实施例中,读者不一定会阻止写入,因为读者无论如何都不会修改记录。对于写写冲突,直接延迟获取写锁:对于盲写,即更新记录而不事先读取它,事务只需要在提交阶段获取写锁;对于读-修改-写(read-modify-writes)操作,事务在读取阶段获取共享锁,并在提交阶段将它们升级为独占模式。

在本发明一实施例中,还包括:

通过使用无锁锁定的方式,在不同阶段获取锁并检测冲突。

在本发明实施例中,分阶段进行无锁锁定并检测冲突。传统上,一个锁原语应该维护多个数据结构,这使得使用无锁数据结构原子地获取/释放锁十分困难。然而,通过在不同阶段获取锁并检测冲突,使用无锁锁定的方式,可以避免忙等造成的系统性能损失,从而提高系统的效率、降低系统的使用成本。

与只需要写锁的OCC不同,事务在读写操作时都需要锁,利用无锁方式处理冲突,以最大限度地减少锁定开销。并发控制算法将锁定过程分解为锁获取和冲突检测,这有助于使用无锁数据结构设计轻量级锁原语。该算法提供可串行化的隔离级别,且同时满足高吞吐量和低延迟这两个特性。

在本发明一实施例中,还包括:

通过使用原子词的无锁列表实现无锁锁定;其中,在原子词中为每个工作线程分配一个位,该位的偏移量由工作线程的ID决定,当获得读锁时,将对应的位设置为1,并检查独占条目是否已经设置,如果独占条目已设置,则将其对应的位清零并等待。

在本发明实施例中,使用原子词的无锁列表进行实现。通过操作8字节原子词中的位可以进一步简化无锁列表的实现。在原子词中为每个工作线程分配一个位,该位的偏移量由工作线程的ID决定。若要将项插入列表,工作线程只需通过将相应位设置为1。为了支持独占模式,原子词的最后一位被保留作为独占条目。当工作者获得读锁时,它将对应的位设置为1,并检查独占条目是否已经设置。如果已设置,读者将其对应的位清零并等待。因此,一个8字节的原子词最多可以支持63个工作线程,当添加更多工作线程时,可以对原子词进行扩充。利用位操作,锁定的效率进一步提高,原子词操作的简洁性确保了该方法的可扩展性和鲁棒性。

在本发明实施例中,通过在读取阶段,事务通过将相应的状态信息存储在锁管理器中来获取读取锁或写入锁,以在冲突事务提交时确认冲突事务之间的优先级,将冲突检测从读取阶段延迟到提交阶段,并在提交阶段解决冲突事务时,按照冲突事务的状态信息进行序列化处理,以保证冲突事务的优先级,实现了在数据库的事务并发控制中考虑冲突对延迟的影响,通过延迟冲突检测强制执行提交优先级,避免死锁和饿死现象的发生,提升了数据库中事务处理的性能。

为了并发控制算法能够正确实现串行化,将证明该算法保证了冲突可串行化,以下对并发控制算法的正确性的验证过程进行说明::

准备工作:

首先定义几个常用的符号。事务T

定义1调度:事务T

定义2串行化调度:如果在一个事务结束之前没有事务开始,则调度是串行的。

定义冲突:调度S中的写写(WW)冲突被定义为一个对(w

定义3冲突等价:若同组事务上的两个调度S、S′具有完全相同的冲突集,则它们是冲突等价的。

定义4冲突可串行化:如果一个调度与串行调度冲突等价,则它是冲突可串行化的。

对于一组已经提交的事务T

A.在调度中的任何时间点,最多有一个事务可以在同一条记录X上持有写锁。B.在同一事务中,所有锁定操作都先于所有解锁操作。此属性类似于标准2PL协议的属性。实际上,在该并发控制算法中,事务在提交时才会释放所有锁。

C.事务只有在其锁升级到独占模式后才能写入记录,无论是否启用了延迟写锁获取,在此期间其他读取器和写入器都无法访问该记录。

具体证明过程如下:

定理1:设S是并发控制算法生成的任意调度,则S是冲突可串行化的。

证明:对调度S中事务的数量使用归纳法。

对于归纳的基本情况,S仅包含一个事务T。在这种情况下,S本身就是一个串行调度,因此它是一个平凡而简单的冲突串行化。

对于归纳步骤,令S是n个事务T

设u

S:....,...,u

S′是通过将T

断言1:S′和S是冲突等价的。

断言的证明:对于三种类型的冲突,分别证明断言1。

写写冲突:考虑事务T

S:...,w

在该并发控制算法中,进行任何写入之前,事务必须拥有相应记录的写入锁。根据属性A,在任何时候最多一个事务可以持有这个锁,因此在T

然而,根据假设,u

读写冲突:考虑事务T

S:...,r

在写入操作w

考虑T

因此,调度的形式可进一步细化为:

根据假设,u

写读冲突:考虑事务T

S:...,w

事务T

第一种情况,

遵循与读写冲突情况类似的论证方法,在T

第二种情况,

但是,在T

最后,需要考虑调度S′。该调度首先包括事务T

需要说明的是,对于方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本发明实施例并不受所描述的动作顺序的限制,因为依据本发明实施例,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作并不一定是本发明实施例所必须的。

本发明一实施例提供的一种数据库中事务并发控制的装置的结构示意图,数据库基于两阶段锁定协议处理事务,该装置用于:

在读取阶段,事务通过将相应的状态信息存储在锁管理器中来获取读取锁或写入锁,以在冲突事务提交时确认冲突事务之间的优先级;

将冲突检测从读取阶段延迟到提交阶段,并在提交阶段解决冲突事务时,按照冲突事务的状态信息进行序列化处理,以保证冲突事务的优先级。

在本发明一实施例中,还用于:

为每个工作线程创建一个私有缓冲区,并在读取阶段控制写操作在所述私有缓冲区中修改,以防止读取不完整或未提交的数据。

在本发明一实施例中,所述状态信息包括时间戳信息,所述序列化处理为按照时间戳顺序进行序列化处理。

在本发明一实施例中,所述在提交阶段解决冲突事务时,按照冲突事务的状态信息进行序列化处理,以保证冲突事务的优先级,包括:

判断当前事务的时间戳是否大于其他事务的时间戳;

如果当前事务的时间戳大于其他事务的时间戳,则中止当前事务;

如果当前事务的时间戳小于或等于其他事务的时间戳,控制提交事务等待,直到有冲突的事务提交。

在本发明一实施例中,还用于:

对于写写冲突,事务直接延迟获取写锁;

对于盲写操作,事务在提交阶段获取写锁;

对于读-修改-写操作,事务在读取阶段获取共享锁,并在提交阶段将共享锁升级为独占模式。

在本发明一实施例中,还用于:

通过使用无锁锁定的方式,在不同阶段获取锁并检测冲突。

在本发明一实施例中,还用于:

通过使用原子词的无锁列表实现无锁锁定;其中,在原子词中为每个工作线程分配一个位,该位的偏移量由工作线程的ID决定,当获得读锁时,将对应的位设置为1,并检查独占条目是否已经设置,如果独占条目已设置,则将其对应的位清零并等待。

在本发明实施例中,通过在读取阶段,事务通过将相应的状态信息存储在锁管理器中来获取读取锁或写入锁,以在冲突事务提交时确认冲突事务之间的优先级,将冲突检测从读取阶段延迟到提交阶段,并在提交阶段解决冲突事务时,按照冲突事务的状态信息进行序列化处理,以保证冲突事务的优先级,实现了在数据库的事务并发控制中考虑冲突对延迟的影响,通过延迟冲突检测强制执行提交优先级,避免死锁和饿死现象的发生,提升了数据库中事务处理的性能。

本发明一实施例还提供了一种电子设备,可以包括处理器、存储器及存储在存储器上并能够在处理器上运行的计算机程序,计算机程序被处理器执行时实现如上数据库中事务并发控制的方法。

本发明一实施例还提供了一种计算机可读存储介质,计算机可读存储介质上存储计算机程序,计算机程序被处理器执行时实现如上数据库中事务并发控制的方法。

对于装置实施例而言,由于其与方法实施例基本相似,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。

需要说明的是,本申请所涉及的用户信息(包括但不限于用户设备信息、用户个人信息等)和数据(包括但不限于用于分析的数据、存储的数据、展示的数据等),均为经用户授权或者经过各方充分授权的信息和数据,并且相关数据的收集、使用和处理需要遵守相关国家和地区的相关法律法规和标准,并提供有相应的操作入口,供用户选择授权或者拒绝。

本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。

本领域内的技术人员应明白,本发明实施例可提供为方法、装置、或计算机程序产品。因此,本发明实施例可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明实施例可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。

本发明实施例是参照根据本发明实施例的方法、终端设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理终端设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理终端设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。

这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理终端设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。

这些计算机程序指令也可装载到计算机或其他可编程数据处理终端设备上,使得在计算机或其他可编程终端设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程终端设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。

尽管已描述了本发明实施例的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例做出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本发明实施例范围的所有变更和修改。

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

以上对所提供的一种数据库中事务并发控制的方法、装置、设备及介质,进行了详细介绍,本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,综上,本说明书内容不应理解为对本发明的限制。

相关技术
  • 一种配网低压电缆分支箱状态监测装置及预警方法
  • 一种钞箱控制系统和方法
  • 一种基于GA-BP神经网络的智能配钞方法及装置
  • 一种具有防抢预警功能的可穿戴装置及其预警方法
  • 一种城市暴雨和积涝分级预警装置及其预警方法
  • 一种银行钞箱的预警方法及装置
  • 一种银行小型金库钞箱专用的RFID监控预警设备
技术分类

06120116573874