首页 / 专利库 / 资料储存系统 / 树遍历 / 并行修改事务处理系统索引树的方法和装置

并行修改事务处理系统索引树的方法和装置

阅读:908发布:2023-03-19

专利汇可以提供并行修改事务处理系统索引树的方法和装置专利检索,专利查询,专利分析的服务。并且本方法和装置允许并行 修改 事务处理系统索引树。遍及索引树到被选 节点 执行包括结构修改操作的事务,然后置位结构修改操作未决指示。在没有未决结构修改操作指示的 位置 ,允许通过索引树执行并行关键字记录插入或删除;在指示未决结构修改操作的位置,延迟并行关键字记录插入或删除。每个尚未到达新的一致性点的关键字记录删除的指示被置位,并行关键字记录插入或删除也被延迟,直到结构修改操作的可能性结束。,下面是并行修改事务处理系统索引树的方法和装置专利的具体信息内容。

1、一种用于在执行包括多个操作(该多个操作至少包括一个结构修改操作)的事务期间允许在索引树中访问高度并行操作的方法,其特征是由以下步骤组成:
顺序执行所述多个操作;
存储一个在所述结构修改操作之前执行的被选操作顺序的指示;
根据所述结构修改操作的完成,写一个指向所述被选操作顺序的所述存储指示的记录;
在所述结构修改操作完成之前所述事务终止的情况下,重新执行所述多个操作中的每个操作;
在所述结构修改操作完成之后所述事务终止的情况下,仅重新执行目的不是结构修改的那些操作。
2、根据权利要求1所述的方法,其特征是在所述结构修改操作完成之后所述事务终止的情况下,仅重新执行目的不是结构修改的那些操作的所述步骤的特征还在于:在重新执行期间使用指向所述被选操作的所述存储指示的所述记录,以便越过所述结构修改操作。
3、一种用于在执行包括多个操作(该多个操作至少包括一个结构修改操作)的事务期间,通过索引树的访问数据的并行访问数据库系统,其特征是由以下装置组成:
用于顺序执行所述多个操作的装置;
用于存储一个在所述结构修改操作之前执行的被选操作顺序位置的指示的装置;
用于根据所述结构修改操作的完成,存储一个补偿运行记录的装置,该补偿运行记录指向所述被选操作顺序位置的所述存储指示;
控制装置,用于在所述结构结构修改操作完成之前所述事务终止的情况下,重新执行所述多个操作中的每个操作;在所述结构修改操作完成之后所述事务终止的情况下,仅重新执行目的不是结构修改的那些操作。
4、一种用于在一个系统中执行一个事务期间通过索引树使用关键字记录的一个区段在成组的记录关键字中取关键字记录数据的方法,在所述系统中其他事务可以并修改所述索引树的结构,所述索引树具有至少一个根节点,每个根节点具有对下较低位层中一个或多个节点的关键字记录引用,所述索引树还具有提供对所述关键字记录数据访问的底节点,这个方法的特征是由以下步骤组成:
通过使用所述关键字记录引用,从所述根节点遍历所述各层节点,直到到达一个适当的底节点;
识别在所述底节点中的所述关键字记录;
请求在所述被识别的关键字记录上条件访问限制;
在所述条件访问限制被许可的情况下,取所述关键字记录;
在所述条件访问限制未被许可的情况下,请求在所述被识别的关键字记录上无条件访问限制;
在所述无条件访问限制被许可之后,检查所述适当的底节点,以便判定所述适当的底节点实际上是否已经被变更;
在所述适当的底节点实际上未被变更的情况下,取消所述关键字记录;
在所述先前适当的底节点实际上已经被变更的情况下,通过使用所述关键字记录引用,从所述根节点遍历所述各层节点,直到到达一个新的适当的底节点。
5、根据权利要求4所述的方法,其特征是在所述无条件访问限制被许可之后,检查所述适当的底节点,以便判定所述适当的底节点实际上是否已经被变更的所述步骤还包括如下步骤:
判定被识别的关键字记录是否是所述适当的底节点中的第一关键字记录。
6、根据权利要求4所述的方法,其特征是在所述无条件访问限制被许可之后,检查所述适当的底节点,以便判定所述适当的底节点实际上是否已经被变更的所述步骤还包括如下步骤:
判定在所述适当底节点中的下一较低关键字记录是否低于请求的关键字记录。
7、根据权利要求4所述的方法,其特征是在所述无条件访问限制被许可之后,检查所述适当的底节点,以便判定所述适当的底节点实际上是否已经被变更的所述步骤还包括如下步骤:
判定低于请求的关键字记录的一个关键字记录是否存在于所述适当的底节点中。
8、一种用于在一个系统中执行一个事务期间通过索引树根据关键字记录把一个单关键字记录插入成组记录关键字中的方法,在所述系统中其他事务可以并行修改所述索引树的结构,所述索引树具有至少一个根节点,每个根节点具有对下一较低位层中一个或多个节点的关键字记录引用,所述索引树还具有提供对所述记录关键字访问的底节点,这个方法的特征是由以下步骤组成:
通过使用所述关键字记录引用,从所述根节点遍历所述各层节点,直到到达一个适当的底节点;
识别高于要被插入的单关键字记录的下一较高关键字记录;
请求在所述下一较高关键字记录上条件访问限制;
如果所述条件访问限制被许可,把所述单关键字记录插入所述适当的底节点;
在所述条件访问限制未被许可的情况下,请求在所述下一较高关键字记录上无条件访问限制;
在所述无条件访问限制被许可之后,检查所述适当的底节点,以便判定所述适当的底节点实际上是否已经被变更;
在所述适当的底节点实际上未被变更的情况下,把所述单关键字记录插入所述适当的底节点;
在所述最初适当的节点实际上已经被变更的情况下,通过使用所述关键字记录引用,从所述根节点遍历所述各层节点,直到到达另一个适当的节点。
9、根据权利要求8所述的方法,其特征是在所述无条件访问限制被许可之后,检查所述适当的底节点的步骤还包括如下步骤:
判定所述单关键字记录是否在所述适当的底节点上。
10、根据权利要求8所述的方法,其特征是在所述无条件访问限制被许可之后,检查所述适当的底节点的步骤还包括如下步骤:
判定所述适当的底节点是否正在参与一个尚未完成的结构修改操作。
11、一种用于在一个系统中执行一个事务期间通过索引树根据关键字记录删除成组记录关键字中的一个单关键字记录的方法,在所述系统中其他事务可以并行修改所述索引树的结构,所述索引树具有至少一个根节点,每个根节点具有对下一较低位层中一个或多个节点的关键字记录引用,所述索引树还具有提供对所述记录关键字访问的底节点,该方法的特征是由以下步骤组成:
通过使用所述关键字记录引用,从所述根节点遍历所述各层节点,直到到达一个适当的底节点;
请求在高于要被删除的单关键字记录的下一较高关键字记录上条件访问限制;
如果所述条件访问限制被许可,从所述适当的底节点删除所述单关键字记录;
在所述条件访问限制未被许可的情况下,请求在所述下一较高关键字记录上无条件访问限制;
在所述无条件访问限制被许可之后,检查所述适当的底节点,以便判定所述适当的底节点上是否已经被变更;
在所述适当的底节点实际上未被变更的情况下,从所述适当的底节点删除所述单关对字记录;
在所述最初适当的节点实际上已经被变更的情况下,通过使用所述关键字记录引用,从所述根节点遍历所述各层节点,直到到达另一个适当的节点。
12、根据权利要求11所述的方法,其特征是在所述无条件访问限制被许可之后,检查所述适当的底节点的步骤还包括如下步骤:
判定所述适当的底节点是否正在参与一个尚未完成的结构修改操作。
13、一种用于在执行包括结构修改操作的事务期间,允许在索引树中选择的关键字记录插入和关键字记录删除的方法,所述索引树具有至少一个根节点,每个根节点具有对下一较低位层中一个或多个节点的关键字记录引用,所述索引树还具有提供对关键字记录访问的底节点,该方法的特征是由以下步骤组成:
通过使用所述关键字记录引用,从所述根节点遍历所述各层节点,直到到达一个用于由所述结构修改操作进行修改的被选节点;
在所述结构修改操作未决的被选节点提供一个指示;
在任何具有结构修改操作未决指示的节点上,延迟关键字记录插入和关键字记录删除;
根据所述结构修改操作的完成,消除被选节点上的所述指示。
14、一种用于在执行包括结构修改操作的事务期间,通过索引树插入和删除关键字记录的并行访问数据库系统,所述索引树具有至少一个根节点,每个根节点具有对下一较低位层中一个或多个节点的关键字记录引用,所述索引树还具有提供对所述关键字记录访问的底节点,该系统特征是由以下装置组成:
访问装置,用于通过使用所述关键字记录引用,从所述根节点遍历所述各层节点,直到到达一个用于所述结构修改操作进行修改的被选节点;
标志装置,用于在所述结构修改操作未决的被选节点上提供一个指示;
控制装置,用于在任何具有结构修改操作未决指示的节点上,延迟关键字记录插入和关键字记录删除;
用于根据所述结构修改操作的完成,消除被选用点上的所述指示的装置。
15、一种用于在执行可以请求结构修改操作的事务期间在该事务完成之前系统故障的情况下允许在索引树中选择的关键字插入的方法,所述索引树的具有至少一个根节点,每个根节点具有对下一较低位层中一个或多个节点的关键字记录引用,所述索引树还具有提供对关键字记录访问的底节点,该方法特征是由以下步骤组成:
通过使用所述关键字记录引用,从所述根节点遍历所述各层节点,直到到达一个用于关键字记录删除的被选节点;
在关键字记录删除未决的被选节点上提供一个指示;
在任何具有关键字记录删除未决指示的节点上,延迟关键字插入;
当结构修改操作的可能性不再存在时,消除所述被选节点上的所述指示。

说明书全文

发明涉及数据处理方法和装置,在其所述实施例中更具体地涉及用于记录的数据库管理的方法和装置。

现有技术中已经公知了多种数据库管理或事务处理系统。通常采用这些系统,以便实现对包含多个数据记录的数据库表进行快速访问。关系事务处理系统能对多个数据库表进行访问,在这些数据库表中,一个数据库表中的单元通常与另一个数据库表中的单元相关。关系数据库允许一个用户通过使用一个或多个特定的单元或字段,检索、存取和变更包含在多个数据库表中的数据。

所有这种数据库系统的一个重要方面就是系统具有对每个数据库中的各个记录实现快速有效访问的能。近来已经有多种数据库管理系统,这些系统支援多个用户同时使用数据库,允许这些用户并行访问特定的数据。

通常由数据管理程序使用索引文件,以便实现对表中的记录进行快速有效的访问。这些索引文件通常被构形在B树结构中。一份讨论B树的参考文献是“Efficient    Looking    For    Concurrent    Operation    on    B-Tree”,Lehman和Yao著,《ACM    Transactions    on    Database    Systems》,第6卷第4期,1981年12月,第650页至第670页。其它论及B树结构的参考文献有“The    Ubiquitous B-Tree,Comer著,《Computing    Surveys》,第11卷第2期,1979年6月,第121页至第137页,和“Concurrent    Operation    on    B-Tree    With    Over    Taking”,Sagiv著,《Proceedings    ACM    SIGACT-SIGMOD    Symposium    on    Principles    of    Database    Systems》,1985年3月,第28页至第37页。

构成B树结构的索引文件包含一个根节点,多层的节点从这个据根节点分支出来。包含在这些节点中的信息包括对下层节点的指示字或对数据库中记录的指示字。这些指示字中进一步包括被称为关键字记录信息的信息,这些信息可以引用数据库中的记录。记录关键字以有序格式存在于所有节点中。例如一个索引树可以有对雇员姓名按字母顺序列的表。根节点将包括与由下一层节点间接或直接引用的记录相关的引用关键字数据。引用关键字包含有关索引文件的信息,即雇员姓名按字母顺序的拼法。因此根节点中的有序关键字将指向下一后续层的节点。换句话说,下一后续节点可以间接或直接引用所有字母A、B和C开始的雇员姓名。与第一个后续节点并行的另一个下一后续节点可以包含姓氏用字母D-M开始的雇员记录。这一层上的最后一个后续节点将引用姓氏用字母N-Z开始的雇员记录。当通过索引文件树进行检索时,最终到达一个底节点。该底节点的内容包括指向存储器中各个记录关键字。

在实现对数据库表进行并行访问的情况下,当多个事务同时试图对一个记录进行访问时,就产生一个问题。具体地说,当一个用户想变更一个记录,而另一个用户想对该记录进行存取时,就会产生争用 状态。对于争用问题的一个解决方案是对记录或对B树索引的区段实现排他访问(或封),以便确保索引节点或记录在用户想对它进行访问时不致被变更。在下述文章中论及了封锁:“Index    Locking    and    Splitting”,《IBM    Technical    Disclosure    Bulletin》,第25卷第7B期,1982年12月,第3725页至3729页;和“Locking    Protocols    for    Concurrent    Operations    on    B-Trees”,《IBM    Technical    Disclosure    Bulletin》,第19卷第10期,1977年3月,第3887页至第3889页。封锁解决方案的缺点在于当允许一个用户进行访问时,封锁阻止了任何其他用户进行的访问。因此对于本领域的技术人员显而易见:通过把使用的封锁次数减到最小值就能提高系统的并行操作能力。

数据处理系统的另一个重要方面是这种系统具有以可恢复方式变更包含在数据库中的数据的能力。也就是说,这些系统要确保持续保留特定用户输入的所有变更,或在由于各种部件的故障中断系统操作的情况下,不保留任何变更。同样也给予用户一种能力,去请求直到时间上的某个特定点之前,把该用户已经对数据库所作的变更撤消。因此,用户对数据库的变更被称为“可恢复的”。这种设计方案被编入以“事务”处理方式操作的数据库系统。一个事务是工作的一个逻辑部件,包括一个操作序列,这个操作序列把可恢复数据库资源的最初一致状态变换成另一个一致状态,而无需在该序列的所有中间点上保持一致性。使用事务处理系统将保证:如果一个事务执行对可恢复数据库资源的某些更新,并且在事务到达其正常终端或一个临时一致 性点之前发生故障,那末就取消那些更新。

因为一个事务包括一个特定应用操作序列的执行,所以它在系统中的存在通常由一个特定的“开始工作”(“BEGIN    WORK”)操作启动,而由“执行”(“COMMIT”)或“异常结束”(“ABORT”)操作结束。上述的COMMIT和ABORT操作在系统中具有原子性。在系统中COMMIT操作表示已经到达一个新的一致性点,所有由所涉及的事务进行的更新必须持续地进行。ABORT操作表示已经发生故障,由所涉及的特定事务进行的任何变更都必须“重新进行”(“volled    back”)或取消变更,可恢复数据库资源返回到先前的一致性点。

为了实现这种事务恢复保证,数据库系统必须能够记住那些在执行的跨越系统停机时间前后的事务以及其更新操作的状态,以便当系统被重新启动时,可以正确地反映这些操作对可恢复数据的影响。通过把每个事务从开始到结束的进程和那些导致可恢复数据资源变更的操作记录到存储在稳定存储器中的一个运行记录里,就能实现上述方案。该运行记录就成为一个资源,用于确保反映事务已执行的操作,或确保其未执行的操作被撤消,以便保证数据库保持一致性。当事务操作运行记录反映数据目标内容时,这些运行记录也就成为用于重构损坏或丢失数据的资源。这些系统通常在记录被写入运行记录时,给每个运行记录赋予一个特有的运行记录序号(LSN)。这种LSN通常以升序号序列赋值。对数据库中一个存储页面的更新运行记录一完成,一般就把对应该更新的那个运行记录的LSN存储在该页面上。

上述这种系统通常称为运行记录先写系统。运行记录先写系统要 求在被变更数据的新版本更换非易失存储器中数据的在先版本之前,必须把对应特定操作的一个运行记录项目实际写入稳定存储器。这里所述的稳定存储器是指非易失存储器,经过系统故障时间之后它还保持原样并有效。一个这种存储器的实例就是使用存储磁盘。此外,这种系统在运行记录中存储事务状态,直到事务执行的状态和事务所有的运行记录数据被稳定地记录在稳定存储器中之前,不认为该事务已经完成。因此在系统故障的情况下,重新启动过程将恢复该事务中已经顺利地完成但还没能先于系统故障把其更新的资源实际写入稳定存储器的任何操作。并且在用于该事务的所有运行记录的所有区段都被写入实际运行记录之前,这种系统不允许事务去完成COMMIT处理。

本发明的一个目的是提供一种更有效的通过索引树访问在数据库中的记录方法。

本发明的另一个目的是提供一种更有效的通过索引树访问在数据库中的记录的方法,该方法允许多个用户更有效地对数据库进行并行访问。

本发明还有一个目的是提供一种更有效的通过索引树访问在数据库中的记录方法,由于树的结构修改,在访问中有延迟的情况下无需再一次遍及该树该方法就使数据能被访问。

上述目的是通过下述的方案实现的。提供一种方法和装置,用于在事务处理系统中索引树的并行修改。索引树包括至少一个根节点,根节点具有对下一低位层中一个或多个节点的关键字记录引用,还包括至少一个实现对关键字记录进行访问的底节点。通过遍及索引树到被选的节点,然后置位结构修改操作未决的指示,执行包括结构修改 操作的事务。在整个索引树上,没有未决结构修改操作指示的位置上允许并行关键字记录插入或删除,指示未决结构修改操作的位置上延迟并行关键字记录插入或删除。同样,在事务未到达新的一致点的情况下,包括关键字记录删除的事务可以请求结构修改操作,但必须被取消。因此,每个还未到达新一致性点的关键字记录删除的指示被置位,并且直到结构修改操作的可能性完结之前,并行关键字记录插入也被延迟。一旦结构修改操作完成,在系统故障的情况下,无论包含结构修改操作的事务是否已经到达新的一致性点,写一个运行记录,该记录将防止取消结构修改操作。在本发明的一个最佳实施例中,在延迟后研究局部节点,以便判定是否无需再一次遍及树就能进行关键字插入或删除。

在一起提交的权利要求中记载了被认为是本发明特征的新颖的技术特征。当结合附图阅读说明书时,通过参看对图示实施例的详细描述,会极清楚地理解发明本身和使用的最佳方式以及其它的各种目的和优点。

图1是根据本发明的并行访问数据库系统的方框图

图2是根据本发明通过数据库进行的初始检索操作的逻辑流程图

图3是根据本发明通过数据库进行的取操作的逻辑流程图。

图4是根据本发明通过数据库进行的插入操作的逻辑流程图。

图5是根据本发明通过数据库进行的删除操作的逻辑流程图。

图6是根据本发明通过数据库进行的关键字记录插入的取消操作的逻辑流程图。

图7是根据本发明通过数据库进行的关键字记录删除的取消操作 的逻辑流程图。

图8是根据本发明的节点分裂算法的逻辑流程图。

图9是根据本发明的节点消失算法的逻辑流程图。

现在参见附图,特别是参见附图1进行说明。图中示出了根据本发明的并行访问数据库系统的方框图。可以看出,该并行访问数据库系统包括多个交互工作站10(IWS),这些交互工作站都连接到主处理机12。主处理机12接着连接到数据库14。本领域的技术人员可以理解:尽管这里公开的是一个特定的实施例,但还可以使用包括通过局部地区网络连接的各个计算机的类似系统。可以看出,交互工作站10的每个操作员可以通过数据库管理系统检索、存取或变更包含在数据库14中的记录,该数据库管理系统一般包括在主处理机12中。本领域的技术人员可以理解:一般通过使用索引文件构成数据库14,如上述这些索引文件通常构形成B树结构。典型的B树结构包括至少一个根节点,多层的节点从该根节点分支出来。包含在每个节点中的信息包括对下一较低层上节点的指示字,或在最低层节点上(通常称为叶节点)包括对包含在数据库中的记录的指示字。

现在参见图2,图中示出了根据本发明通过数据库进行的初始检索操作的逻辑流程图。可以看出,该访问程序由步100开始,接着转到步102,在步102中索引点被S锁存(S-latch),并被访问。S锁存对其他并行用户提供有限访问。该有限访问对其他用户提供存取和读包含在该节点中的信息的权力。不提供其他类型的访问,例如删除或变更的权力。在本实施例中索引根节点识别索引的类型,并提供用于访问一个记录的初始方向。例如,索引根节点能识别该索引是用于多个姓名的按字母顺序升序排列的索引。在步103 中,根据亲代节点中的信息可以识别出要进行访问的子节点。如步104中所示,接着判定要执行的操作是否是取操作。如果该操作不是取操作,即该操作是记录插入(或关键字记录插入)操作,或记录删除(或关键字记录删除)操作,访问程序接着转到步106,以便判定在该亲代节点之下的下一节点是否是底节点或“叶节点”。如果下一节点是叶节点,程序转到步110,得到对子节点的X锁存(X-latch)。X锁存是一种排他锁存,该锁存排斥所有其他对这个特定节点的访问。通过把X锁存用于上述那个节点,该程序禁止所有其他事务对这个特定节点的访问。

返回来再看步104,如果该操作是取操作;或返回来倏床?06,如果该子节点不是叶节点,访问程序就转到步108,得到对子节点的S锁存。访问程序接着转到步112,判定被检索的记录的关键字是否大于该子节点中的最高关键字。当然本领域的技术人员可以理解:在检索进入一个空节点的情况下,被检索的关键字就将自动地被认作大于该子节点中的最高关键字。如果被检索的关键字记录大于该子节点中的最高关键字,该程序转到步114,判定树索引结构是否被锁存了。如果该树未被锁存,该程序转到步118,对亲代节点和子节点开锁,并把该树锁存。访问程序就从步118转回到步102,以便根据树锁存的许可重新启动操作。本领域的技术人员应能理解,能够实现优化设计,以便当重试该操作时,减少必须要被访问的节点数目。

在这个实施例中,在树上提供一种X锁存,以便对所有其他的访问指示正在进行树结构中的变更。如果当在树上试图锁存时,树的X锁存访问正在进行,那未试图进行的访问必须等到在先访问完成之 后。在树上提供一种S锁存,以便对所有其他的访问指示没有正在进行的结构变更,因而其他访问可以并行访问索引树。直到S锁存被释放之前,不会发生其他变更,与S锁存或X锁存的存在无关,可以发生树的遍历。这些树的遍历可以包括关键字记录的删除或插入。

如果在步114中判定树已经被锁存,或在步112中判定关键字不大于包含在子节点中的最高关键字,该程序转到步116,以便判定该子节点是否是叶节点。如果该子节点不是叶节点,该程序转到步115,对亲代节点开锁,然后返回到步103。然而如果该子节点是叶节点,该程序转到步120,对亲代节点开锁,然后转到步122、124和126,判定该操作是否是取操作,插入操作或删除操作。在图示的实施例中,如果试图完成的操作不是这三种操作的任何一个,则如步130中所示的该程序将返回到用户。在实际使用时,该返回将包括指示本程序不能识别要执行的操作的错误信息。

如果要执行的操作是取操作,该访问程序就转到图3的步200。图3中示出了根据本发明通过数据库进行的取操作的逻辑流程图。在图3的步200中,该程序在数据库中查找正被检索的请求的关键字或下一较高关键字。在步202中,该程序接着请求在找到的关键字记录上条件封锁。在图示的实施例中,由管理在记录关键字上封锁的数据库管理程序请求条件封锁。术语“条件”的意义是如果该封锁没有被立即许可,就对请求的存取器发生响应,指示这样一种封锁现在未被许可。该响应用于作出步204中所示的判断。如果封锁未被许可,该程序转到步206,对子节点开锁,然后转到步208,请求在关键字记录上无条件封锁。如步208中所示,对无条件封锁的请求要求在继续执行之前存取器等待,直到这种封锁被许可。一旦该封 锁被许可,该程序接着在步214中重新锁存子节点,并在步216中判定该节点是否已经变更。在步216中这种对节点的检查在这里被称为“局部检查”,如果该节点实际上没有变更,利用这种对节点的检查,通过允许再从局部节点开始执行程序,而不用再次遍及全树,提高图示系统的效率。例如可以通过把存储在该节点中的LSN与等待期间之前记录的LSN比较作出判定。如果该节点没有变更,步218接着判定该关键字是否是该局部节点中的第一关键字。如果不是,如步209所示找到的关键字记录返回。此后如步210中所示,子节点被开锁。在步211中,关键字记录被开锁。本领域的技术人员显而易见:步211将发生在事务被完成时或较早的时间。

返回来再看步218,如果被锁存的关键字是该节点中的第一关键字,该程序就返回到图2中所示的过程开始的位置,以便再次遍历树。由于存在未找到请求的关键字记录而查找到的下一较高关键字记录是该局部节点中的第一关键字的可能性,因此上述的程序返回是必要的。在等待对查找到的关键字记录进行无条件封锁时遇到的延迟可能指示:在下一较低节点上已经发生关键字记录插入,因此可能存在请求的关键字记录。在这种情况下,必须再次遍历树,以便确定请求的关键字记录是否存在。

返回来再看步216,如果该节点已经被变更,步220接着就判定该节点是否还象先前的那个子节点一样存在于相同的层中。如果不在相同的树和相同的层中,就必须再次遍历树,以便查找对请求的关键字记录适当的子节点。如果该局部节点所在的树和层都是相同的,用步222查找请求的关键字或下一较高关键字(尽管该节点已变更)。接着用步224判定该程序是否已经找到与以前相同的关键 字。如果已经找到相同的关键字,那未适当的关键字记录已经被查找时,然后如上所述通过步209返回。如果没有找到相同的关键字,必须再次遍历树,以便查找适当的子节点。如果在小于请求的关键字记录的子节点中确实存在关键字,那未步226就表示消除在先前找到的关键字记录上的封锁,并返回到步200,再次查找请求的关键字或下一较高关键字。

现在参见图4,图中示出了根据本发明通过数据库进行的插入操作逻辑流程图。本领域的技术人员显而易见:在插入操作开始之前,如果有必要,要被插入的关键字记录将被X封锁(X-lock)。使用这个操作把记录插入计算机存储器,并把被插入的关键字插入索引,更新该索引的相应节点,允许其他事务访问新插入的记录。

在步300中,首先判定要被插入的关键字记录是否适合于底节点或叶节点。如果适合,该程序转到步304,以便查找大于要被插入的关键字的下一关键字。如果下一关键字不在该节点中,该访问程序指向下一后续被查找的叶节点。如果没有下一后续被查找的叶节点,该访问程序就查找到零指示器。接着在步308中,该访问程序将消求在下一关键字记录上条件X封锁。在步312中,判定该条件X封锁请求是否已经被许可。如果已经被许可,就用步330判定SMO(结构修改操作)位是否等于0。

SMO位是在叶节点中的一个标记,它由包括结构修改操作的事务的未决状态置位。根据本发明,当另一个用户的结构修改操作未决时,该标记位用于延迟某一用户的操作。一旦另一个用户的结构修改操作已经完成,根据本发明,该结构修改在系统故障的情况下将不会被取消,此后SMO位将被置0。

接着用步332判定删除位是否等于0。根据本发明的另一个重要的技术特征,在每个叶节点中设有一个删除位,以便指示上述那个节点是可正在参与或已经参与一个删除操作,而该删除操作还未到达新的一致状态。考虑到下述实际情况就能理解上述的判定是重要的,即如果该节点中设有保留足够的空间再插入先前被删除的位,在到达一致状态之前如果必须取消(UNDO)一个删除操作,该先前被删除的记录的后续插入操作可以请求一个节点分裂。索引树结构中的这个变更可能对并行操作产生不利影响。

因此如果删除位等于1,直到到达一个新的一致性点之前,必须延迟试图进行的关键字记录操作。如果满足这两个条件,步334表示对插入操作的记录,这在所有运行记录先写系统中都是必要的。此后步318把关键字插入上述那个子节点。在步324中,对下一记录和关键字记录开锁。此外,按照步329把保持的所有锁存释放,接着步325把该程序返回给用户。

再参见步330和332,如果SMO位等于1,或删除位等于1,指示结构修改操作的未决状态或在UNDO期间必须进行结构修改操作的可能性,如步336中所示该访问程序必须请求在索引树上条件S锁存。步338表示判定该锁存是否已经被许可。如果已经被许可,在如上面步334和318所述的记录该插入和执行该插入之前,在步340中把SMO位和删除位置0。

在步336中请求的在树上条件S锁存未被许可的情况下,用步324对节点开锁,步334表示请求在树上无条件S锁存。经过一段时间,无条件S锁存被许可以后,步346表示重新锁存上述那个节点。接着用步348局部检查该节点,以便判定该节点实际上是否 已经被变更。如果该节点未被变更,按照步334和318记录和插入要被插入的关键字记录。

在先前找到的节点实际上已经被变更的情况下,用步350判定发现的节点是否在相同的索引树和相同的层。如如不在相同的索引树和层,该程序返回到图2中所示的检索程序,再次遍历树,以便判定适当的节点,在发现的节点已经被变更,而树和层是相同的情况下,用步352判定要被插入的关键字是否在该局部节点上。如果在该局部节点上,就无需再次遍历树,按照步334和318记录和执行该插入操作。如果不在该局部节点上,如上所述就要再次开始图2中的检索过程,以便查找和识别对关键字插入操作适当的节点。

再参见步312,如果在下一关键字记录上的条件X封锁未被许可,该程序转到步316,对子节点开锁,接着转到步322请求在下一关键字记录上无条件X封锁。在无条件封锁已经被许可之后,步354表示对该节点重新锁存,步356表示检查该节点,以便判定在等待期间该节点实际上是否已经被变更。如果该节点未被变更,用步360判定该插入关键字是否在该节点中。如果在该节点中,按照步334和318记录和执行该插入操作。

在该节点已经被变更的情况下,用步358判定该节点所在的树和层是否仍然是相同的树和层。如果不是相同的树和层,就重复图2中所示的检索过程,以便查找适当的节点。如果该节点所在的树和层匀皇窍嗤氖骱筒悖陀貌?60判定要被插入的关键字记录是否在该局部节点中。如果不在该局部节点中,如上所述重复图2中所示的检索过程。如果要被插入的关键字记录在该局部节点上,该程序返回到步300,然后继续执行上面列举的过程。 返回到步300,如果要被插入的关键字记录不适合该叶节点,该程序转到步302,请求在索引树上条件X锁存。接着步306判定该条件锁存是否已经被许可。如果未被许可,该程序转到步310以便对子节点开锁。接着转到步314,请求在索引树上无条件X锁存。在索引树上无条件X锁存已经被许可之后,步362表示对该节点重新锁存,接着用步364检查该局部节点,以便判定在等待期间该节点是否已经被变更。

如果该节点已经被变更,就调用步320所示的节点分裂算法(在下文中将更详细地叙述),然后树被开锁,插入过程返回到步300,以便根据关键字的值把该关键字记录插入新建立的节点或原先查找到的节点上。如果找到的节点已经被变更,就用步366判定该局部节点所在的树和层是否继续处于相同的树和层。如果不是相同的树和层,如上所述该程序返回到图2中所示的检索过程,以便查找适当的叶节点。如果该局部节点所在的树和层仍然是相同的树和层,就用步368判定要被插入的关键字记录是否在该局部节点上。如果不在该节点上,就重复图2中所示的检索过程。如果要被插入的关键字记录在该节点上,该程序返回到步300,并继续执行其后必要的各步,以便插入该关键字记录。

现在参见图5,图中示出了根据本发明通过数据库进行的删除操作逻辑流程图。本领域的技术人员显而易见:如果有必要,在删除操作开始之前,将把要被删除的关键字记录X封锁。在步400中,该程序查找大于要被删除的关键字的下一关键字。在步402中,该程序请求在该下一记录关键字上条件X封锁。该程序转到步404,判定该条件X封锁是否已经被许可。如果请求的条件X封锁未被许可, 该程序转到步406,对子节点开锁,接着在步410中请求在该下一关键字记录上无条件封锁。

等待该无条件封锁许可之后,步456表示对子节点重新锁存。此后用步458检查该局部节点,以便判定在等待期间该节点实际上是否已经被变更。如果未被变更,就用步462判定要被删除的关键字是否仍然存在。如果仍然存在,该程序返回到步400,以便开始删除过程。如果不存在,就重复图2中的检索过程。

如果该局部节点实际上已经被变更了,就用步460判定该节点所在的树和层是否继续处于相同的树和层。如果不是相同的树和层,该程序返回到图2中所示的检索过程。如果该局部节点所在的树和层仍然是相同的树和层,就用步462判定要被删除的关键字是否仍然在该局部节点中。如果不在该局部节点中,该程序再次返回到图2中所示的检索过程,以便查找适当的叶节点。但是如果要被删除的关键字在该局部节点中,该程序就返回到步400,以便开始删除过程。

现在返回来再看步404,如果在下一关键字记录上的条件X封锁已经被许可,就用步432判定要被删除的关键字是否在该局部节点上。如果在该局部节点上,就用步434判定SMO位是否等于0,SMO位等于0指示上述那个叶节点未参与尚未完成的结构修改操作。如果SMO位等于0,步436把删除位置1,指示上述那个节点有在一个事务中要被删除的关键字记录,而该事务尚未到达一个新的一致性点。此后在步437中记录要被删除的关键字记录,接着步408表示该关键字记录的删除操作。

在要被删除的关键字记录不在该叶节点上,或SMO位不等于0的情况下,步438表示请求在索引树上条件S锁存。通过步440 判定,在请求的锁存已经被许可的情况下,步442把SMO位和删除位置0,接着按照步437和408记录和完成该删除操作。如果请求的索引树条件S锁存未被许可,步444表示对该节点开锁,步446表示请求在索引树上无条件S锁存。

等待该无条件S锁存被许可之后,步448表示对该子节点重新锁存,步450表示对该节点重新局部检查,以便判定在等待期间该节点实际上是否已经被变更。如果未被变更,该程序返回到步442,SMO位和删除位都被置0,接着按照步437和408记录和完成该删除操作。如果该局部节点实际上已经被变更,就用步452判定该节点是否仍然处于相同的树和相同的层。在该节点仍然处于相同的树和相同的层的情况下,用步454判定要被删除的关键字记录是否在该节点中。如果在该节点中,该程序返回到步400,以便开始删除过程。如果该散部节点不再处于相同的树或相同的层,或在要被删除的关键字记录不在该节点中的情况下,该程序就返回到图2中所示募焖鞴蹋员闳范ǘ陨鲜瞿歉霾僮魇实钡囊督诘恪?

在按照步408删除该关键字记录之后,该程序接着转到步412,以便判定先前包含该关键字记录的那个节点现在是否是空的。如果不是空的,该程序在步421中对该节点开锁,然后在步414中返回到操作员。相反,在先前包含被删除的关键字记录的那个节点是空的情况下,用步416请求在该索引树上条件X锁存。接着在步418中,该程序判定该条件锁存是否已经被许可,如果已经被许可,该程序转到步424,以便执行节点消失算法(在下文中将更详细地叙述)。节点消失算法在索引树中消除该空节点,并消除从先前各节点对该空节点的引用。此后,步426表示对该树开锁,在步430中把该程 序返回到操作员。

再参见步418,在请求的索引树条件X锁存未被许可的情况下,步420表示对该子节点开锁,接着在步422中请求在该树上无条件X锁存。在等待对该索引树的无条件X锁存被许可之后,步423接着判定在等待期间上述那个节点是否已经被变更。如果已经被变更,该程序就在步425返回到操作员;如果未被变更,就完成上述的节点消失算法及其后续的各步。

现在参见图6,图中示出了根据本发明通过数据库进行的关键字记录插入的UNDO(取消)操作的逻辑流程图。本领域的技术人员会理解:在一个关键字记录已经被插入一个事务,并且在到达一个新的一致性点之前已经发生系统故障的情况下,必须重新执行或“UNDO”该关键字记录插入。这与关键字记录删除等效。从图6中可以看出,在步500中,关键字记录插入的UNDO的第一步是从运行记录中确定适当的节点。接着如步502中所示,对该适当的节点X锁存。步504用于如果由于该系统的重新启动该UNDO正在被执行,就把SMO位和删除位置0。接着用步506判定在导致该UNDO的系统停机之前,上述那个节点是否处于相同的树和相同的层。同样用步508判定要被删除的关键字是否在该节点中。如果树和层已经变化或关键般不在该节点中,在这两种情况下该程序都必须返回到图2中所示的检索过程。接着用步510判定SMO位是否等于1,该位指示上述那个节点已在参与一个仍然未决的结构修改操作。如果SMO位于等于1,步512表示判定要被删除的关键字是否是该节点的第一关键字或最后关键字。如果SMO位等于1,或要被删除的关键字是该适当节点中的第一关键字,步514表示请求在 该树上条件S锁存。接着步516判定该锁存是否已经被许可。如果已经被许可,步518就把SMO位和删除位置0。

在SMO位不等于1和要被删除的关键字不是该适当节点中的第一关键字的情况下,步520表示在完成该关键字记录删除之前写运行记录。此后如步522中所示删除该关键字记录,接着用步528判定该节点现在是否是空的。如果不是空的,该程序在步530中返回到操作员。如果关键字记录的删除实际上已经使该节点变成空的,步532就把该程序转到节点消失算法,在完成该步之后,步534对该树开锁,在步536中把该程序返回到操作员。

现在返回来再看步516,如果请求的在该树上条件S锁存未被许可,步524表示释放该节点锁存,在步526中请求在该树上无条件S锁存。接着在该无条件S锁存被许可之后,该程序返回到步502,以便开始该关键字插入操作的UNDO。

现在参见图7,图中示出了根据本发明的关键字记录删除的UNDO操作逻辑流程图。本领域的技术人员会理解:为了把索引树保持在一个一致性点,在完成操作之前出现系统故障或其他错误状态的情况下,必须周期地重新执行或“UNDO”一个尚未到达新的一致状态的操作。关键字记录删除的UNDO操作方式与关键字记录插入大致相同。可以看出,第一步是从根据运行记录先写协议已经保存的运行记录中确定适当的节点。这在步600中示出。接着步602表示对该节点X锁存。步604表示如果由于系统故障之后的重新启动该UNDO正在执行,就把SMO位和删除位置0。

用步606判定该节点是否处于与导致发生该UNDO之前的状态相同的树和相同的层,如果不在相同的树和相同的层,就重复图2 中所示的检索过程,接着步608表示判定要被该UNDO操作删除的关键字是否在该节点中,如果不在该节点中,也重复图2中所示的检索过程。

如果要被删除的关键字在该局部节点上,步610判定SMO位是否等于1,如上所述指示上述那个节点涉及一个未决结构修改操作。如果SMO位不等于1,步612判定删除位是否等于1,以便确定上述那个节点最近是否有一个在某个尚未到达一致性点的事务中的要被删除的记录。

如果SMO位和删除位都不等于1,该程序就转到步624,以便判定要被插入的关键字记录是否适合该适当的节点。再参见步610和612,如果SMO位或删除位等于1,步614表示在树上条件S锁存。步616接着判定该S锁存是否已经被许否,如果已经被许可,就在按照步624所述判定要被插入的关键字是否适合该节点之前,用步622把SMO位和删除位置0。

在步614中请求的在该树上条件S锁存未被许可的情况下,接着步618表示释放该节点锁存,并在步620中请求在该树上无条件S锁存。在该树上无条件S锁存已经被许可之后,该程序返回到步602,在步602该节点被X锁存,重新开始该过程。

再参见步624,如果要被插入的关键字记录不适合于该适当的节点,步626表示调用节点分裂算法。在节点分裂算法已经完成之后,步628表示对该树开锁,该程序再返回到步602,以便重新开始该过程。在要被插入的关键字记录适合于该适当节点的情况下,步630表示在步632中完成该插入之前写一个运行记录,插入完成之后,该程序在步634返回到用户。

现在参见图8,图中示出了根据本发明的节点分裂算法的逻辑流程图。可以看出,通过存储一个专用运行记录序号开始该节点分裂算法,该序号与在该节点分裂操作之前刚完成的那个操作相关。本领域的技术人员会理解:在一个在前传输的事务中,这个运行记录序号是在该节点分裂算法之前刚完成的那个操作的运行记录序号;而在一个请求节点分裂操作的UNDO中,这个运行记录序号是就在上述那个操作之后刚发生的操作的运行记录序号。

接着如步702中所示该树被X锁存,然后如步704中所示,根据运行记录先写协议记录该新节点请求。步706用于得到新的节点,步708表示如果有必要,就对新节点和过去的节点X锁存。在步710中,根据运行记录先写协议,在步712把关键字的区段从过去的节点移到一个新的节点之前,把对关键字位置的变更写入运行记录。步712还把已经改变的那个叶节点中的SMO位置1,以便并行的用户可以判定上述那个节点涉及一个尚未完成的结构修改操作。

接着如步714中所示对过去的和新的节点开锁,在步716中对亲代节点X锁存。任何在亲代节点中必要的变更都在步718中被记录,并在步720中更新该亲代节点。接着如在步722中所示,对该亲代节点开锁,并把伪补偿运行记录(CLR)写入运行记录存储器,该运行记录指向存储的相应运行序号(LNS)。本领域的技术人员会理解,综合运行记录是一种确定UNDO发生的位置或时间点,并识别在该时间点上有多个操作和什么操作被取消的运行记录。按照这种方式,尽管在涉及的事务到达一个新的一致性点之前系统可能发生故障,那个刚被完成的结构修改操作也不会被取消。如果发生这样的故障,伪 CLR记录将导致取消算法,以便跳越到就在该结构修改操作执行的开始处之前发生的那个操作。因此,如果结构修改操作未被完成,任何涉及结构修改操作的事务都会被全部重新执行,但是如果在系统停机或正常处理期间事务ABORT之前,该结构修改操作已经被完成,就将仅重新执行非结构修改操作。应该注意:尽管包含结构修改的完成执行状态的事务发生故障,上述方案也将有效地禁止取消已经被完成的结构修改。按照这种方式,由于该系统具有无需要求事务完成执行状态就能执行结构修改的能力,因此可以得到高度的并行操作性能。

最后参见图9,图中示出了根据本发明的节点消失算法的逻辑流程图。可以看出,以与节点分裂算法相似的方式,在步800中通过存储一个专用LSN开始该过程。接着按照步802对该树X锁存,按照步804如果有必要对相邻的和过去的节点X锁存。

根据上述的运行记录先写协议,按照步806记录该节点消失关键字移动,接着步808表示从相邻节点把关被字移动到空节点。步808还表示把SMO位置1,对并行的用户指示对该特定节点的一个未决结构修改操作正在执行。接着同步810更新前向节点指示字,用步812消除该相邻节点。

按照步814接着对子节点和相邻节点开锁,在变更亲代节点之前,按照步816对亲代节点X锁存。步818表示在完成步820中所示的变更之前,记录对亲代节点的变更。此后在步822中对亲代节点开锁,在步824中写指向存储的专用运行记录序号(LSN)的伪补偿运行记录(CLR)。

本领域的技术人员会理解:在上述的节点分裂和节点消失两种算 法中,在结构修改操作被完成之后,SMO位可以在任何时间以任何适当的方式置0。根据鲜瞿谌荩玖煊虻募际跞嗽被崂斫猓荷昵肴艘丫峁┝艘恢钟糜谠谑挛翊硐低持卸运饕鞑⑿行薷牡姆椒ê妥爸茫烁檬魃辖峁剐薷牟僮魑淳龅哪切┣蛑猓ü市碓谡鍪魃现葱泄丶旨锹嫉牟迦牒蜕境垢檬挛翊硐低尘哂懈叨炔⑿胁僮餍阅堋?

此外,一旦结构修改操作被完成,用伪补偿运行记录确保:尽管在上述那个事务到达一个新的一致性点之前系统停机,该结构修改操作也不会被取消。用这种方式,保持了索引树的实际一致性,由保持一致性而产生的高度的并行操作将提高多个并行用户对该索引树的利用率。

同样,在刚发生删除操作的节点中使用一个标记位将延迟关键字记录的插入,否则由于在UNDO期间发生的结构修改操作可能会影响该关键字记录的插入。一旦包含记录删除的事务已经到达一致状态,该删除位再次被置0,允许执行任何被延迟的关键字记录插入。

本领域的技术人员会理解:尽管本说明书中所述的各种操作一般涉及在叶节点中发生的操作,但是这种节点分裂和节点消失操作会经常导致相同的操作沿树向上扩展直到根节点。应能理解:本发明书中所公开的方法同样适用于那些较高层的各种操作。

虽然通过参考一个最佳实施例已经详细地公开和说明了本发明,但是本领域的技术人员会理解:无需脱离本发明的精神和保护范围,就可以作出各种形式上和细节上的改变。

高效检索全球专利

专利汇是专利免费检索,专利查询,专利分析-国家发明专利查询检索分析平台,是提供专利分析,专利查询,专利检索等数据服务功能的知识产权数据服务商。

我们的产品包含105个国家的1.26亿组数据,免费查、免费专利分析。

申请试用

分析报告

专利汇分析报告产品可以对行业情报数据进行梳理分析,涉及维度包括行业专利基本状况分析、地域分析、技术分析、发明人分析、申请人分析、专利权人分析、失效分析、核心专利分析、法律分析、研发重点分析、企业专利处境分析、技术处境分析、专利寿命分析、企业定位分析、引证分析等超过60个分析角度,系统通过AI智能系统对图表进行解读,只需1分钟,一键生成行业专利分析报告。

申请试用

QQ群二维码
意见反馈