CN102682071B - 用于主存储器数据库的高效的多版本锁定 - Google Patents
用于主存储器数据库的高效的多版本锁定 Download PDFInfo
- Publication number
- CN102682071B CN102682071B CN201210057483.XA CN201210057483A CN102682071B CN 102682071 B CN102682071 B CN 102682071B CN 201210057483 A CN201210057483 A CN 201210057483A CN 102682071 B CN102682071 B CN 102682071B
- Authority
- CN
- China
- Prior art keywords
- affairs
- version
- reading
- dependency
- labelling
- 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
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/23—Updating
- G06F16/2308—Concurrency control
- G06F16/2315—Optimistic concurrency control
- G06F16/2329—Optimistic concurrency control using versioning
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/245—Query processing
- G06F16/2458—Special types of queries, e.g. statistical queries, fuzzy queries or distributed queries
- G06F16/2471—Distributed queries
Abstract
本发明涉及用于主存储器数据库的高效的多版本锁定。事务创建对实现多版本并发控制方案的主存储器数据库中的版本的等待依赖性。等待依赖性允许该事务在其他事务正读取版本的同时更新该版本。多版本并发控制方案还允许与等待依赖性并发地实现提交依赖性。提交依赖性允许事务在提交更新的版本之前读取该更新的版本。
Description
技术领域
本发明涉及数据库管理,尤其涉及数据的并发控制。
背景技术
主存储器正变得足够的大,从而大部分在线事务处理数据库的工作集可被存储在存储器中。为存储器内存储而优化的数据库系统与当前系统相比可支持高得多的事务率。然而,标准并发控制方法无法缩放至这样的系统可实现的高事务率。
为存储器内存储而优化且在多核处理器上运行的数据库系统可支持非常高的事务率和并发水平。在这样的环境中,高效地确保并发执行的事务之间的隔离变得具有挑战性。当前的数据库系统通常通过锁定来实现隔离。然而,传统的单版本锁定遭受可缩放性约束,从而使得传统的锁定不适用于具有非常高的事务率的系统。
发明内容
本发明涉及用于通过主存储器数据库中的高效的多版本锁定来实现并发控制的方法、系统和计算机程序产品,其中锁是非阻塞的且事务的正确排序是由依赖性机制来实施的。
在一个实施例中,第一事务将读取标记(也称为读取锁)放置在数据库中的记录的一版本上。该读取标记指示第一事务正读取该记录的该版本,但不阻止另一事务并发地读取或更新该记录。在第一事务终止之前,第二事务获取该记录的该版本上的写锁定。写锁定阻止另一事务更新该记录的该版本。第二事务还创建对该版本的等待依赖性。第二事务继续处理,但等待直到第一事务终止并移除该版本上的读取记录才开始它的提交。
在另一实施例中,一个或多个第一事务各自将扫描标记放置在散列表中的桶上。第二事务随后试图将记录的新的版本添加到该桶。第二事务在检测到该桶上的一个或多个扫描标记之后创建对该一个或多个第一事务中的每一个的等待依赖性。第二事务继续处理,但等待直到一个或多个第一事务中的每一个终止才开始它的提交。
在另一实施例中,第一事务获取记录的一版本的写锁定。当该版本被第一事务写锁定的同时,第二事务试图将读取标记放置在该版本上。在确定该版本由第一事务写锁定之后,第二事务创建针对第一事务对该版本的等待依赖性,并将读取标记放置在该版本上。等待依赖性使得第一事务等待直到第二事务终止之后才开始它的提交。
提供本发明内容以便以简化形式介绍将在以下具体实施方式中进一步描述的一些概念。本发明内容并非旨在标识所要求保护的主题的关键特征或必要特征,也不旨在用于帮助确定所要求保护的主题的范围。
本发明的附加特征和优点将在以下描述中叙述,且其一部分根据本描述将是显而易见的,或可通过对本发明的实践来获知。本发明的特征和优点可通过在所附权利要求书中特别指出的工具和组合来实现和获得。本发明的这些和其他特征将通过以下描述和所附权利要求书变得更加显而易见,或可通过对下文中所述的本发明的实践来领会。
附图说明
为了描述可获得本发明的上述和其他优点和特征的方式,将通过参考附图中示出的本发明的具体实施例来呈现以上简要描述的本发明的更具体描述。可以理解,这些附图仅描述本发明的典型实施例,从而不被认为是对其范围的限制,本发明将通过使用附图用附加特征和细节来描述和说明,在附图中:
图1示出根据一个或多个实施例的如何设置版本的时间戳的示例。
图2示出根据一个或多个实施例的表示记录锁的示例性数据结构。
图3示出根据一个或多个实施例的表示事务对象的示例性数据结构。
图4示出根据一个或多个实施例的表示扫描标记的示例性数据结构。
图5示出用于当事务获取对当前向其发放读取标记的一版本的写锁定时创建对等待依赖性的方法的流程图。
图6示出用于当事务将新版本添加到被一个或多个其他事务锁定的桶时创建对等待依赖性的方法的流程图。
图7示出用于当事务获取对已经被另一事务写锁定的版本上的读取标记时创建对等待依赖性的方法的流程图。
图8示出根据一个或多个实施例的表示事务对象的示例性数据结构。
具体实施方式
本发明涉及用于在主存储器数据库中实现多版本并发控制的方法、系统和计算机程序产品,其中锁是非阻塞的且事务的正确排序是由依赖性机制来实施的。本发明还包括可同时实现乐观和悲观事务的多版本并发控制数据库的各实施例。
在一个实施例中,第一事务将读取标记放置在数据库中的记录的一版本上。该读取标记指示第一事务正读取该记录的该版本,但不阻止另一事务并发地读取或更新该记录。在第一事务终止之前,第二事务获取该记录的该版本上的写锁定。写锁定阻止另一事务更新该记录的该版本。第二事务还创建对该版本的等待依赖性。第二事务继续处理,但等待直到第一事务终止并移除其在该版本上的读取记录才开始它的提交。
在另一实施例中,一个或多个第一事务中的每一个将扫描标记放置在散列表中的桶上。第二事务随后试图将记录的新的版本添加到该桶。第二事务在检测到该桶上的一个或多个扫描标记之后创建对该一个或多个第一事务中的每一个的等待依赖性。第二事务继续处理,但等待直到一个或多个第一事务中的每一个终止才开始它的提交。
在另一实施例中,第一事务获取记录的一版本的写锁定。当该版本被第一事务写锁定的同时,第二事务试图将读取标记放置在该版本上。在确定该版本由第一事务写锁定之后,第二事务创建针对第一事务的对该版本的等待依赖性,并将读取标记放置在该版本上。等待依赖性使得第一事务等待直到第二事务终止之后才开始它的提交。
本发明的各实施例可包括或利用专用或通用计算机,该专用或通用计算机包括诸如例如一个或多个处理器和系统存储器等计算机硬件,如以下更详细讨论的。本发明范围内的各实施例还包括用于承载或存储计算机可执行指令和/或数据结构的物理和其他计算机可读介质。这样的计算机可读介质可以是可由通用或专用计算机访问的任何可用介质。存储计算机可执行指令的计算机可读介质是物体计算机存储介质(设备)。承载计算机可执行指令的计算机可读介质是传输介质。由此,作为示例而非限制,本发明的各实施例可包括至少两种显著不同的计算机可读介质:计算机存储介质(设备)和传输介质。
计算机存储介质(设备)包括RAM、ROM、EEPROM、CD-ROM、DVD或其他光盘存储、磁盘存储或其他磁存储设备、或可用于存储计算机可执行指令或数据结构形式的所需程序代码装置(软件)且可由通用或专用计算机中的一个或多个处理器访问并执行以实现本发明的各方面的任何其他介质,以使得它们不仅仅是瞬态载波或传播信号。
“网络”被定义为允许在计算机和/或模块和/或其他电子设备之间传输电子数据的一个或多个数据链路。当信息通过网络或另一个通信连接(硬连线、无线、或者硬连线或无线的组合)传输或提供给计算机时,该计算机将该连接适当地视为传输介质。传输介质可包括可用于携带计算机可执行指令或数据结构形式的所需程序代码装置且可由通用或专用计算机访问的网络和/或数据链路。上述的组合也应被包括在计算机可读介质的范围内。
此外,在到达各种计算机系统组件之后,计算机可执行指令或数据结构形式的程序代码装置可从传输介质自动转移到计算机存储介质(设备)(或者相反)。例如,通过网络或数据链路接收到的计算机可执行指令或数据结构可被缓存在网络接口模块(例如,“NIC”)内的RAM中,然后最终被传送到计算机系统RAM和/或计算机系统处的较不易失性的计算机存储介质(设备)。因而,应当理解,计算机存储介质(设备)可被包括在同样(或甚至主要)利用传输介质的计算机组件中。
计算机可执行指令例如包括,当在一个或多个处理器处执行时使通用计算机、专用计算机、或专用处理设备执行某一功能或某组功能的指令和数据。计算机可执行指令可以是例如二进制代码、诸如汇编语言之类的中间格式指令、或甚至源代码。尽管用结构特征和/或方法动作专用的语言描述了本主题,但可以理解,所附权利要求书中定义的主题不必限于上述特征或动作。相反,上述特征和动作是作为实现权利要求的示例形式而公开的。
本领域的技术人员将理解,本发明可以在具有许多类型的计算机配置的网络计算环境中实践,这些计算机系统配置包括个人计算机、台式计算机、膝上型计算机、消息处理器、手持式设备、多处理器系统、基于微处理器的或可编程消费电子设备、网络PC、小型计算机、大型计算机、移动电话、PDA、寻呼机、路由器、交换机等等。本发明也可以在通过网络链接(或者通过硬连线数据链路、无线数据链路,或者通过硬连线和无线数据链路的组合)的本地和远程计算机两者都执行任务的分布式系统环境中实践。在分布式系统环境中,程序模块可位于本地和远程存储器存储设备中。
在讨论使用悲观事务来实现本发明的多版本并发控制方案之前,将描述可在本发明中使用的示例性多版本并发控制方案的各基本概念。在这一示例性多版本并发控制方案中,事务被给予分别指示事务的开始和结束事件的逻辑时间的两个唯一的时间戳。这些时间戳用于定义事务事件之间的总体顺序。时间戳,如此处所使用的,可以是从单调递增计数器接收的值,且不限于时钟值。
例如,当事务开始时,它可通过读取并递增时间戳计数器来接收时间戳。该开始时间戳唯一地标识了该事务并因此在某些实施例中可充当事务id。当事务终止时,它还可通过读取时间戳计数器并递增该计数器来接收结束时间戳。如果事务通过提交而终止,则这一结束时间戳还可充当其提交时间戳。时间戳的这一使用使得多版本化方案能够保留并发事务之间的可串行化。
主存储器数据库中的记录被版本化以允许多个事务的并发访问。时间戳还用于标识记录的各版本以及它们的有效时间。例如,记录的提交版本包含两个时间戳,开始时间戳和结束时间戳。提交版本的开始时间戳等于创建该版本的事务的提交时间。例如,如果事务T1在其处理期间创建记录的一版本(诸如通过修改现有的记录或创建新的记录),则所创建的版本将接收与事务T1的提交时间戳相同的开始时间戳。
版本的结束时间戳最初被设为指示该时间戳尚未确定的值,诸如无穷大。然而,当另一事务T2提交对该版本的修改时(无论是对该版本的更新(因此创建新的版本)、还是对该版本的删除),该版本的结束时间戳被设为事务T2的提交时间戳。换言之,一旦T2提交(并因此使得它的该记录的新版本或对该记录的删除是持久的),该记录的前一版本就不再有效。
在T2提交之前,该版本的结束时间戳被设为T2的事务ID,因为T2的提交时间尚未可知。出于相同原因,这一相同的事务ID最初还用作新版本的开始时间戳。因此,当事务创建新版本时,它将其事务ID分配给正被修改的版本的结束时间戳和新版本的开始时间戳。一旦T2提交,它写入其提交时间戳作为旧版本的结束时间戳以及作为新版本的开始时间戳。为对包含有效时间戳的版本以及具有临时事务ID被分配为其时间戳的版本之间进行区分,可以使用标志。
图1示出版本V2的示例性生存期以及如何设置其时间戳。在时间t1,事务T1通过更新在先版本来创建版本V2。T1将V2的开始时间戳设为其自己的事务ID而将V2的结束时间戳设为诸如无穷大之类的值以指示该结束时间戳是尚未确定的。因为V2的开始时间戳被设为T1的事务ID,其他事务可发现T1的事务对象并因此确定T1的状态。T1还将版本V1(被更新以创建V2的版本)的结束时间戳设为T1的事务ID,以向其他事务指示V1已被更新且被写锁定。
在时间t2,T1预先提交。预先提交涉及在提交之前T1获得结束时间戳并进入有效阶段。这一时间t2是V2的有效时间的开始。然而,因为T1尚未提交并仍然可能中止,所以V2的存在性仍然存疑。因此,V2的开始时间戳保留为T1的事务ID。
在时间t3,T1完成有效阶段并提交。在时间t4,T1随后将V2的开始时间戳从其事务ID更新为其结束时间戳t2。因此,V2的开始时间戳指示T1一提交(这使得V2变得持久)V2的开始时间戳就变得有效(从其他事务的角度)。V2的开始和结束时间戳此时分别是t2和无穷大。同时,T1还将V1的结束时间戳更新为t2(未在图中示出),它指示V1的有效时间在t2结束。
在稍后的某一时间t5,事务T2更新V2以创建新版本V3。T2采取与如上所述的T1作出的用于设置V2和V1的时间戳类似的步骤来设置V2和V3的时间戳。例如,T2将V2的结束时间戳设为T2的事务ID。在时间t6,T2预先提交并接收t6作为其结束时间戳。如果T2继续提交,则t6将是V2的有效时间的结束。一旦提交,T2就将V2的结束时间戳设为t6。
为概括以上示例,V2的开始时间戳采用了两个值。首先,它在被创建时用T1的事务ID来初始化,且随后一旦T1提交就被设为T1的结束时间戳。这指示一旦T1作出的改变是持久的则V2就变得有效。相反,V2的结束时间戳采用了三个值。首先,它被初始化为无穷大,随后被设为T2的事务ID,最后一旦T2提交它就被设为T2的结束时间戳。这指示一旦在T2提交时V3(由T2创建)变得持久,V2就不再有效。
并发运行的事务可互相干扰从而产生不正确的结果。如果并发控制技术依赖于抢先地阻止这样的有害干扰使其从不发生,则这种并发控制技术被称为悲观的。这通常使用锁定来实现。另一方面,乐观并发控制技术不试图抢先地试图阻止干扰,相反依赖于在允许事务提交之前确认没有发生有害干扰。类似地,取决于事务所依赖的并发控制技术的类型,事务被称为悲观的或乐观的。
本发明允许悲观事务和乐观事务共存。悲观事务使用读取标记、扫描标记和写锁定来实现本发明的多版本并发控制方案。悲观事务通过放置标记来阻止其读取变得无效。在本发明中,可使用两种不同类型的标记来实现悲观事务:读取标记和扫描标记。读取标记被放置在各版本上以确保读取稳定性,而扫描标记被放置在各桶上以阻止幻影(phantom)。桶可以指代散列索引,然而本发明不限于使用散列索引的数据库;扫描标记可等价地适用于经排序的索引等。
事务在开始对桶中的记录的扫描之前将扫描标记放置在散列表桶上。这不阻止新的记录被添加到该桶,但直到扫描标记被移除才可提交新的版本。如果经排序的索引由树结构来实现,则节点上的扫描标记保护以该节点为根的子树。同样,如果经排序的索引由跳过列表来实现,则塔上的扫描标记保护从该塔到同一高度的下一塔的范围。当在事务开始时由查询返回的版本集与在事务结束时由同一查询返回的版本集不同时发生幻影。
事务通过递增版本V的读取标记计数来将读取标记放置在版本V上。在某些实施例中,版本可被限于读取标记的最大数,并且还可包括一标志以阻止任何其他读取标记被放置。因此,在任何给定时间,版本可具有多个读取标记。相反,版本在任何给定时间只可具有单个写锁定。
图2示出根据本发明的某些实施例的表示读取标记的示例性数据结构200。如上所述,每一版本包含结束时间戳字段201a,它可包含时间戳。图2还描述了本发明可如何使用这一字段来记录读取标记。
如图2所示,为使得能够将结束时间戳字段201a用于时间戳以及读取标记两者,第一位被指派为内容类型位,它定义了该字段包含的内容的类型。在图2所示的示例性数据结构中,该字段的第一位被定义为这种内容类型位。当内容类型位被设为第一值(例如0)时,该字段的其余63位是时间戳字段201a,如上所述。然而,当内容类型位被设为第二值(例如1)时,该字段的其余63位被不同地解释。例如,如图2所示,63位可在不再有读取标记标志202a、读取标记计数202b和写锁定字段202c之间划分。不再有读取标记标志202a可被设为阻止任何进一步的读取标志被放置在该版本上。读取标记计数202b记录该版本上的读取标记的当前数量。写锁定字段202c包含持有该版本上的写锁定的事务(如果有的话)的事务ID,或者如果该版本如上所述并未被锁定则为无穷大。
使用图2的示例性数据结构,事务可通过将其事务ID写入版本的写锁定字段202c来对该版本写锁定。类似地,事务可通过递增版本的读取标记计数202b来将读取标记放置在该版本上。本发明中的读取标记与典型的数据库实现中的读锁定不同,因为版本上的读取标记不阻止另一事务更新该版本,如现在将进一步描述的。
在数据库的传统锁定实现中,当事务试图更新被读锁定的版本时,它将被迫阻塞。相反,在本发明中,如果一个或多个事务已经将读取标记放置在版本上,则另一事务可对该版本写锁定以更新该版本。换言之,作出更新的事务不会被迫阻塞直到读取标记被移除。作出更新的事务可继续处理,包括更新该版本,然而,作出更新的事务直到该版本上的所有读取标记都被移除之后才可提交。
类似地,在本发明中,如果一版本被一个事务写锁定,则另一事务可并发地将读取标记放置在该版本上。在这一场景中,作出更新的事务(具有写锁定的事务)直到该读取标记被移除之后才可提交。读取标记可通过进行读取的事务或提交或中止来移除。由此,在上述场景中的每一个场景中,作出更新的事务被迫等待直到该版本上的所有读取标记都被移除之后才提交,无论作出更新的事务是在一个或多个读取标记被放置之前还是之后对该版本进行写锁定。
类似的规则适用于扫描标记。例如,如果第一事务在桶上放置了扫描标记,则第二事务被允许将新的版本插入到该桶中。然而,第二事务不被允许提交,直到第一事务移除其在该桶上的扫描标记。
为了在使用这些方案时便于正确的串行化,本发明实现等待依赖性。等待依赖性迫使更新事务在它可获取结束时间戳并开始提交处理之前进行等待。为实现这些等待依赖性,事务跟踪它的传入和传出的等待依赖性。传入依赖性是事务对其进行等待的依赖性,而如果某一其他事务等待一事务完成,则该事务具有传出依赖性。
如图3所示,每一事务包括要跟踪依赖性的字段。该字段可被包含在事务对象中,如图3所示,或者位于其他位置。对于传入等待依赖性,可维护两个字段:等待计数301以及对不再有等待依赖性标志302。等待计数301指示一事务正在等待多少传入等待依赖性。不再有等待依赖性标志302可被设为阻止任何更多的传入依赖性的创建。例如,这一标志可用于阻止持续地添加新的传入依赖性而导致的资源缺乏(starvation)。对于传出等待依赖性,维护等待事务列表303。这一列表包含等待该事务完成的任何其他事务的事务ID。
下面的段落描述图2和3中示出的两个示例性数据结构可如何用于利用本发明的多版本并发控制方案来实现等待依赖性。当事务TU更新版本V时,它通过将其事务ID复制到V的写锁定字段202c来获得V上的写锁定。如果V的读取标记计数202b大于0,则TU通过递增TU的等待计数301来采取对V的等待依赖性。在该示例中,可以这么认为,TU创建了自己的等待依赖性。
TU也可以用另一方式来获得等待依赖性。如果TU获得V上的写锁定而V的读取标记计数202b是0,则TU最初将不会取得对V的等待依赖性。当V被TU锁定的同时,另一事务TR可能试图将读取标记放置在V上。TR将检测到V的读取标记计数202b是0,但V被写锁定。TR随后读取TU的不再有等待依赖性标志302,以确定TU是否将允许创建等待依赖性。如果TU的不再有等待依赖性标志302未设置,则TR通过递增V的读取标记计数来将读取标记放置在V上,并通过递增TU的等待计数301来给予TU对V的等待依赖性。出于这一原因,可以这么认为,在该示例中TR给了TU等待依赖性。
为移除版本V上的读取标记,事务TR取决于各种因素而执行不同的步骤,该各种因素包括V是否具有尚待解决的读取标记以及另一事务TU是否对V具有写锁定。在第一场景中,如果V未被写锁定,TR简单地递减V的读取标记计数202b并继续。在第二场景中,如果V被写锁定,但一个或多个其他事务已经将读取标记放置在V上(即,V的读取标记计数大于1),则TR同样简单地递减V的读取标记计数202b并继续。
然而,在第三场景中,如果V被写锁定且V的读取标记计数等于1(这意味着TR是具有V上的读取标记的唯一事务),则TR打算移除V上的最后一个读取标记。在该第三场景中,TR必须释放TU对V的等待依赖性。为此,TR将V的读取标记计数202b设为0并将V的不再有读取标记标志202a设为真,因而阻止在V上获得任何其他读取标记。随后,TR(通过读取V的写锁定字段202c中的它的事务ID)来定位TU并递减TU的等待计数301。
在释放TU对V的等待依赖性之前将V的不再有读取标记标志202a设为真,以确保在TU提交V的更新版本之前没有其他事务将读取标记放置在V上。这是必要的,因为一旦TU对等待依赖性被移除,TU就可以继续提交。因此,通过由TU所创建的更新的版本V’来代替V,V将变得无效。
图4示出在本发明的某些实施例中的用于实现扫描标记的示例性数据结构400。同扫描标记有关的等待依赖性与同读取标记有关的等待依赖性类似地运作。事务TR通过递增桶B的标记计数401并将其事务ID添加到B的标记列表402来将扫描标记放置在桶B上。扫描标记的目的不是阻止版本被添加到桶,而是相反的,阻止在扫描标记在原位的同时所添加的任何版本在其处理期间变得对TR可见。换言之,另一事务TU可向B添加版本,但TU直到TR移除了它在B上的标记之后才能提交。这通过TU获得对TR的等待依赖性来实施。
注意,在该扫描标记场景中,这一规范指的是对另一事务的等待依赖性,而在记录锁定场景中,这一规范指的是对版本的等待依赖性。这是为了区分:在扫描标记场景中等待依赖性取决于释放其扫描标记的一个或多个事务(即,多个版本上的标记而非如在读取标记场景中的单个版本上的标记)。
事务TU可通过两种方式来获取由扫描标记引起的等待依赖性。第一,如果TU正试图将新的版本V添加到具有一个或多个扫描标记的桶B,TU取得对B的标记列表402中列出的每一事务(即,具有B上的扫描标记的每一事务)的等待依赖性。为此,TU将它自己的事务ID添加到B的标记列表402中列出的每一事务的等待事务列表303。TU还为B的标记列表402中列出的每一事务递增它自己的等待计数301。
第二,如果事务TR扫描桶B并发现版本V,该版本V满足TR的搜索谓词但因为V被仍然活动的事务TU写锁定而对TR不可见,则TR通过将TU的事务ID添加到TR的等待事务列表303并递增TU的等待计数301来为TU注册对TR的等待依赖性。创建此类等待依赖性以阻止TU在TR之前提交,TU在TR之前提交会使得V变成TR的幻影。
图5示出用于在主存储器数据库的多版本并发控制方案中创建等待依赖性的方法500的流程图。方法500将参照图2和3中的示例性数据结构来描述。在方法500中,第一事务将读取标记放置在数据库中的记录的一版本上(动作501)。该读取标记指示第一事务正读取该记录的该版本,但不阻止另一事务并发地读取或更新该记录。例如,第一事务可通过递增该版本的读取标记计数202b来获取读取标记。在第一事务终止之前,第二事务获取该记录的该版本上的写锁定(动作502)。写锁定阻止另一事务更新该记录的该版本。例如,第二事务可通过将其事务ID写入该版本的写锁定字段202c来获取写锁定。第二事务还创建对该版本的等待依赖性(动作503)。例如,第二事务可递增其等待计数301,等待计数301可被存储在其事务对象中。第二事务继续处理,但等待直到第一事务终止并移除该版本上的读取记录才进行提交(动作504)。
方法500还可包括,第二事务在创建等待依赖性之前,通过读取版本的读取标记计数202b并确定该读取标记计数202b大于0来确定该版本具有尚待解决的读取标记。
在某些实施例中,方法500还可包括,第一事务确定其读取标记是该版本上的最后一个读取标记(诸如通过确定在第一事务终止之前该版本的读取标记计数202b等于1)。该方法还包括,第一事务递减该版本的读取标记计数202b,设置该版本的不再有读取标记标志202a以及递减第二事务的等待计数301。第一事务可通过读取该版本的写锁定字段202c中的第二事务的事务ID来标识第二事务。
在其他实施例中,方法500还可包括,第一事务确定一个或多个其他读取标记已经被放置在该版本上,并且第一事务通过递减该版本的读取标记计数202b来移除其读取标记。在某些实施例中,该版本的不再有读取标记标志202a、读取标记计数202b和写锁定字段202c被存储在该版本中。
图6示出用于当事务将新版本添加到具有一个或多个扫描标记的桶时创建等待依赖性的方法600的流程图。方法600将参照图3和4中的示例性数据结构来描述。在方法600中,一个或多个第一事务将扫描标记放置在桶上(动作601)。例如,一个或多个第一事务通过递增标记计数401并将它们的事务ID添加到标记列表402来放置扫描标记。第二事务随后试图将记录的新的版本添加到该桶(动作602)。第二事务在检测到该桶上的一个或多个扫描标记之后创建对该一个或多个第一事务中的每一个的等待依赖性(动作603)。例如,第二事务可通过读取该桶的标记计数401来检测该桶上的一个或多个标记。第二事务随后可通过将其事务ID添加到锁定列表402中列出的每一事务的等待事务列表303来创建一个或多个等待依赖性。第二事务继续处理,但等待直到一个或多个第一事务中的每一个终止才进行提交(动作604)。例如,在终止时,一个或多个第一事务中的每一个都可递增第二事务的等待计数301。一旦第二事务的等待计数301达到0,这指示第二事务不再有等待依赖性,则第二事务可继续以进行提交。
图7示出用于当事务将读取标记放置在已经被另一事务写锁定的版本上时创建等待依赖性的方法700的流程图。方法700将参照图2和3中的示例性数据结构来描述。在方法700中,第一事务获取记录的一版本的写锁定(动作701)。例如,第一事务可通过将其事务ID写入该版本的写锁定字段202c来获取写锁定。当该版本被第一事务写锁定的同时,第二事务试图将读取标记放置在该版本上(动作702)。在确定该版本被第一事务写锁定之后,第二事务创建针对第一事务的对该版本的等待依赖性,并将读取标记放置在该版本上(动作703)。例如,第二事务可通过确定该版本的写锁定字段202c包含第一事务的事务ID来确定该版本被写锁定。第二事务可通过递增第二版本的等待计数301来创建第一事务对该版本的等待依赖性,并且可通过递增该版本的读取标记计数202b来放置读取标记。等待依赖性使得第一事务等待直到第二事务已终止并且移除了它在版本上的读取标记之后才进行提交。例如,第一事务可继续处理,但直到等待计数301等于0之后才进行提交。
除了如上所述的等待依赖性,本发明的各实施例还可与等待依赖性同时实现提交依赖性。
与等待依赖性类似,提交依赖性可以是传入或传出依赖性,如下文将进一步描述的。类似地,事务仅需要知道传入提交依赖性的数量,并因此维护传入提交依赖性计数。此外,事务必须跟踪其传出提交依赖性中的每一个,并因此维护传出提交依赖性集合。
再次参照图1,尽管V2从t2到t6是有效的,但是存在V2的有效性存疑的时间段。换言之,因为在创建了记录的新版本之后事务可能中止,所以直到事务提交之后才可能知道新版本将是有效的。具体地,V2在t1被创建,但其有效时间间隔的起始直到T1在时间t2预先提交之后才知道。在这一时间(t1-t2)期间,V2仅对T1可见。
此外,虽然一旦T1在t2预先提交就知道了V2的有效时间的起始,但直到T1在t3实际地进行提交,V2才稳定,因为T1在它已预先提交之后仍然可能中止。然而,使用根据本发明的提交依赖性,另一事务可被允许在这一间隔(t2-t3)期间读取V2。提交依赖性允许进行读取的事务假定T1将提交,从而允许进行读取的事务在T1已提交之前读取更新的版本V2。提交依赖性可由悲观和乐观事务两者使用。
在该场景中,进行读取的事务TR可向T1注册提交依赖性。提交依赖性的实现将参照图8来描述。图8与图3类似,因为它包括与图3中示出的字段类似的字段。参照图8,为向T1注册提交依赖性,TR递增它自己的传入提交依赖性计数804,并在T1的传出提交依赖性集合805中注册它的事务ID。随后,当T1已提交之后,它在其传出提交依赖性集合805中定位TR的事务ID(以及已向T1注册了提交依赖性的其他事务的任何其他事务ID),并递减TR的提交依赖性计数804。
如果TR的唯一的依赖性是关于T1的,则它的提交依赖性计数804现在将为0,这指示它不再等待任何其他事务进行提交。因此,TR现在可以进行提交。如可以见到的,使用这一方法,TR能够在它确定版本将是有效的之前从该版本读取值。如果T1中止而非提交,则T1将向TR通知该中止,从而导致TR也中止(因为它已经读取了将永远不会变得有效的值)。这可以是通过在每一事务中使用中止标志806来实现的,当中止标志被设置时致使事务中止。进行中止的事务(在该情况下是T1)可在TR中设置这一标志。
因为大部分事务都提交了,所以使用提交依赖性的这一推测性的读取方法是非常高效的。另外,在许多情况下,进行读取的事务将不会等待,因为在进行读取的事务准备好提交之前,进行读取的事务所取决的事务完成了处理。
本发明包括可通过利用读取标记、扫描标记和写锁定、以及提交依赖性和等待依赖性两者来实现如上所述的乐观和悲观事务两者的多版本并发控制技术的各实施例。附图中示出的且在上文中描述的示例性数据结构允许两种依赖性对读取标记、扫描标记和写锁定的并发使用。
本发明可具体化为其它具体形式而不背离其精神或本质特征。所描述的实施例在所有方面都应被认为仅是说明性而非限制性的。因此,本发明的范围由所附权利要求书而非前述描述指示。落入权利要求书的等效方案的含义和范围内的所有改变被权利要求书的范围所涵盖。
Claims (15)
1.一种用于在主存储器数据库的多版本并发控制方案中创建等待依赖性的方法,所述方法包括:
第一事务将读取标记放置在数据库中的记录的一版本上(501),所述读取标记指示所述第一事务正读取所述记录的所述版本,但不阻止另一事务并发地读取或更新所述记录;
在所述第一事务终止之前,第二事务获取所述记录的所述版本上的写锁定(502),所述写锁定阻止另一事务更新所述记录的所述版本;
作为获取所述写锁定的一部分,所述第二事务创建对所述版本的等待依赖性(503);以及
所述第二事务继续处理,但等待直到所述第一事务终止并移除所述版本上的所述读取标记之后才开始提交(504)。
2.如权利要求1所述的方法,其特征在于,所述第二事务通过递增所述第二事务的等待计数来创建所述等待依赖性。
3.如权利要求2所述的方法,其特征在于,所述等待计数被存储在所述第二事务的事务对象中。
4.如权利要求2所述的方法,其特征在于,还包括:
所述第一事务确定所述版本的读取标记计数指示所述第一事务是具有所述版本上的读取标记的唯一事务;以及
所述第一事务设置所述版本的不再有读取标记标志,以阻止另一事务将读取标记放置在所述版本上。
5.如权利要求4所述的方法,其特征在于,还包括:
所述第一事务通过读取所述版本的写锁定字段中的所述第二事务的事务ID来标识所述第二事务,并递减所述第二事务的等待计数。
6.如权利要求1所述的方法,其特征在于,所述第一事务通过递增所述版本的读取标记计数来将所述读取标记放置在所述版本上。
7.如权利要求1所述的方法,其特征在于,所述第二事务通过将其事务ID写入所述版本的写锁定字段来获取所述写锁定。
8.如权利要求7所述的方法,其特征在于,所述版本的写锁定字段被存储在所述版本内。
9.如权利要求1所述的方法,其特征在于,还包括:
在所述版本被所述第二事务写锁定的同时,一个或多个其他事务将读取标记放置在所述版本上,其中所述一个或多个其他事务中的每一个通过递增所述版本的读取标记计数来放置读取标记。
10.如权利要求9所述的方法,其特征在于,还包括:
在所述一个或多个其他事务终止并移除它们在所述版本上的读取标记之前,所述第一事务终止并移除它在所述版本上的读取标记;
所述一个或多个其他事务终止并移除它们在所述版本上的读取标记,其中所述一个或多个其他事务中的最后一个终止并移除它在所述版本上的读取标记还执行以下动作:
确定所述版本的读取标记计数指示所述一个或多个其他事务中的最后一个是具有在所述版本上的读取标记的唯一事务;
设置所述版本的不再有读取标记标志,以阻止另一事务获取所述版本上的读取标记;
通过读取所述版本的写锁定字段中的所述第二事务的事务ID,来将所述第二事务标识为具有在所述版本上的写锁定的事务;以及
递减所述第二事务的等待计数。
11.如权利要求1所述的方法,其特征在于,还包括:
所述第二事务创建所述版本的修改版本;
所述第二事务预先提交;
在所述第二事务预先提交的同时但在所述第二事务提交之前,第三事务创建对所述第二事务的提交依赖性并读取所述修改版本;以及
所述第三事务继续处理,但等待直到所述第二事务提交之后才提交。
12.如权利要求11所述的方法,其特征在于,创建所述提交依赖性包括,所述第三事务递增它的提交依赖性计数并将它的事务ID写入所述第二事务的传出提交依赖性集合。
13.如权利要求12所述的方法,其特征在于,还包括:
在所述第二事务提交时,所述第二事务读取所述第二事务的传出提交依赖性集合中的所述第三事务的事务ID;以及
所述第二事务递减所述第三事务的提交依赖性计数。
14.一种用于在主存储器数据库的多版本并发控制方案中创建等待依赖性的方法,所述方法包括:
一个或多个第一事务将扫描标记放置在桶上(601);
在所述桶由所述一个或多个第一事务标记的同时,第二事务试图将记录的新的版本添加到所述桶(602);
在检测到所述桶上的一个或多个标记时,所述第二事务创建对所述一个或多个第一事务中的每一个的等待依赖性(603);以及
所述第二事务继续处理,但等待直到所述一个或多个第一事务中的每一个终止之后才提交(604)。
15.如权利要求14所述的方法,其特征在于,所述方法还包括:
所述第二事务创建对所述一个或多个第一事务中的每一个的等待依赖性包括:所述第二事务将其事务ID添加到所述一个或多个第一事务的等待事务列表中的每一个,以及所述第二事务递增对所述一个或多个第一事务中的每一个的等待计数;以及
在终止时,所述一个或多个第一事务中的每一个递减所述第二事务的等待计数。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US13/042,269 | 2011-03-07 | ||
US13/042,269 US8407195B2 (en) | 2011-03-07 | 2011-03-07 | Efficient multi-version locking for main memory databases |
Publications (2)
Publication Number | Publication Date |
---|---|
CN102682071A CN102682071A (zh) | 2012-09-19 |
CN102682071B true CN102682071B (zh) | 2016-12-21 |
Family
ID=46797011
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201210057483.XA Active CN102682071B (zh) | 2011-03-07 | 2012-03-06 | 用于主存储器数据库的高效的多版本锁定 |
Country Status (2)
Country | Link |
---|---|
US (1) | US8407195B2 (zh) |
CN (1) | CN102682071B (zh) |
Families Citing this family (18)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20120310934A1 (en) * | 2011-06-03 | 2012-12-06 | Thomas Peh | Historic View on Column Tables Using a History Table |
WO2013019892A1 (en) | 2011-08-01 | 2013-02-07 | Tagged, Inc. | Generalized reconciliation in a distributed database |
US8983900B2 (en) * | 2012-10-23 | 2015-03-17 | Sap Se | Generic semantic layer for in-memory database reporting |
US9805074B2 (en) * | 2012-11-28 | 2017-10-31 | Sap Ag | Compressed representation of a transaction token |
US9417974B2 (en) * | 2013-03-28 | 2016-08-16 | Microsoft Technology Licensing, Llc. | Transaction processing for database in persistent system |
CN103744936B (zh) * | 2013-12-31 | 2017-02-08 | 华为技术有限公司 | 一种数据库中的多版本并发控制方法及数据库系统 |
US9430274B2 (en) | 2014-03-28 | 2016-08-30 | Futurewei Technologies, Inc. | Efficient methods and systems for consistent read in record-based multi-version concurrency control |
US9928264B2 (en) * | 2014-10-19 | 2018-03-27 | Microsoft Technology Licensing, Llc | High performance transactions in database management systems |
US11301457B2 (en) | 2015-06-29 | 2022-04-12 | Microsoft Technology Licensing, Llc | Transactional database layer above a distributed key/value store |
CN106708608B (zh) * | 2015-11-16 | 2020-08-11 | 阿里巴巴集团控股有限公司 | 一种分布式锁服务方法、获取方法及相应装置 |
WO2017086983A1 (en) * | 2015-11-19 | 2017-05-26 | Hewlett Packard Enterprise Development Lp | Prediction models for concurrency control types |
US11080261B2 (en) | 2016-01-29 | 2021-08-03 | Hewlett Packard Enterprise Development Lp | Hybrid concurrency control |
US9959176B2 (en) * | 2016-02-22 | 2018-05-01 | Red Hat Inc. | Failure recovery in shared storage operations |
US10346386B2 (en) * | 2016-11-04 | 2019-07-09 | Salesforce.Com, Inc. | Multiversion concurrency control of database records with uncommitted transactions |
CN109947742B (zh) * | 2019-02-28 | 2021-08-03 | 上海交通大学 | 面向二阶段锁的多版本数据库并发控制方法和系统 |
US11567899B2 (en) | 2019-12-03 | 2023-01-31 | Western Digital Technologies, Inc. | Managing dependent delete operations among data stores |
US11409711B2 (en) * | 2019-12-03 | 2022-08-09 | Western Digital Technologies, Inc. | Barriers for dependent operations among sharded data stores |
US11934373B2 (en) * | 2020-08-06 | 2024-03-19 | Leanxcale, S.L. | System for conflict less concurrency control |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2008018963A1 (en) * | 2006-08-04 | 2008-02-14 | Microsoft Corporation | Combined pessimistic and optimistic concurrency control |
CN101652761A (zh) * | 2007-04-11 | 2010-02-17 | 微软公司 | 使用缓存写和强制串行化次序的事务存储器 |
Family Cites Families (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5701480A (en) | 1991-10-17 | 1997-12-23 | Digital Equipment Corporation | Distributed multi-version commitment ordering protocols for guaranteeing serializability during transaction processing |
JP2703498B2 (ja) * | 1993-04-30 | 1998-01-26 | インターナショナル・ビジネス・マシーンズ・コーポレイション | バージョン化オブジェクトに対するロッキング機構 |
US20020138353A1 (en) * | 2000-05-03 | 2002-09-26 | Zvi Schreiber | Method and system for analysis of database records having fields with sets |
US6681226B2 (en) | 2001-01-30 | 2004-01-20 | Gemstone Systems, Inc. | Selective pessimistic locking for a concurrently updateable database |
US7761434B2 (en) | 2007-11-19 | 2010-07-20 | Red Hat, Inc. | Multiversion concurrency control in in-memory tree-based data structures |
US8103838B2 (en) * | 2009-01-08 | 2012-01-24 | Oracle America, Inc. | System and method for transactional locking using reader-lists |
-
2011
- 2011-03-07 US US13/042,269 patent/US8407195B2/en active Active
-
2012
- 2012-03-06 CN CN201210057483.XA patent/CN102682071B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2008018963A1 (en) * | 2006-08-04 | 2008-02-14 | Microsoft Corporation | Combined pessimistic and optimistic concurrency control |
CN101652761A (zh) * | 2007-04-11 | 2010-02-17 | 微软公司 | 使用缓存写和强制串行化次序的事务存储器 |
Non-Patent Citations (1)
Title |
---|
动态多版本并行控制技术在主存数据库中的实现;夏英等;《计算机应用研究》;20021231(第5期);第105-108页 * |
Also Published As
Publication number | Publication date |
---|---|
CN102682071A (zh) | 2012-09-19 |
US8407195B2 (en) | 2013-03-26 |
US20120233139A1 (en) | 2012-09-13 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102682071B (zh) | 用于主存储器数据库的高效的多版本锁定 | |
US8266122B1 (en) | System and method for versioning data in a distributed data store | |
CN109923534A (zh) | 对具有未提交事务的数据库记录的多版本并发控制 | |
CN106030533B (zh) | 通过拆分过程执行自动重试事务 | |
CN109977171A (zh) | 一种保证事务一致性和线性一致性的分布式系统和方法 | |
CN101615203B (zh) | 并发控制方法及装置 | |
US9396227B2 (en) | Controlled lock violation for data transactions | |
CN103744936B (zh) | 一种数据库中的多版本并发控制方法及数据库系统 | |
US8832159B2 (en) | Systems and methods for asynchronous schema changes | |
US9152398B2 (en) | Object storage and synchronization hooks for occasionally-connected devices | |
US10754854B2 (en) | Consistent query of local indexes | |
US9576038B1 (en) | Consistent query of local indexes | |
CN105630863A (zh) | 用于多版本并发提交状态的事务控制块 | |
US20220197896A1 (en) | Transactional database layer above a distributed key/value store | |
CN101268439A (zh) | 数据库片段克隆和管理 | |
CN104657364B (zh) | 一种日志结构数据库系统查询请求消息处理方法及装置 | |
CN107113341A (zh) | 用于数据划分的分布式关系数据库管理系统中事务的高吞吐量处理的系统 | |
CN109033359A (zh) | 一种多进程安全访问sqlite的方法 | |
CN105550306A (zh) | 多副本数据的读写方法及系统 | |
US20230081900A1 (en) | Methods and systems for transactional schema changes | |
CN114096966A (zh) | 可扩展的、安全的、高效的和适应性强的分布式数字分类账交易网络 | |
US20030204486A1 (en) | Managing attribute-tagged index entries | |
Deen | Fundamentals of data base systems | |
CN110489426A (zh) | 一种数据库表的自动化分区方法、装置及设备 | |
CN115495620A (zh) | 基于图结构的数据管理方法及相关设备 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
ASS | Succession or assignment of patent right |
Owner name: MICROSOFT TECHNOLOGY LICENSING LLC Free format text: FORMER OWNER: MICROSOFT CORP. Effective date: 20150727 |
|
C41 | Transfer of patent application or patent right or utility model | ||
TA01 | Transfer of patent application right |
Effective date of registration: 20150727 Address after: Washington State Applicant after: Micro soft technique license Co., Ltd Address before: Washington State Applicant before: Microsoft Corp. |
|
C14 | Grant of patent or utility model | ||
GR01 | Patent grant |