关于数据库的方法

文档序号:6418875阅读:277来源:国知局
专利名称:关于数据库的方法
技术领域
本发明涉及一种能够在一个数据库中一致地读取多个数据对象的方法。
本发明特别适用于通过二阶段锁定法进行交易管理的数据库,其中第一阶段包括一个访问受该交易影响的对象的请求,并且一旦获得该访问就锁定这些对象,而第二阶段包括交易委托并解除在第一阶段中所设置的所有锁定。
背景技术
说明交易管理是数据库管理进程中的基本技术,有时用于将一个交易与数据库中的其它操作或事件分离并提供一个包含在一个动态的随时在变的数据库中的信息的一致图形。
在传统的交易进程中,阻塞那些在实际的交易进程中被交易所用的对象,以便防止它们在正在进行的交易过程中被其它交易利用。因此,需要访问同一对象的其它交易必须等待或中断,以及稍后再试。
在一个交易中所执行的实际工作包括改变一个对象的操作和/或保留一个未变对象的操作,以下称这些操作或事件为对象改变事件和对象未变事件。通过将改变后的内容写入一个对象的新版本或覆盖其旧版本,可以改变或更新一个对象的内容。
在已知技术中,在交易“委托”之前执行与一个交易相关的所有操作,包括一个改变和一个未变交易。术语一个交易的“提交/委托”对本领域的技术人员来说是公知的,简而言之就是该交易请求的操作或事件并执行请求分离的交易通知。还应注意术语“提交”一般还包括解除所设置的所有锁定,尽管我们在本文中将解锁视为一个单独的操作。
对象在交易之前的当前或现有版本以这种当前的形式被保存,直到不再有其它交易使用当前或现有版本为止。这意味着一个对象的不同版本可能需要被保存不同的时期,这取决于哪个交易使用所述版本。
特定的应用程序需要以不阻塞访问与其它交易,特别是只读交易一起所用的对象的方式实时访问一个数据库。在本文中,利用一个数据库管理系统是公知的,该系统允许访问没有交易限制并且是迅速而非阻塞的不同对象。
这种系统的缺点在于用户不能以与交易限制系统中相同的分离方式在数据库进行操作,并且不能提供数据库的绝对一致图形。
通过管理一种定义明确的交易协议能够实现非阻塞交易是公知的。但是这些交易协议是不容易管理的并且它们的实现过程是复杂的,处理要求和/或需要较大的存储容量。
因此,在公知技术中,或者提供一个能够迅速而简单地执行但不能总保证数据库的一致图形,即正确结果,或者提供一个在积极管理的同时缓慢显示一个正确图形且不便使用的数据库。
在所属技术领域中,基于所谓不锁定并行交易最优控制的数据库是公知的。这种控制基于允许所有交易而假设不会发生冲突。
特别是,并行交易最优控制意味着要进行检查以确保在交易被“提交”之前冲突不会随交易而发生。如果发现存在冲突,就放弃交易。否则,就允许交易委托。
还应注意在所谓二阶段锁定或在两个阶段中进行锁定时,通常有两个不同的锁定。
第一锁定是一个所谓的共享锁定,它由与一个数据对象相关的只读交易设置,并允许其它读交易访问所述对象,但锁定该对象而不能改变交易。
第二锁定是一个所谓的排它锁定,它由改变数据对象的交易设置并锁定与所有其它交易相关的对象。
下面的公开文件列出几个现有技术示例,示出了几种不同类型的非阻塞交易。
US-A-4,627,019此公开文件描述了一个用覆盖了数据库中各种对象的引用来表示何处发现不同对象的数据库。当开始一个改变对象交易时,交易指的是改变后的对象在数据库中的新存储位置。创建一个新引用,它指向改变后的对象的新位置。
旧的引用被保留并仍然指向相应对象的旧位置。
原先引用的每个版本都保持可用,只要某些交易用到该引用的这个版本。
尽管这种交易管理提供了一种非阻塞交易协议,它需要大量存储空间,因为引用的不同版本需要并列保存。而且这种交易管理的执行也相对复杂。
EP-A2-0 471 282此公开文件描述了三种新型锁定,即现时锁定,未决锁定和过期锁定。当第一交易,一个读交易,在不同对象上设置了一个锁定时,用一个现时锁定取代一个共享锁定。如果第二交易需要在同一对象上设置排它锁定而第一交易仍在进行中,则将现时锁定变成未决锁定。
如果第二交易改变了一个具有未决锁定的对象,则该锁定变成一个过期锁定。如果第二交易不改变对象,则在提交第二交易时将未决锁定变成一个现时锁定。
只要所有的锁定都是现时锁定,则第一交易就正常继续。如果在任何一个受第一交易影响的对象上存在任何未决锁定,则第一交易进行等待,直到该未决锁定转换成其它类型的锁定。
当一个未决锁定变成一个现时锁定时,第一交易能够继续。如果该未决锁定变成一个过期锁定,这表示该对象已被改变并且第一交易随后被放弃。
尽管这种方法能够使一个被设置的锁定不阻塞改变交易,但是它需要放弃一个已开始的读交易,因为在执行该读交易的同时,一个数据对象改变交易改变了一个对象。
发明概述技术问题在考虑到上述现有技术的出发点的同时,还应当看到在交易管理的启动过程中还存在一个技术问题,其中一个指定锁定阻塞一个对象改变交易的时间期限应大大缩短。
另一个技术问题是缩短设置一个指定锁定和为一个未变交易解除所述锁定之间的时间期限。
还有一个技术问题是提供对由未变交易所用的对象相对时间的不受限访问,而在由该交易设置的锁定被解除之后,在这个访问时间内不阻塞受改变交易影响的对象,即非阻塞访问。
还应当看到在将一个交易分成改变和未变操作的过程中存在一个技术问题,即为所述交易中的改变操作提供一个排它锁定,而为未变操作提供对受影响对象的时间不受限非阻塞访问。
另一个技术问题是解决在一个以对一个对象的每个版本分配一个计数器为基础的数据库中存在的上述技术问题,所述计数器在允许一个交易访问该对象,如设置一个锁定时加1,在一个交易不再需要访问该对象的这个版本,如解除一个锁定时减1。
还有一个技术问题是解决一个以为每个交易分配一个时间标记为基础的数据库中存在的上述技术问题,所述时间标记表示该交易开始的时间。当不再有新的交易具有对该对象此版本的时间标记时,每个交易就对具有这个时间标记的相应对象的版本作出标记,并且将保留一个对象的每个版本,只要没有一个象更旧交易一样的交易或与最新时间标记一样旧的交易结束,最新时间标记已分配给所述版本。
解决方案本发明立足于能够使一个数据库中的多个对象被一致读取的方法,其中通过在两个阶段上锁定来管理交易。
第一阶段包括一个访问受交易影响的对象的请求,并在获得该访问后锁定该对象。第二阶段包括提交该交易并解除第一阶段中设置的所有锁定。
在一个交易中所执行的实际工作包括改变一个对象的操作和/或不改变一个对象的操作,其中通过将改变后的内容写到该对象的一个版本来实现更新或改变一个对象的内容,并且对象在交易之前的版本被保留,直到不再有其它交易使用当前或现有版本为止。
交易在第一阶段中执行所有的数据改变操作。
随着从这样一种方法的出发点以及向一个或多个上述技术问题提供解决方案的目的,本发明提出交易在第二阶段之后保持对所述对象的访问,交易在第二阶段之后尽可能执行最大量的未变操作,并且交易在执行了所述未变操作之后关闭对对象的访问。在解除所述锁定之后,交易在数据库中保留与未变操作相关的对象的一致抽点打印。
本发明还提出在第二阶段之后,对一个对象的访问包括将相应对象的当前版本标记为被该交易所用,以及关闭对这些对象的访问包括删除所述标记,同时尽管该交易被提交,但仍保持所述对象的版本可用,至少到该交易结束为止。
当为一个对象的每个版本分配了一个计数器时,本发明提出在删除该标记,即结束该交易时,所述标记仅由计数器的减少构成,所述计数器在分配一个交易访问所述版本,如设置一个锁定时逐一增加,在一个交易不再需要访问所述版本,如解除一个锁定时逐一减少。
当为每个交易分配了一个时间标记时,本发明提出所述标记包括相应对象版本的时间标记,并且认为在结束对所述对象的访问时,该交易已被终止,其中时间标记表示该交易开始的时间,当没有更新的交易对对象的该版本进行时间标记时,每个交易以其时间标记标记出受影响对象的相应版本,以及只要还有比分配给所述版本的时间标记更早或一样早的交易尚未结束,就允许保留一个对象的每个版本。
当交易只包括未变操作时,本发明提出锁定应包括一个共享锁定,其允许在该共享锁定被解除之前,其它交易能够对一个对象进行访问,但限制为只能对该对象进行读取。
随着提供所谓的组打开,即在交易开始之前,已知所有的对象要被打开,本发明提出这些对象在第一阶段被打开。
随着发明提供所谓数据对象的递归打开,即在交易开始之前已知有一个或多个起始对象,以及所述起始对象中的一个或多个指向另外一个或多个对象,本发明提出在第一阶段打开这些起始对象,在第一阶段进行估计对任意其它对象的引用,并在第一阶段打开涉及的任意的其它对象。
本发明还提出在第一阶段估计从其它对象到另一些还是其它对象的引用,以及在第一阶段打开又涉及的任意的还是其它对象等。
本发明还能够通过预定来自从较早打开的对象到另一些对象产生的引用中的对象的允许级别数目来限制可用对象的数目。
随着提供所谓的路径打开,本发明提出在第一阶段打开起始对象,根据所述起始对象中的一个预定对象来估计对另外一些对象的引用,并在第一阶段打开涉及到另外一些对象,在路径打开中,在交易开始之前,有一个或多个起始对象是已知的,并且其中一个或多个起始对象指向另外一些对象中的一个或多个。
依据本发明的一个实施例,在第一阶段估计从可能的其它对象到仍然是其它对象的引用,并在第一阶段打开仍然是任意其它对象等。
依据另一个实施例,通过预定来自从较早打开的对象到其它对象的引用中的对象的允许级别数目,限制可用对象的数目。
以下优点主要来自于这样一种有创造性的方法能够将一个交易锁定一个对象使之不被其它交易访问的时间缩短,从而以一种简单、迅速、存储量相对较小和有利于计算的方式来影响一个虚拟的非阻塞操作的读交易。
本方法提供了在交易提交后受交易影响的对象的保持一致抽点打印,从而能够使该交易在进行未变操作时利用该对象的一致图形而无须限制该交易的时间和阻塞其它交易。
其它交易锁定一个或多个对象,即不是只读交易的偶交易(eventransaction)所经历的时间期限能够被缩短到不同的长度,这意味着由于用于锁定对象的等待时间将被大大缩短,从而一个数据库进行所有交易的速度不同。
本发明还提供了这样一种特别有益的方法在数据块中,复制不同的对象版本被认为是一种在存储容量、时间和/或执行上成本昂贵的操作。依据本发明方法的一个实施例,对于读交易来说,首先要避免复制并且在时间上允许较早解除所用的锁定。
本发明还特别具有这样的优点关于数据库,发现了需求多个对象的一致抽点打印而不必根据最后的交易完全更新这个图形。
本发明还具有这样的优点在RAM数据库中执行该方法时,发现了与实时应用程序结合的更高要求。
本发明方法的主要特征如后面的权利要求1所述。
下面将参照实施例和附图详细描述本发明,其中

图1简要示出了与数据库中的并列交易相关的第一公知问题,图2简要示出了与数据库中的并列交易相关的第二公知问题,图3简要示出了与数据库中的并列交易相关的第三公知问题,图4简要示出了与数据库中的并列交易和相互依赖的对象相关的第四公知问题,图5简要示出了依据本发明在一个数据库中更新一个对象的情况;图6简要示出了依据本发明将一个交易分成了不同阶段;图7示出了依据本发明的高度简化的读交易;图8简要示出了依据本发明的组打开操作;
图9简要示出了依据本发明的递归打开操作;以及图10简要示出了依据本发明的路径打开操作。
图1示出了在一个数据库中同时执行多个相互影响的交易的不同情况中的第一种情况。
在这种被称为更新丢失的情况下,第一交易T1和第二交易T2在不同的时间彼此独立和互不知道地更新同一个数据对象“0”。
在时间点“a”,第一交易T1收集对象01的第一版本,而在时间点“b”,第二交易T2收集所述对象的同一版本01。当第一交易T1完成更新时,更新后的对象02在时间点“c”被写入数据库覆盖该对象的第一版本。当第二交易T2完成更新时,更新后的对象03在时间点“d”被写入数据库覆盖由第一交易T1执行的更新02。
当例如对象是一个由两个不同用户(T1,T2)进行了修改的文件时,在第二用户T2的更新03中丢失了由第一用户T1进行的修改02。
上述操作的顺序为“读,写,写”,这就造成了冲突。
这个问题可以通过例如利用传统的二阶段锁定来解决。由于将要执行的交易是一个更新交易,也就是一个改变交易,所以第一交易T1在对象0上设置一个排它锁。第二交易T2将不能访问对象0,直到第一交易T1已被提交并解除排它锁为止。
图2示出了另一种被称为错读(dirty read)的情况,其中第一交易T1在时间点“f”访问一个对象04并读取该对象,而第二交易T2已在较早的时间点“e”改变了对象04。第二交易T2在稍后的时间点“g”对对象05进行了一次以上的改变。由于读出的对象04不具有最后的版本05的内容,从而由第一交易T1执行的读出操作被称为一次错读。
在这种情况下所执行的操作顺序为“写,读,写”,这就造成了所示的冲突。
也可以通过第二交易T2在对象04上设置一个排它锁来解决这个问题,因为该交易是一个数据改变交易,从而拒绝读交易T1访问所述对象。
图3示出了被称为不可重复读取的第三种情况,其隐含了第一交易T1两次读取一个对象0,第一次是在第二交易T2更新对象07的时间点“I”之前的时间点“h”读取对象06,然后是第一交易T1在时间点“j”第二次读取对象07。由第一交易T1进行的两次不同读取将产生两个不同的值06,07,并且由于第一次读取是不可重复的,所以第一次读取的结果是不能重新获得的。
这个操作的顺序为“读,写,读”,这就造成了所示的冲突。
由于该交易是一个未变交易,可以通过在第一次读取的过程中设置一个共享锁定来防止这个问题,该共享锁定防止改变交易T2得到一个排它锁,从而防止了更新该对象。
在ISBN为1-55860-190-2,由Morgan Kaufmann于1993年出版,作者为Jim Gray和Andreas Reuter的“Transaction ProcessingConcepts and Techniques”一书中更早地详细描述了上述各种情况。
本发明涉及的问题与上面第三种情况所描述的不可重复读取问题相似,不同的是需要读取不同的对象。
我们把这个问题称为非阻塞读取问题,下面将参照图4进行说明。图4示出了第一交易已请求访问多个不同对象,例如对象10,20和30。这些对象中的两个,10和30彼此相关。
第一交易T1在第一时间点“k”读取对象101,在第二时间点“1”读取对象201,和在第三时间点“n”读取对象301。
第二交易T2在位于第三时间点“n”之前和第一时间点“k”之后的一个时间点“m”更新两个对象102和302。
这样,第一交易T1就见到了对象10的第一版本101和对象30的第二版本302,这两个版本在两个对象10,30之间的相关关系上是互不一致的。
可以通过传统的二阶段锁定来解决这个问题,借此或者第一交易T1利用设置在对象10,20和30上的一个共享锁阻塞了第二交易T2,或者第二交易T2利用设置在对象10和30上的一个排它锁来阻塞第一交易T1。
在两种情况下都是拥有锁定的交易阻塞正在等待的交易。本发明的目的在于减少这种阻塞的不利影响,同时仍允许第一交易获得三个对象10,20和30的一致图形。
本发明涉及一种利用二阶段锁定来管理数据库中执行的交易,其中第一阶段包括请求访问受一个交易影响的对象并在获得改访问后锁定这些对象,第二阶段包括交易委托和解除第一阶段中设置的所有锁定。
一个交易所执行的实际工作可以包括改变一个数据对象的操作或事件和/或不改变所述对象的操作或事件。
本发明还包括通过一个交易T1读取一个对象01的内容并写入改变后的内容来改变或更新一个对象的内容,从而提供对象02的一个新版本(依据图5),其中在所述交易之前存在的对象01的版本被保留,直到不再有其它交易使用这个已有版本01为止。
以这些假设为出发点,本发明提出一个交易适于将对受影响对象的访问保留到第二阶段之后。该交易还适于在第一阶段执行所有的数据改变操作,并在第二阶段之后的第三阶段执行尽可能多的未变操作。
一个交易可以包括各种操作。这些操作包括-打开和锁定一个对象。这隐含了将一个对象加到由一个交易打开的对象集合中。
·导航。这隐含了读取一个打开对象的部分内容以确定和某些其它对象的关键字或引用的同一性。如果该对象已被打开,则对下一个对象的访问/导航是不成问题的。
·读取一个属于一个打开对象内容的值。
-将一个值写入一个对象,例如更新一个对象。
-产生一个新的对象。这就将新的对象加入到由一个交易打开的对象集合中。
-删除一个已有的对象。这就将被删除的对象加入到由该交易打开的对象集合中。
·不直接与访问该交易打开的对象相关的其它计算。
这些用短线“-”标记的操作是在某些方面进行了数据改变的操作并且这些操作必须在交易的第一阶段中执行,即在提交之前执行。用黑点“·”标记的操作是未进行数据改变的操作,并且主要在第二阶段之后执行,即提交之后。
依据本发明,一个交易在执行了仍不可执行的未变操作之后结束对一个对象的访问。
图6简要示出了依据本发明的一个数据改变交易T1。第一阶段“A”在时间点“o”开始。在这个阶段,交易T1访问受交易T1影响的对象10,20,30,在图中用对象和交易之间的实线表示。在各个对象上设置相关锁定,在图中用被锁定对象中的点表示,其中一个实心点表示一个排它锁定e1,而一个空心点表示一个共享锁定s1。
在所示的情况下,由于交易T1是关于这个对象的改变交易,所以第二对象20上的锁定是一个排它锁定e1。在剩余对象上的锁定是共享锁定s1,因为交易T1是一个关于这些对象的未变交易。
交易T1在第一阶段“A”执行所有的改变操作。这样的改变在于将第二对象20从第一版本201更新到第二版本202。
在时间点“p”开始第二阶段“B”。这个阶段包括由交易T1解除所设置的锁定和委托。
但是,依据本发明概念,即使在第二阶段之后仍然保留相关对象的可用性。这种可用性意味着这些对象对交易T1仍是打开的,如图中的虚线所示。
在完成第二阶段“B”的同时,在时间点“q”开始第三阶段“C”,其中交易T1执行剩余的未变操作。这种操作就是前面用黑点标记的那些操作。
第三阶段“C”还包括解除对象10,20,30对交易T1的可用性,即所谓的对象关闭,它是在第三阶段“C”中执行的最后一个操作,即在剩余的未变操作都已执行之后。
因此交易T1在解除了所有的锁定,即在图6所示的第二阶段“C”之后,为未变操作提供了数据库中相关对象的保持一致抽点打印。
这个访问在时间上不会受限,因为这个操作基本上不会阻塞其它的交易。但是受限的因素能是存储容量或访问,因为这个访问需要能够将对象的当前版本保存在存储器中。
为了确保将不删除一个没有被交易锁定但仍对按前述交易打开的对象的版本,本发明提出通过将各对象的当前版本标记为被交易所用提供在交易的第三阶段“C”中访问一个对象,反之由删除所述标记构成关闭。
现有技术中有多种不同的标记被交易所用的一个对象的方法。本发明不对这些方法中的任何方法构成限制,但可以应用到相应的方法中。下面将详细描述应用到两种最通用的将对象标记为被交易所用的方法中的实施例。
但是,这些不同的方法的共有特征和本发明的先决条件是通过将该对象的新版本存到数据库的不同位置并且只要所述版本被标记为被交易所用,就保存该旧版本来更新对象。
在本发明的第一实施例中,为一个对象的每个版本分配一个计数器,所述计数器在一个交易访问这个版本,如设置一个锁定时加1或递增,而在一个交易不再需要访问所述对象,如解除一个锁定时减1或递减。
在这种交易管理中,本发明提出在这个标记存在时,计数器不减1,直到在图6中的第三阶段“C”结束时删除该标记为止,并且在图6中的第二阶段“B”结束时与解除的锁定无关。
在这种情况下,如果当前版本没有构成该对象的最新版本,则随着计数器减为0而删除该对象的当前版本。
这意味着该交易随同解除锁定而被提交,这在交易完成了所有的改变操作后立即实现,但是依据现有技术,计数器不会减1并且计数器不会发生减少,直到该交易不再需要访问该对象版本为止,这种情况发生在交易已执行了剩余未变操作和/或交易不再需要访问这些对象时。
依据本发明的另一个实施例,为每个交易分配一个表示交易开始时间的时间标记,在当前对象版本没有用最近交易的时间标记进行标记时,每个交易用其各自的时间标记来标记相关对象的各版本,而只要有任何比分配给当前版本的最新时间标记更早或一样早的交易还没有结束,就要保留一个对象的每个版本。
在这样的交易管理中,本发明提出标记由各对象的当前版本上的时间标记组成,并且在关闭对对象的访问时,认为该交易结束。
这意味着在图6中的第二阶段“B”结束时,交易随同解除锁定而被提交,只要交易完成了所有的改变操作就会这样做,但认为该交易在提交之后仍然可用,即时间标记仍是有效的,这意味着由于具有其时间标记的交易仍然有效,所以不能删除当前文本。直到该交易不再需要访问这些对象时才删除该交易的时间标记,这在交易已经完成了所有的改变操作和/或交易不再需要访问执行对象,即图6中的第三阶段“C”结束时发生。
本发明的效果依涉及的交易类型的不同而不同。下面将描述几种本发明认为具有特殊性能的交易。
这种交易的第一个例子是只包括未变操作并且所用的锁定是一个共享锁定,例如一个只读交易。
这个交易允许其它交易在解除该共享锁定之前访问相关的对象,尽管需要限制所述交易只能读取这些对象。
如图7所示,由于锁定这些对象的时间周期“A”,“B”只是提供了访问所有相关对象和锁定这些对象“A”,然后提交该交易并解除锁定“B”所花费的时间,所以时间周期相对较短。由于将不执行改变操作,该交易在设置了所有的锁定之后被马上提交,锁定被解除,然后在各对象的当前版本上保留标记以表示这个版本可以不被删除。
因此,在此整个周期中,由于只设置了共享锁定而使当前对象对其它未变交易是可用的,并且对提交后的改变交易也是直接可用的。
直到相关对象被关闭的时间点“C”为止的时间周期将随着将要执行的未变操作而改变。
图8示出了依据本发明而特别受益的交易T1的第二个例子。在这个交易中,已知所有对象1O,2O,3O在开始该交易之前被打开,这个交易被认为是一个组打开交易。当然,这个交易可以包括改变操作和未变操作。
与该交易是否同时包括改变操作和未变操作或是否只包括未变操作无关,相关的对象将在第一阶段“A”被打开。
图9示出了依据本发明而特别有益的交易T1的第三个例子。在这个交易中,已知在该交易开始之前有一个或多个起始对象10,20,30,而且这些起始对象中的一个或多个涉及另外的一个或多个与该交易相关的对象40,50,60,70,这就是所谓的递归打开交易。
不管这个交易是否同时包括改变操作和未变操作或是否只包括未变操作,起始对象10,20,30将在第一阶段“A”被打开,在第一阶段“A”估计对其它对象的引用,即在起始对象10,20,30中导航应当在第一阶段“A”携带,并在第一阶段“A”应打开任一其它的对象40,50,60,70。
在特定的情况下,在第一阶段“A”中还要估计从另外一些对象40,50,60,70到仍然是其它对象80,90,100,110的引用,并根据可能的其他引用在第一阶段A应打开仍然是其他对象80,90,100,110等。
本发明提出在第一阶段“A”应当执行一个未变操作和一个导航操作,这对找到受影响的对象并在第一阶段“A”锁定是必要的。
对于限制找到所有对象所需的时间周期和限制一个交易打开的对象数目,依据本发明可以允许从原先打开的对象对另外一些对象产生引用的对象的允许等级数被预定和限制为“D”。在图9中,被限制为“D”的允许等级数为2,因此对象80,90,100,110都不能被打开。
图10示出了依据本发明而特别有益的交易T1的第四个例子。在这个交易中,已知在该交易开始之前有一个或多个起始对象10,20,30,这些起始对象中的一个或多个涉及另外的一个或多个与该交易相关的对象40,50,60,70,而且为当前起始对象10,20,30中的一个预定起始对象30估计对其它对象的任一引用,这就是所谓的路径开始交易。
只有从对象30开始的路径或分支将被估计,并且由图10中的标记“E”进行选择。
不管这个交易是否同时包括改变操作和未变操作或是否只包括未变操作,在第一阶段“A”中将打开当前的起始对象,进行对预定起始对象30的导航并应打开任一其它的相关对象70。
另外,在第一阶段“A”中还将执行对从对象70到其它对象100,110的引用的估计,并根据可能的引用而打开可能涉及的仍然是其它对象100,110等。
在这种情况下还可以通过允许从原先打开的对象对另外一些对象产生引用的对象的允许等级数被预定和限制为“D”来限制找到所有对象所需的时间和由一个交易打开的对象数目。
图8,9和10只是为了示出受影响的对象在第一阶段“A”中的打开过程,应当理解这些图中所示的不同阶段“A”,“B”,“C”之间的相对尺寸关系对本发明来说是没有意义的。
在所有可能的情况中,所提出的交易要经过下述进程-创建交易;-在没有中间的耗时计算的情况下打开多个对象;
-当由于其它交易而造成对一个或多个对象的访问被阻塞时,放弃该交易并稍后再试;-在对所有相关对象进行访问时,执行所有的改变操作和任一必需的未变操作;-在保持对相关对象的未变访问的同时,提交该交易并解除所有的锁定;-为该交易提供相关对象的一致抽点打印而不扰乱其它交易或被所述其它交易扰乱;-执行剩余的未变操作;以及-解除对相关对象的访问。
尽管关于与完全非锁定系统相关的实施和执行的简易性使得这种折衷可接受并适合于特定应用程序,但是依据本发明的交易管理仍然不是完全非阻塞的,因为有特定的锁定发生在第一阶段“A”和第二阶段“B”中。
应当理解对二阶段锁定的限制意味着还涉及包括两个阶段以上的设置锁定和解除锁定的交易管理,尽管其中一个阶段包括访问一个受交易影响的对象的请求并在获得该访问后锁定所述对象,而另一个阶段包括提交该交易并解除设置在第一阶段中的所有锁定,而不管与包括在该交易管理中的任一其它阶段。
应当理解本发明不限于上述各实施例,在不偏离由权利要求书限定的发明保护范围的情况下,对本发明进行的修改是允许的。
权利要求
1.一种能够使一个数据库中的多个对象被一致读取的方法,其中通过在两个阶段上锁定来管理交易,其中第一阶段包括一个访问受交易影响的对象的请求,并在获得该访问后锁定该对象,其中第二阶段包括提交该交易并解除第一阶段中设置的所有锁定,其中由所述交易所执行的实际工作包括改变一个对象的操作和/或不改变一个对象的操作,其中通过将改变后的内容写到该对象的一个版本所述交易来实现更新或改变一个对象的内容,其中对象在交易之前的版本被保留,直到不再有其它交易使用当前或现有版本为止,以及其中交易在第一阶段中执行所有的数据改变操作,其特征在于交易在第二阶段之后保持用于读取相关对象版本的访问;所述交易在第二阶段之后尽可能执行最大量的未变操作;以及所述交易在执行了所述未变操作之后关闭对所述对象的访问,从而所述方法在解除所述锁定之后,在数据库中提供了受影响对象的一致抽点打印。
2.如权利要求1所述的方法,其特征在于在第二阶段之后对一个对象的访问在于将相应对象的当前版本标记为被该交易所用,以及关闭对这些对象的访问在于删除所述标记。
3.如权利要求2所述的方法,其中为一个对象的每个版本分配一个计数器,所述计数器在一个交易访问所述版本,如设置一个锁定时逐一增加,在一个交易不再需要访问所述版本,如解除一个锁定时逐一减少,其特征在于所述标记在于所述计数器的增加,而所述计数器的减少则删除了所述标记。
4.如权利要求2所述的方法,其中为每个交易分配了一个时间标记,所述时间标记表示该交易开始的时间,其中当没有更新的交易对对象的该版本进行时间标记时,每个交易以其时间标记标记出受影响对象的相应版本,其中只要还有比分配给所述版本的时间标记更早或一样早的交易尚未结束,就允许保留一个对象的每个版本,其特征在于所述标记在于相应对象的所述版本上的所述时间标记,并且认为在关闭对所述对象的访问时,所述交易将被终止。
5.如上述任一权利要求所述的方法,其特征在于所述交易只包括未变操作;以及所述锁定是一个共享锁定,这意味着在所述共享锁定被解除之前,其它交易能够对所述对象进行访问,虽然限制为只能对所述对象进行读取。
6.如权利要求1至4中任一所述的方法,其特征在于在所述交易开始之前已知所有的对象将被打开,所述对象在所述第一阶段被打开。
7.如权利要求1至4中任一所述的方法,其特征在于在交易开始之前已知有一个或多个起始对象,其中所述起始对象中的一个或多个涉及另外的一个或多个对象;在所述第一阶段打开所述起始对象;在所述第一阶段估计对其它对象的任一引用,并在所述第一阶段打开涉及的其它对象;还在所述第一阶段估计从所述其它对象到另一些仍然是其它对象产生的引用;并在所述第一阶段打开仍然是其它对象等。
8.如权利要求7所述的方法,其特征在于预定从来自较早打开的对象到另一些对象的引用产生的对象的允许等级数。
9.如权利要求1至4中任一所述的方法,其特征在于在交易开始之前已知有一个或多个起始对象,其中所述起始对象中的一个或多个涉及另外的一个或多个对象,在所述第一阶段打开所述起始对象,在所述第一阶段根据所述起始对象中的一个预定对象来估计对另外一些对象的任一引用,并在所述第一阶段打开另外一些对象;在所述第一阶段估计从所述第一对象又到仍然是另外一对象的引用;并在所述第一阶段打开仍然是其它对象等。
10.如权利要求9所述的方法,其特征在于预定从来自较早打开的对象到另一些对象的引用产生的对象的允许等级数。
全文摘要
本发明涉及一种能够使一个数据库中的多个对象(10,20,30)被一致读取的方法。该方法适用于在一个数据库中通过在两个阶段上锁定来管理交易,第一阶段(A)包括一个访问受交易影响的对象(10,20,30)的请求,并在获得该访问后锁定该对象。第二阶段包括提交该交易并解除第一阶段中设置的所有锁定,在一个交易中所执行的实际工作包括改变一个对象的操作和/或不改变一个对象的操作,其中通过将改变后的内容写到该对象的一个版本来更新或改变一个对象的内容,并且对象在交易之前的版本被保留,直到不再有其它交易使用当前或现有版本为止,交易在第一阶段(A)中执行所有的数据改变操作。依据本发明,交易在第二阶段(B)之后保持对对象(10,20,30)的访问,所述交易在第二阶段(B)之后的第三阶段(C)尽可能执行最大量的未变操作,然后交易关闭对所述对象的访问,从而本发明的方法在解除所述锁定之后,在数据库中提供了受未变操作影响的对象(10,20,30)的一致抽点打印,即在第二阶段(B)之后的第三阶段(C)。
文档编号G06F12/00GK1294714SQ9980426
公开日2001年5月9日 申请日期1999年1月21日 优先权日1998年1月22日
发明者D·A·比约尔尼尔斯特德特 申请人:艾利森电话股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1