CN109947742B - 面向二阶段锁的多版本数据库并发控制方法和系统 - Google Patents
面向二阶段锁的多版本数据库并发控制方法和系统 Download PDFInfo
- Publication number
- CN109947742B CN109947742B CN201910151025.4A CN201910151025A CN109947742B CN 109947742 B CN109947742 B CN 109947742B CN 201910151025 A CN201910151025 A CN 201910151025A CN 109947742 B CN109947742 B CN 109947742B
- Authority
- CN
- China
- Prior art keywords
- transaction
- read
- data
- timestamp
- lock
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明提供了一种面向二阶段锁提供高效的多版本数据库并发控制的方法和系统,利用二阶段锁作为并发控制的特点,高效的获取事务的时间戳;在多版本数据库中,为只读事务选取合适的数据读取版本,为读写事务选取合适的数据写入版本,使得只读事务和读写事务之间不会受到锁的竞争带来的影响。和传统的二阶段锁相比,只读事务和读写事务之间没有冲突,极大的提升了只读事务和读写事务的性能。和传统的时间戳方法相比,不需要一个中心的时间戳服务器,因此不会给事务带来额外的通信开销和性能瓶颈。
Description
技术领域
本发明涉及数据库并发处理技术领域,具体地,涉及一种面向二阶段锁的多版本数据库并发控制方法和系统。
背景技术
数据库事务极大的简化了开发人员对应用的开发:开发人员无需推导数据在并发访问下的正确性以及可靠性,只需要关注应用的实现逻辑。开发人员一般希望数据库能够提供可序列化隔离级别。
然而,数据库的并发控制通常具有比较大的开销,尤其是当用户的事务变得复杂。因此,传统的数据库通常提供了比可序列化弱的隔离级别。一个较弱的隔离级别会给用户返回不一致的数据,降低用户的使用体验,并造成经济损失。
有研究表明,一般复杂的事务为只读事务,即不修改数据库数据的事务。只读事务可以用多版本数据库高效的支持,只读事务只需要访问一个数据库快照,这样只读事务和读写事务之间不会受到影响。
多版本数据库可以高效的支持只读事务,通常多版本数据库需要一个时间戳来支持,然而很难高效的实现时间戳。对于修改数据的读写事务,他需要一个时间戳来确认数据的新版本。对于只读事务来说,需要一个时间戳来选择数据读取的版本。因此,如何实现时间戳对事务来说非常重要。
传统的系统中,通常使用一个中心服务器来管理所有的时间戳。这方便时间戳的管理,然而却对性能带来影响,尤其是在分布式环境中。这是因为所有的数据通信都需要和中心服务器来通信,造成额外的通信开销。同时,一个中心的服务器会成为分布式系统中的瓶颈。
发明内容
针对现有技术中的缺陷,本发明的目的是提供一种面向二阶段锁的多版本数据库并发控制方法和系统。
根据本发明提供的一种面向二阶段锁的多版本数据库并发控制方法,包括:
读写事务开始步骤:读写事务开始时,获取事务本地的时间戳,记为事务时间戳;
二阶段锁读取步骤:读写事务使用二阶段锁读取或者修改数据时,将事务时间戳更新为比所述数据的数据时间戳大;
事务提交前步骤:读写事务使用二阶段锁提交事务前,将事务时间戳增加;
事务提交时步骤:读写事务使用二阶段锁提交事务时,将事务时间戳写回数据中。
优选地,所述的面向二阶段锁的多版本数据库并发控制方法,还包括:
只读事务读取步骤:将数据时间戳和事务时间戳进行比较,得到数值较大的时间戳,将数据的数据时间戳更新为所述时间戳;
二阶段释放步骤:当当前要读取的数据的二阶段锁被释放后,只读事务使用事务时间戳读取一个数据库快照。
根据本发明提供的一种面向二阶段锁的多版本数据库并发控制系统,包括:
读写事务开始模块:读写事务开始时,获取事务本地的时间戳,记为事务时间戳;
二阶段锁读取模块:读写事务使用二阶段锁读取或者修改数据时,将事务时间戳更新为比所述数据的数据时间戳大;
事务提交前模块:读写事务使用二阶段锁提交事务前,将事务时间戳增加;
事务提交时模块:读写事务使用二阶段锁提交事务时,将事务时间戳写回数据中。
优选地,所述的面向二阶段锁的多版本数据库并发控制系统,还包括:
只读事务读取模块:将数据时间戳和事务时间戳进行比较,得到数值较大的时间戳,将数据的数据时间戳更新为所述时间戳;
二阶段释放模块:当当前要读取的数据的二阶段锁被释放后,只读事务使用事务时间戳读取一个数据库快照。
优选地,所述获取事务本地的时间戳能够使用系统当前的物理时钟,或者将事务时间戳初始化为0。
优选地,所述二阶段锁读取步骤中,事务时间戳更新需要在事务利用二阶段锁对数据上锁成功之后。
优选地,所述事务提交时步骤中,将事务时间戳写回数据中需要在事务利用二阶段锁对数据放锁之前。
优选地,所述事务提交时步骤中,所述数据包括事务的只读数据和读写数据。
优选地,所述二阶段释放步骤中,若当前要读取的数据没有被上锁,则无需等待二阶段锁释放,只读事务使用事务时间戳读取一个数据库快照。
与现有技术相比,本发明具有如下的有益效果:
1、能够在使用二阶段锁的数据库上支持多版本数据库,并提供了可序列化的隔离级别;
2、时间戳以分布式的方式进行获取,避免了分布式系统中的性能瓶颈;
3、读写事务和只读事务之间不会有锁的竞争,减少系统被阻塞的时间。
附图说明
通过阅读参照以下附图对非限制性实施例所作的详细描述,本发明的其它特征、目的和优点将会变得更明显:
图1为本发明的数据存储结构示意图;
图2至图6为本发明的二阶段锁执行步骤示意图。
具体实施方式
下面结合具体实施例对本发明进行详细说明。以下实施例将有助于本领域的技术人员进一步理解本发明,但不以任何形式限制本发明。应当指出的是,对本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变化和改进。这些都属于本发明的保护范围。
本发明利用二阶段锁作为并发控制的特点,高效的获取事务的时间戳;在多版本数据库中,为只读事务选取合适的数据读取版本,为读写事务选取合适的数据写入版本,使得只读事务和读写事务之间不会受到锁的竞争带来的影响。本发明利用数据库事务的并发控制来进行时间戳管理,这样完全绕过了中心的服务器,从而减少了数据之间的通信,去除了系统中的性能瓶颈。本发明中的时间戳作为整数处理,能够直接比较大小,本发明利用二阶段锁的并发控制来管理时间戳,从而为利用二阶段锁的数据库系统提供高效的多版本支持,用来支持多版本的时间戳的获取和更新方法和原先二阶段锁相比非常小。
根据本发明提供的一种面向二阶段锁的多版本数据库并发控制方法,包括:
读写事务开始步骤:读写事务开始时,获取事务本地的时间戳,记为事务时间戳;
二阶段锁读取步骤:读写事务使用二阶段锁读取或者修改数据时,将事务时间戳更新为比所述数据的数据时间戳大;
事务提交前步骤:读写事务使用二阶段锁提交事务前,将事务时间戳增加;
事务提交时步骤:读写事务使用二阶段锁提交事务时,将事务时间戳写回数据中。
具体地,所述的面向二阶段锁的多版本数据库并发控制方法,还包括:
只读事务读取步骤:将数据时间戳和事务时间戳进行比较,得到数值较大的时间戳,将数据的数据时间戳更新为所述时间戳;
二阶段释放步骤:当当前要读取的数据的二阶段锁被释放后,只读事务使用事务时间戳读取一个数据库快照。
根据本发明提供的一种面向二阶段锁的多版本数据库并发控制系统,包括:
读写事务开始模块:读写事务开始时,获取事务本地的时间戳,记为事务时间戳;
二阶段锁读取模块:读写事务使用二阶段锁读取或者修改数据时,将事务时间戳更新为比所述数据的数据时间戳大;
事务提交前模块:读写事务使用二阶段锁提交事务前,将事务时间戳增加;
事务提交时模块:读写事务使用二阶段锁提交事务时,将事务时间戳写回数据中。
具体地,所述的面向二阶段锁的多版本数据库并发控制系统,还包括:
只读事务读取模块:将数据时间戳和事务时间戳进行比较,得到数值较大的时间戳,将数据的数据时间戳更新为所述时间戳;
二阶段释放模块:当当前要读取的数据的二阶段锁被释放后,只读事务使用事务时间戳读取一个数据库快照。
具体地,所述获取事务本地的时间戳能够使用系统当前的物理时钟,或者将事务时间戳初始化为0。
具体地,所述二阶段锁读取步骤中,事务时间戳更新需要在事务利用二阶段锁对数据上锁成功之后。
具体地,所述事务提交时步骤中,将事务时间戳写回数据中需要在事务利用二阶段锁对数据放锁之前。
具体地,所述事务提交时步骤中,所述数据包括事务的只读数据和读写数据。
具体地,所述二阶段释放步骤中,若当前要读取的数据没有被上锁,则无需等待二阶段锁释放,只读事务使用事务时间戳读取一个数据库快照。
本发明提供的面向二阶段锁的多版本数据库并发控制系统,可以通过面向二阶段锁的多版本数据库并发控制方法的步骤流程实现。本领域技术人员可以将面向二阶段锁的多版本数据库并发控制方法理解为所述面向二阶段锁的多版本数据库并发控制系统的优选例。
下面结合附图对本发明作进一步说明。
如图1所示,本发明对传统数据存储结构进行修改,所述修改基于一个传统的多版本数据存储。在传统的多版本数据库中,数据会有多个拷贝,每个拷贝存储了数据的版本和这个版本对应的数据(new_ver对应版本,data对应这个版本的数据)。数据的版本之间通常使用指针来进行访问,不同版本之间可以通过old_ver这个指针进行访问(在本附图的例子中,不同版本是从最新的版本遍历到旧的版本,这也是最常见的连接方式)。本发明对数据结构的修改是,数据的最新版本额外存储了一个时间戳(ts)。
如图2、图3、图4、图5、图6所示,本发明针对二阶段锁的各个步骤的进行补充。如图2所示,在事务开始的时候,相比较传统的二阶段锁,事务需要额外的获取一个时间戳,这个时间戳可以是任意的整数,例如0;在事务使用二阶段锁读取或者修改数据之前,二阶段锁会对数据进行上锁。相比较传统的二阶段锁,事务在上锁之后根据数据的时间戳(ts)更新事务的时间戳。如图3所示,事务将自身的时间戳更新为不比当前读取数据的时间戳小;和传统的二阶段锁不同,对于只读事务来说,无需对读的数据进行拿锁操作,如图4所示。事务首先将数据的时间戳更新为比自身时间戳更大,随后等待当前数据上的锁被释放,如果数据没被上锁则可以跳过这个步骤。随后,事务可以按照传统多版本数据库的只读方法,遍历数据的多个版本,找到第一个小于事务时间戳的数据版本的数据,并将这个数据返回给用户;在事务提交前,事务需要更新下自身的时间戳,将其加1,如图5所示。这保证了事务的时间戳比其读写的所有数据的时间戳都大;在事务使用二阶段锁提交事务时,二阶段锁会对数据进行解锁。相比较传统的二阶段锁的执行,事务解锁数据的锁之前,事务需将自身的时间戳写入数据的时间戳,随后按照传统的多版本数据库写入方法,将事务的时间戳作为数据的新版本写入,如图6所示。
没有直接注明的操作,例如何时提交事务,和原先的二阶段锁的协议一致,因此不作额外的说明。
本领域技术人员知道,除了以纯计算机可读程序代码方式实现本发明提供的系统、装置及其各个模块以外,完全可以通过将方法步骤进行逻辑编程来使得本发明提供的系统、装置及其各个模块以逻辑门、开关、专用集成电路、可编程逻辑控制器以及嵌入式微控制器等的形式来实现相同程序。所以,本发明提供的系统、装置及其各个模块可以被认为是一种硬件部件,而对其内包括的用于实现各种程序的模块也可以视为硬件部件内的结构;也可以将用于实现各种功能的模块视为既可以是实现方法的软件程序又可以是硬件部件内的结构。
以上对本发明的具体实施例进行了描述。需要理解的是,本发明并不局限于上述特定实施方式,本领域技术人员可以在权利要求的范围内做出各种变化或修改,这并不影响本发明的实质内容。在不冲突的情况下,本申请的实施例和实施例中的特征可以任意相互组合。
Claims (9)
1.一种面向二阶段锁的多版本数据库并发控制方法,其特征在于,包括:
读写事务开始步骤:读写事务开始时,获取事务本地的时间戳,记为事务时间戳;
二阶段锁读取步骤:读写事务使用二阶段锁读取或者修改数据时,将事务时间戳更新为比所述数据的数据时间戳大;
事务提交前步骤:读写事务使用二阶段锁提交事务前,将事务时间戳增加;
事务提交时步骤:读写事务使用二阶段锁提交事务时,将事务时间戳写回数据中;
能够在使用二阶段锁的数据库上支持多版本数据库,并提供了可序列化的隔离级别;
时间戳以分布式的方式进行获取,避免分布式系统中的性能瓶颈;
读写事务和只读事务之间不会有锁的竞争,减少系统被阻塞的时间。
2.根据权利要求1所述的面向二阶段锁的多版本数据库并发控制方法,其特征在于,还包括:
只读事务读取步骤:将数据时间戳和事务时间戳进行比较,得到数值较大的时间戳,将数据的数据时间戳更新为所述时间戳;
二阶段释放步骤:当当前要读取的数据的二阶段锁被释放后,只读事务使用事务时间戳读取一个数据库快照。
3.根据权利要求1所述的面向二阶段锁的多版本数据库并发控制方法,其特征在于,所述获取事务本地的时间戳能够使用本地当前的物理时钟,或者将事务时间戳初始化为0。
4.根据权利要求1所述的面向二阶段锁的多版本数据库并发控制方法,其特征在于,所述二阶段锁读取步骤中,事务时间戳更新需要在事务利用二阶段锁对数据上锁成功之后。
5.根据权利要求1所述的面向二阶段锁的多版本数据库并发控制方法,其特征在于,所述事务提交时步骤中,将事务时间戳写回数据中需要在事务利用二阶段锁对数据放锁之前。
6.根据权利要求1所述的面向二阶段锁的多版本数据库并发控制方法,其特征在于,所述事务提交时步骤中,所述数据包括事务的只读数据和读写数据。
7.根据权利要求2所述的面向二阶段锁的多版本数据库并发控制方法,其特征在于,所述二阶段释放步骤中,若当前要读取的数据没有被上锁,则无需等待二阶段锁释放,只读事务使用事务时间戳读取一个数据库快照。
8.一种面向二阶段锁的多版本数据库并发控制系统,其特征在于,包括:
读写事务开始模块:读写事务开始时,获取事务本地的时间戳,记为事务时间戳;
二阶段锁读取模块:读写事务使用二阶段锁读取或者修改数据时,将事务时间戳更新为比所述数据的数据时间戳大;
事务提交前模块:读写事务使用二阶段锁提交事务前,将事务时间戳增加;
事务提交时模块:读写事务使用二阶段锁提交事务时,将事务时间戳写回数据中;
能够在使用二阶段锁的数据库上支持多版本数据库,并提供了可序列化的隔离级别;
时间戳以分布式的方式进行获取,避免分布式系统中的性能瓶颈;
读写事务和只读事务之间不会有锁的竞争,减少系统被阻塞的时间。
9.根据权利要求8所述的面向二阶段锁的多版本数据库并发控制系统,其特征在于,还包括:
只读事务读取模块:将数据时间戳和事务时间戳进行比较,得到数值较大的时间戳,将数据的数据时间戳更新为所述时间戳;
二阶段释放模块:当当前要读取的数据的二阶段锁被释放后,只读事务使用事务时间戳读取一个数据库快照。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910151025.4A CN109947742B (zh) | 2019-02-28 | 2019-02-28 | 面向二阶段锁的多版本数据库并发控制方法和系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910151025.4A CN109947742B (zh) | 2019-02-28 | 2019-02-28 | 面向二阶段锁的多版本数据库并发控制方法和系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109947742A CN109947742A (zh) | 2019-06-28 |
CN109947742B true CN109947742B (zh) | 2021-08-03 |
Family
ID=67008077
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910151025.4A Active CN109947742B (zh) | 2019-02-28 | 2019-02-28 | 面向二阶段锁的多版本数据库并发控制方法和系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109947742B (zh) |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110955672B (zh) * | 2019-11-25 | 2023-03-24 | 上海交通大学 | 面向乐观并发控制的多版本支持方法及系统 |
CN111125036A (zh) * | 2019-12-24 | 2020-05-08 | 北京墨迹风云科技股份有限公司 | 并发量控制方法、装置及系统 |
CN111259071B (zh) * | 2020-01-04 | 2022-08-05 | 浙江科技学院 | 一种分布式数据库系统中的并发访问控制方法 |
CN111858629B (zh) * | 2020-07-02 | 2023-08-22 | 北京奥星贝斯科技有限公司 | 二阶段提交分布式事务更新数据库的实现方法和装置 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101699439A (zh) * | 2009-11-16 | 2010-04-28 | 中兴通讯股份有限公司 | 一种数据库的事务提交方法和装置 |
CN102682071A (zh) * | 2011-03-07 | 2012-09-19 | 微软公司 | 用于主存储器数据库的高效的多版本锁定 |
CN103744936A (zh) * | 2013-12-31 | 2014-04-23 | 华为技术有限公司 | 一种数据库中的多版本并发控制方法及数据库系统 |
CN105138310A (zh) * | 2015-07-17 | 2015-12-09 | 北京京东尚科信息技术有限公司 | 一种并发访问控制方法和系统 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10423603B2 (en) * | 2016-06-21 | 2019-09-24 | Unisys Corporation | Systems and methods for implementing a multi-host record lock mechanism |
-
2019
- 2019-02-28 CN CN201910151025.4A patent/CN109947742B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101699439A (zh) * | 2009-11-16 | 2010-04-28 | 中兴通讯股份有限公司 | 一种数据库的事务提交方法和装置 |
CN102682071A (zh) * | 2011-03-07 | 2012-09-19 | 微软公司 | 用于主存储器数据库的高效的多版本锁定 |
CN103744936A (zh) * | 2013-12-31 | 2014-04-23 | 华为技术有限公司 | 一种数据库中的多版本并发控制方法及数据库系统 |
CN105138310A (zh) * | 2015-07-17 | 2015-12-09 | 北京京东尚科信息技术有限公司 | 一种并发访问控制方法和系统 |
Also Published As
Publication number | Publication date |
---|---|
CN109947742A (zh) | 2019-06-28 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109947742B (zh) | 面向二阶段锁的多版本数据库并发控制方法和系统 | |
EP3117348B1 (en) | Systems and methods to optimize multi-version support in indexes | |
Zhou et al. | Foundationdb: A distributed unbundled transactional key value store | |
US11386065B2 (en) | Database concurrency control through hash-bucket latching | |
US5581750A (en) | System and method for improving data recovery performance | |
US4868744A (en) | Method for restarting a long-running, fault-tolerant operation in a transaction-oriented data base system without burdening the system log | |
CN101495976B (zh) | 用于直接更新软件事务存储器的方法和系统 | |
US8046334B2 (en) | Dual access to concurrent data in a database management system | |
US20180322156A1 (en) | Atomic processing of compound database transactions that modify a metadata entity | |
US9009125B2 (en) | Creating and maintaining order of a log stream | |
US9805088B2 (en) | Constraint-based consistency with snapshot isolation | |
US8108627B2 (en) | Array comparison and swap operations | |
JPH0679285B2 (ja) | トランザクション処理方法およびシステム | |
US7548919B2 (en) | Computer program product for conducting a lock free read | |
JP2008515055A (ja) | トランザクショナルなメモリアクセスのハイブリッドハードウェア・ソフトウェア実現のための方法及び装置 | |
EP2590078A2 (en) | Shadow paging based log segment directory | |
US20140040208A1 (en) | Early release of transaction locks based on tags | |
CN110955672B (zh) | 面向乐观并发控制的多版本支持方法及系统 | |
US20030208489A1 (en) | Method for ordering parallel operations in a resource manager | |
US7617212B2 (en) | System and method for controlling access to a database | |
CN107391539A (zh) | 事务处理方法、服务器和存储介质 | |
CN111143277B (zh) | 一种数据处理方法、装置及电子设备 | |
CN109358817B (zh) | 用于复制数据的方法、装置和系统 | |
Zhou et al. | FoundationDB: A Distributed Key Value Store | |
CN116910064A (zh) | 一种分布式系统中在线创建表索引方法和系统 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |