保存和恢复互锁树数据库的制作方法

文档序号:6553010阅读:255来源:国知局
专利名称:保存和恢复互锁树数据库的制作方法
技术领域
本发明涉及互锁树数据库的操作领域,具体地说,允许保存和恢复互锁树数据库,更具体地说,涉及用于提供保存和恢复互锁树数据库的改进方案。
背景技术
保存和恢复作为互锁树数据库的知识存储体(或KStore)是该类数据库的商品化的重要特性。在实验过程中,通过应用本文中说明的基本理论,已经将保存和恢复知识存储体所需要的时间减小了几个数量级,并且减小了所需要的存储器尺寸。
已经开发了用于创建和使用互锁树数据库的一种系统和各种方法。具体地说,这些结构和方法在Mazzagatti发明的共同待决的美国专利申请号No.10/385,421和10/666,382中得到具体描述。另外,我们描述了一个系统,其中这样的互锁树数据库在美国专利申请系列号No.10/879,329中被更有效地使用。虽然在本专利中描述的系统和方法具体地涉及到由发明人Mazzagatti在上述专利(申请)中描述的特定的互锁树数据库,但本文描述的系统和方法也可以应用于类似的结构。
保存的互锁树数据库当然具有其它的用途。通过部分保存或整个互锁树数据库的“部分”,甚至有更多的用途。所以,可以使用保存和恢复过程来进行工作,例如把已在一个机器上构建的互锁树数据库保存到多个计算机(或保存部分互锁树数据库),用于类似的但分布的或独立的同期(对等的)用途,这仅仅是一个示例。从实际的观点来看,可以得到在中央处理器上存储装有内容的互锁树数据库,并被恢复到遍布全国的公司的现金出纳机,用于在销售点进行库存的查询,而无需求助于中央数据库。人们可以在其各自的计算机上看到保存过程资料或样本知识库用于教学用途或修改。对于任何这类类用途,对此需求做出响应,于这些需要的保存和恢复过程可被使用来移动互锁树数据库和部分保存,从任何存储器到任何其它的存储器。
尽管在共同待决的美国专利申请系列号No.10/385,421中最初描述的系统创建的互锁树数据库结构提供了许多有用的特性,用于各种不同方式的数据联系,以及用于生成对于各种查询的结果而不需要生成特定结构来获得结果,但迄今为止,它的用途仍旧有根本上的局限性。一个局限性是计算机的存储器的数据结构在原位工作,但不能(amenable)修改移动、保存和以后的恢复。以前,每当我们需要移动它或需要关闭它所位于的计算机系统时,都必须重新教导,即重新创建(或更精确地,允许我们的库存系统重新创建)互锁树数据库的整个新的拷贝或安装。因此,对于以前的互锁树数据库开发,除了计算机系统故障之外,不能获得可用的互锁树数据库的便携性和耐久性。
假定我们创建的数据结构不存在于在我们的开发之前的计算机系统中,就很难用这类系统的原有设计方式来适应我们的需求。因此,迫使我们设计一种特定的方式来保存我们的结构,由此该结构可被恢复而不会损失使其成为此结构的连接;即需要正确地恢复指针结构,除了新系统内的改变后的地址空间.基本根节点需要它们的数据被保持,访问指向所恢复结构的指针。所有的节点需要具有相同的访问指针的途径,虽然它们以后可被全部恢复到不同的地址,需要用不依赖于操作系统(OS)和机器的方式来实现,这样,互锁树数据库可被使用于任何计算机环境。
通常,互锁树数据库的树林以前述专利文件中描述的方式被生成和/或访问。基于树的数据库包括依赖于第一根节点的第一树,其可包括多个分支。第一树的每个分支在一个叶节点结束。每个叶节点可以表示一个最终产品或子部件节点。同一个基于树的数据库的第二根被链接到表示最终产品的各个叶节点。最后,基于树的数据库包括多个树,其中每个树的根节点可被描述为基本节点。每个树的根节点可被链接到在第一树的一个或多个分支上的一个或多个节点。基于树的数据库的节点只包含指向在基于树的数据库内其它节点的指针,还可能包含附加字段,其中一个这样的字段可以是计数字段。另外,描述了获取与特定节点有关的变量一致性的概率的装置,例如在一个或多个确定的聚焦点内用所需文字表示。此外,示出了关于这类变量的排序逻辑算子的应用。
使用共同待决的申请序列号No.10/759,466中描述的保存和恢复系统工作后,我们发现可以非常更加有效地实现保存和恢复。因此,我们在这里描述这些发现内容,以及来自该申请的某些原始公开内容。

发明内容
为了保存和能够恢复包括一个或多个级别的互联树的树林的基于树的数据库,即优选与美国专利申请序列号No.10/385,421中所述类似或相同的固有学习过程生成和/或访问,需要保存支持结构、节点组织、以及特定的基本数据。
如前所述的SAVE/RESTORE(保存/恢复)过程对于很大的K数据库是非常慢的。在许多情况下,从原始数据来重新创建K是更快速的。
新方法不保存asCase和asResult列表。这些列表可以通过恢复各个单独的节点而重建。即当节点被恢复时,新的节点地址被存储在Case指针的asCase表和Result指针的asResult表中。
新方法的另一个重要的方面在于,在恢复阶段,它只需要passthrough一次数据,而不是系列号10/759,466中的原始方法的两个来回。正如在之前的专利中对于优选的互锁树数据库所述,基于树的数据库的每一级包括取决于第一根节点的第一树,其可以包括多个分支。第一根节点可以表示一个概念,例如但不限于级别开始指示符。第一树的每个分支结束于一个叶节点或一个最终产品节点。基于树的数据库的同一级别的第二根节点被链接到第一树中表示最终产品的每个叶节点。因此,第二根节点实际上是第一树的反序节点,或第一树的子组,但第一树没有被复制。第二根节点表示一个概念,例如但不限于级别结束指示符。最后,基于树的数据库包括多个树,其中每个树的根节点可包括例如数据组单元或表示数据组单元的数据。这种类型的根节点在这里被简称为基本根节点。每个树的基本根节点可被链接到在未被复制的第一树的一个或多个分支中的一个或多个节点。基于树的数据库的非根节点实际上只包含指向基于树的数据库内其它节点的指针,并可能包含附加字段,其中一个这样的附加字段可以是计数字段。在包括基于树的数据库的每个级别的树的树林中的树的根节点也由指针组成,然而,基本根节点可以额外包含表示信息的数据(即,包含作为或表示例如数据组单元的数据或例如级别开始或级别结束指示符概念的数据);基于树的数据库的所有其它节点只指向其它节点,并基本上不包含数据。在一个实施例中,数据是与字符、像素表示、条件例如开始指示符、结束指示符、字段指示符的开始或者类似等等有关的整数,虽然互锁树数据库不限于此。上述基于树的数据库的多个级别可以被生成和访问;较低级别的最终产品变为下一个级别的基本根节点。在本发明的保存和恢复中,使用级别来引导过程,如本文具体描述。
节点本身的结构通常用每个节点内有限的数据字段组来保持。总共有对于Case(情形)、Result(结果)、asCase列表指针、asResult列表指针的字段和附加字段,后者对于每个基本根节点,大多数结构形式内包括至少一个计数字段,以及一个数值字段。
为了保存上述结构,并且如上述列出的待决专利申请所描述,这些专利申请整体地被引用以供参考,应当保存支持结构,但取决于计划采用哪种恢复形式,其中某些结构可能无损失的丢失。支持结构根据正在保存的互锁树数据库的形式以及如何保存数据库的过程而变化。
整个互锁树数据库结构本身必须访问各个节点的保存机器所遍历,并从每个节点中的信息生成用于保存的节点包。在一个优选实施例中,节点包将包含由保存机器创建的元数据,该元数据优选地包括节点包的长度。该保存机器然后将把节点包保存到永久存储器或任何一种希望用于保存互锁树数据库的存储器,不管是在形成该保存机器或者形成其他机器或者存储器系统中。这样的存储器可以是相对较永久的,对于安放所述一个存储器的机器的本地存储器,通过网络可访问的系统中的远端存储器,在分区机器中的部分存储器,所述一个存储器的另一个部分。最后,在大多数情形下,我们预期将互锁树数据库恢复到一个有效存储器,不管其在原先的机器中,或在其他能够提供功能的机器中。稍后讨论元数据也可以被存储在包本身中。还要讨论如何以优选方式组织包的存储,作为在较大的包内的节点包。
在用于确定哪些支持结构需要被保存的原始概念中,一些选择包括一个文件头,其包含创建日期(用于保存)、文件ID、简称为“传感器”但通常描述为基本根节点的数值列表,或指向数值的地址、表示结构的最终产品的字符串列表(因为它们表示在互锁树数据库树林内的所有“设想”和节点字符串)、可以描述它所处的基本操作系统或计算机系统的数据结构的任何所需元数据,如果需要的话,还有密码保护,指针列表在节点中如何排序,以及恢复结构或确定待保存结构中信息的地址的任何所需信息。另外,文件头可以保存K个状态变量(例如一个节点中支持多少个附加字段,将进行哪种查询,asCase表和asResult表如何构建,数据源,转换开关,以及数据流)和/或数据源描述符,例如表示哪些源接受查询和/或从哪些源得到信息等等的钩。所有这些项目的数据可以在单个文件头中,或其中的全部或一些数据可以在每个包的小文件头中,或者在使用特定项目的包中,或者在某些不需要保存这种信息的情况下。编程领域技术人员能够明白,假定系统是基于已知环境或类似环境,会使得这类数据在特定环境下保持非相关。换句话说,如果保存K和恢复K的环境相同或相当类似,很多元数据可能是冗余的。(“数据流”是表示数据组以及其相关输入源的术语,不管它是静态还是动态的。)
在尝试使处理过程更有效时,我们发现不必保存用于asCase和asResult列表的指针(虽然保存多个表的指针可能有助于使得恢复更有效)。然而,这种改进方案通常只在我们以正确的序列保存节点时才能通过使用当前的技术而顺利运行,即具有asCase和asResult表的节点在它们指向的节点之前被处理。我们简单地从互锁树数据库的最低级别开始,然后在保存所有最低级别的节点后移到随后的(较高的)级别,从具有asCase指针(BOT和子器件节点)和asResult指针的节点(根节点)开始,然后移动到较高的级别,在该级别上从相同类型的节点开始。
接下来描述如何使用三种新的节点包用于这种改进的保存和恢复系统,在本专利中我们称为包类型1,2和3。在优选实施例中,我们表示和互锁树数据库结构一起保存的支持结构内的节点包类型。作为替代,用于节点包类型的标志符可被存储在节点的附加字段。在关于类型的术语方面可能存在一些混淆,在具体说明中提供一个密钥用于区分所讨论的节点和包的类型,以及分类取决于节点“字段”的内容或包组织的内容。
类型1节点包包括当前的或旧节点地址、Case和Result指针、“任何附加字段”、asCase表指针的计数值和asResult表指针的计数值。类型1包还可以具有包尺寸的信息和节点包类型的指示。需要列表计数值的原因是,当保存的K被恢复时,需要在用来保存所恢复K的目标机器的存储器中为这些表分配足够的空间,指针的数目(每个指针需要一定的地址)对尺寸需求影响很大。节点的绝对数目是尺寸分配需求的另一个主要因素,但如果我们需要分配为每个节点分配存储器区域,则该需求主要是指针表的尺寸。
类型2包包含Case和Result指针、任何附加字段、当前的或旧节点地址,还可以具有包尺寸和包类型的信息,因此省略了asCase表指针的计数值和asResult表指针的计数值。节点包类型1和类型2可以用于如下所述的各种环境,但应当明白,它们可以根据用户的需要或喜爱被选择。
第三种类型,类型3识别出节点在互锁树数据库中只具有asCase或asResult表,并且不同时具有二者。因此,它包含当前的或旧节点地址、Case和Result指针、“任何附加字段”、和一个指针表计数字段,因此节省了同时具有asCase和asResult指针表区域所需要的存储器空间。类型3包还可包含有包尺寸和包类型的信息。包类型信息包括包内包括了哪种指针表,asCase或asResult的指示。如果包不包含包内包括哪种类型的指针表的信息,则指针表将被认为是asReference型,Restore(恢复)和/或其它Kstore处理过程将确定其类型。
节点包类型1,类型2和类型3可以用于各种环境,事实上,它们可以一起被使用于单个保存/恢复操作,只要类型1被使用于一种节点以及类型2被使用于另一种节点。不太可能在单个保存的K中一起使用三种类型,因为这需要在算法中附加编程步骤,这将创建节点包并确定给定节点是两种类型的哪种类型,而这将降低处理速度,此时几乎或很少获得利益。然而,应当指出,恢复子程序会占用包含不同节点包类型的已保存的K,例如用于包类型1的已保存的K1和用于包类型2的已保存的K2,并且把它们恢复成单个新的K。
对于以前的保存和恢复专利申请,优选地仅在每次新的包准备好用于贮存或已存储时确定包的尺寸,优选通过任何建立包的机制。其总存储器长度、给定的通常的编程约束条件和习惯被放置在文件头中,或者被保存用于整个互锁树数据库存储器区域。在一些实施例中,所有的包都给定相同的长度,以避免这个步骤,在该实施例的保存中舍弃了任何剩余的空间。我们还公开了使用包内的包来更好的组织本发明中的保存。
为了访问所有的节点,可以用不同的方式遍历结构。可以从初级根节点开始,沿asCase路径遍历,或从最终产品节点出发,沿着向后的Case链路,直至所有的初级根节点被定位为止,或从每个根节点出发,沿着各自的asResult链路。如上所述,如果在保存操作期间使用类型1或类型3的包来存储节点信息,则优选最好是从具有asCase表的节点开始,本文中是BOT节点。
也可以通过从最低级别的每个根节点开始,然后沿着所有的asResult指针遍历K的结构。对类型1和类型3包应用相同的设计。
通过适当地保存,我们也能够恢复部分互锁树数据库,它可保持全部结构内容的有用性,而没有具体应用的笨重性。通常,如果希望限制一个完全开发的互锁树数据库,通过仅用感兴趣的约束条件遍历数据库部分来保存它,并且恢复被保存的全部内容。因此,例如,我们可以通过这个处理过程消除具有我们不继续感兴趣的最终产品节点的所有数据。目前不建议其它种类的部分保存。然而,我们相信在将来将开发出胜于当前的部分保存技术。另外,如果不保存具有零、小的或甚至负值的计数器的节点,可以减小保存节点的数目。
恢复结构需要对于恢复和读出已被保存的支持结构分配所需要的存储器。每个节点包应当被读出和进行存储器分配,同时构建一个地址转换表。地址转换表被用来将各个节点的旧存储器地址转换成新的存储器地址。每个节点随后用其已确定的Case和Result指针,以及其它相关数据被重建,而Case和Result节点的asCase和asResult指针表用当前的节点的新的存储器地址被繁殖。K结构随后将被恢复。作为替代,人们可以存储相对地址,并且仅仅用基础相对地址来恢复。
KStore结构的一个级别的最终产品节点是根节点,其被组合生成下一个级别的子器件节点。此处理过程可以重复任何次数,创建任意数量的级别的asCase树。另外,一个级别的节点可以通过Result指针被遍历,以查看它们的相关的低级别节点和根。一个级别的最终产品节点成为通过它的asResult树的下一个较高级别的根节点,即较低级别的sResult树具有代表较低级别结束指示符(EOT)的根节点。
在某些情况下,来自每个级别的最终产品节点在它们被创建时被表示。所创建的元数据是互锁树数据库结构的元数据的一部分,该结构可以被保存在仅需要对较高的级别进行部分保存的地方。


前述摘要和本发明的实施例的下述详细说明在结合附图时将更容易了解。为了说明本发明,示出了本发明的优选结构的附图;但是本发明不限于所公开的具体的方法和实施方案。图中图1和2示出了实施本发明中优选计算环境的两个阶段的框图;图3-5是本发明的各种优选实施例的节点包的框图;图6是本发明的保存过程的优选形式的流程图;图7是本发明的恢复过程的优选形式的流程图;图8是本发明使用的地址转换表的优选形式的框图;图9是本发明的实施例中来自互锁树数据库的节点的典型结构的框图;图10是本发明的实施例中称为Kstore的互锁树数据库的最小结构的框图;以及图11是本发明的实施例中小的KStore互锁树数据库的框图。
图12是支持说明多个级别情况的KStore互锁树数据库的框图。
图13是用于说明包概念内的包的框图。
具体实施例方式
综述虽然我们在前面提到的专利申请中描述了一种创建互锁树数据库的系统和方法,简称为Kstore,我们仍感觉必须重复其中一些描述,以便读者熟悉本发明所采用的现有技术的概念,但我们相信这些概念不能在计算机数据领域中找到。KStore通常包括互联树的树林的至少一个级别。互锁树数据库的树林的每个级别的结构通过从基本数据组创建代表数据序列的新节点而获取有关数据流的信息。由于每个单元是在数据流中遇到的,新的子部件节点部件通过使用对于以前的子部件节点的基准和对于基本根节点的基准被构建。如果新的序列被构建,则基准将是意图指示符(被包括在基本节点组中)和基本根节点的级别开始。如果遇到了序列结束,则基准将是子器件节点和表示意图指示符的级别结束的节点。这个重叠过程导致由asCase树分支和多个asResult树链接的节点组成的单个asCase树。asCase分支的节点取决于第一根节点。例如,参照图11,节点1050,1002,1004,1024,1026,1027和1030是取决于第一开始指示根节点1050的优选asCase树。从节点1005开始的其它分支也被看作为部分asCase树,包括但不限于1028,1029,1040,1031和1060。AsResult树的示例包括以下的树节点1051和1002(一个asResult树),节点1053,及1003和1005(第二个示例性asResult树),及节点1057,1033,1031和1027(第三示例性asResult树),在这个图上还可以找到许多其它节点。右侧asResult树是asResult树的特殊情况,因为根节点(节点1061)代表结束指示符。
为了明白最基本形式的结构,请参考图10,图上显示互锁树数据库结构的最小单元,具有由链路96-99连接的节点91-95。基本结构具有通过链路96连接到子部件节点94的一个初级根节点(第一根节点91)。第三根节点(基本根节点)92也通过链路97连接到子部件节点94。(因此,节点94是数据中的内容表示,即,节点94代表之后是节点92的基本节点91的数据中的情况)。节点95通过链路99连接到节点94,而路径91-96-94-99-95可以被称为从初级根节点开始朝向最终产品节点95的路径。(路径可以是链路和节点的任何连接线)。最终产品节点也是第二根节点(目标节点的结尾)93的情况,并通过链路98被连接到路径。
给定级别的asCase树的每个分支从一个子部件节点开始,该节点由表示级别开始指示符的节点和表示根节点的节点组合而成。子部件节点可以迭代地与根节点组合成另一个子部件节点。子部件可以与表示级别结束指示符的节点相组合来创建最终产品节点。这个过程可以重复,并可导致取决于第一根节点的多个asCase树的形成。
例如,如果特定的互锁树数据库的不可分割的基本根节点或传感器是数字字母,则子部件节点可以表示不是单词的字母组合,而最终产品节点可以表示单词。作为替代,子部件节点可以代表数字字母的组合,包括部分库存号或定单号,以及最终产品节点可代表完整库存号或定单号,作为应用于本发明的输入的数字字母整体的许多使用中的两个可能的用途。
一个级别的最终产品节点可以是下一个级别的根节点。最终产品节点可被用来生成下一个级别的子部件,较低级别的数据单元以相同的方式被用来创建较低级别的子部件节点和最终产品节点。例如,上述的具体互锁树结构中,一个级别的最终产品节点(表示单词)可以是根节点,从该节点可以创建较高级别的最终产品节点(表示句子)。这个过程可以重复任意次数,在数据库中创建任何数量的互联树级别。
例如图10的91,92,和93与图11的1050-1059和1061的该类节点在本文中称为基本根节点,因为这些节点代表数据组单元,并包括不可分割的单元,而可分割的单元(子部件节点与最终产品节点)由这些不可分割的单元组成。例如94,1004,1024,1033等该类节点在本文中被称为子部件节点,因为这些节点表示例如开始指示符那样的概念指示符的根节点与表示数据组单元的根节点的组合,或子部件节点与表示不包括最终产品的数据组单元的组合,或子部件节点与表示包括最终产品节点的结束指示符的节点的组合。节点例如1030或95表示最终产品节点。在所引用例子中,基本根节点是字母,子部件节点表示不包括单词的字母组合,而最终产品节点表示单词。应当指出,基本根节点组包括“BOT”,在本例中表示单词、目标、或字符串的开始,以及“EOT”,表示单词、目标、或字符串的结束。将会看到,“BOT”和“EOT”表示开始和结束指示符,但本发明不限于此。当不存在一个或两个这样的指示符时,可以设想使用其它指示符。在本发明的一个实施例中,最终产品节点是与子部件节点可区分的,因为从特定的节点到根节点的链路代表EOT概念。
如果基本节点在KStore结构的第一级别中代表字母,在第二级别中使用单词,字母序列,而KStore结构中的级别根节点可包括句子。同样地,作为一个级别的基本根节点是像素,可包括下一个较高的级别中的图像区域,以及在再一个更高级别的整个图像。句子可以被组合而创建段落(比单词更高的级别)等等。另外,较高级别的根节点可以遍历到互锁树数据库的较低级别。在本发明的一个实施例中,从级别结束指示符开始的asResult树被用于规定下一个级别的根节点。结束指示符是第二根节点,其次序与本发明的一个实施例中由asCase树规定的互锁树数据库相反。
创建节点时,在新节点与新节点表示的2个节点之间创建双向链路。Case链路表示连接到创建的新的两个节点中的第一节点的链路。到新节点的另一个指针被存储在Case节点的asCase表中。可以看到,asCase树的asCase分支可以通过在处理输入时生成asCase链路而被创建。每个级别的asCase分支提供如何创建该级别的每个子部件节点与最终产品节点的直接记录。因此,asCase分支可被使用于任何目的,为此知道子部件节点和最终产品节点如何被创建是有用的。如果例如加到互锁树生成器的输入包括正确拼写单词的整体,则生成的互锁树的最终得到的asCase链路可被用作拼写检验器,以便只列出在数据库的许多可能的用途的一个例子。
Result链路表示连接到创建的新的两个节点的第二节点的链路。AsResult链路的生成创建了一系列互锁树,其中每个asResult树取决于包括根节点的根。其结果是记录了数据库内根节点与asCase树之间的关系。即,asCase树与asResult树的组合获取互锁树的节点的所有可能的内容。asCase树与asResult树的组合可被使用于任何目的,为此知道在根节点之间的内容或关系是有用的。如果例如加到互锁树数据库生成器的输入包括销售数据的整体,其包括销售员姓名、星期几、物品数量和状态,生成的互锁树数据库的最终得到的asCase和asResult链路可被用来提取信息,例如“在特定的州中销售员销售如何?”“在星期一销售了多少物品?”“销售员Bob在星期一和星期二销售了多少物品?”等等--全部来自同一个互锁树数据库,而不用创建数据库的多个拷贝。
可以看到,上述的关系信息实际上被存储在被构建的互锁树数据库的结构内,而不是明显地存储在树的子部件和最终产品节点中。因为只有互锁树数据库的基本根节点可包括数据,所以可以跟随Case和Result链路回到根节点,以便从数据流确定或重建原始数据。
优选计算环境图1是示出了实施本发明的优选计算机系统100的框图。计算机系统100可以是任何适当的系统,例如但不限于主计算机、迷你计算机、IBM兼容的个人计算机、Unix工作站或网络计算机。本领域技术人员将会看到,本发明的设备可以应用于任何计算机系统,包括但不限于多用户计算机系统或单用户计算机。如图1所示,计算机系统100包括连接到主存储器104的中央处理单元(CPU)102,辅助存储接口106,终端接口108、以及网络接口110。这些系统部件经由系统总线160互相连接。辅助存储接口106被用于连接存储设备,例如但不限于,DASD设备190,存储设备把盘上的数据,例如但不限于盘195,存储在计算机系统100中。
主存储器104,包括计算机系统100的整个虚拟存储器,包括操作系统122和应用124,还可包括互锁树数据库126。互锁树数据库126提供一种数据结构,其可以在多上下文模式下快速搜索数据,而不需要数据复制。计算机系统100可以使用常用的虚拟寻址机制,允许计算机系统100的程序起作用,就好像它们访问到大的单个存储实体,而不是访问到多个较小的存储实体,例如主存储器104和DASD设备190。因此,虽然操作系统122、应用124、和互锁树数据库126被示为处在主存储器104中,但本领域技术人员能够理解,这些单元不一定同时全部位于主存储器104内。
虽然计算机系统100被示为只包括单个CPU和系统总线,但本领域技术人员可以看出本发明可以通过包括多个CPU和/或总线的系统来实施。终端接口108可被用来把一个或多个终端连接到计算机系统100。所述终端可以是从属终端或完全可编程工作站,它们可被用来使得系统管理员和用户与计算机系统100通信。
网络接口110可被使用来把其它计算机系统和/或工作站连接到计算机系统100。网络接口110所接口连接的网络可以是局域网(LAN)、广域网(WAN)、互联网、外部网络或内部网络、或任何其它适当的网络。操作系统122可以是例如OS2、WINDOWS、AIX、UNIX、LINUX或任何其它适当的操作系统。
应用程序124可以是访问存储在互锁树数据库126的数据的任何类型的应用程序。因此,举例来说,应用可包括数据分析应用、数据仓储应用、盗用检测系统,虽然本发明不限于这些例子。
互锁树数据库126提供一个数据存储结构,使得用户能够访问相同的数据库以得到与任何上下文有关的信息。术语数据,正如这里使用的,可包括任何类型的计算机存储信息,例如但不限于文本、图形、公式、表格、视频、多媒体或它们的组合。互锁树数据库126可被实施为应用124的一部分、操作系统122的一部分、或者作为一个独立的数据库产品,适用于为各种应用提供数据存储。
虽然本发明是结合全功能性计算机系统描述的,但本领域技术人员将会看到,本发明能够以各种各样的形式作为程序产品被分发,以及本发明同样地应用,与实行分发的信号承载媒体的具体类型无关。承载此信号的媒体的例子包括但不限于软盘、硬盘驱动、CD ROM、通过电、光、无线或其它适当媒体的数字和模拟通信链路。如果需要的话,也可能分发在计算机系统上工作的这种互锁树数据库。
图2与图1类似,除了其包含表示被保存的KStore的块。另外,图2上的重复单元仅仅在它们表示的数字上附着一个“a”。KStore(数据库126a)由计算机系统内有效存储器104a中的保存子程序128操作。为了在保存过程完成后恢复它,还有恢复子程序129,为了方便起见,它们也被显示为在有效的主存储器104a内,虽然它们可以在需要时或按希望地被交换。在处理过程中,处理过程将开发一个头空间127r,和代表KStore结构的节点,优选在存储在有效存储器区域127的结构上操作,作为区域127。为了方便起见,我们把存储器中的这个工作空间简称为区域127。作为替代,空间127可以是非常小的,只具有当前在处理的节点包,该包是由保存子程序128创建的,或替换地是由恢复子程序恢复的,如果该KStore被恢复的话。如果KStore被恢复,则不需要空间127,但在KStore被遍历时,可能想要有该空间127作为测试或工作空间,而节点在恢复过程中被添加。如果节点被转变成包,并且在它们被形成时作为文件流到存储器,则它们可以以流文件立即流动到永久存储装置的速度被创建。至少在这样的情形下,在存储装置中分配用于包的存储器不是一个必需步骤,因为流文件建立会使得OS和数据贮存系统自动做到这一点。
将会看到,虽然在以上给出的文本例子(“BOT-C-A-T-EOT”和“BOT-T-A-B-EOT”)中输入的整体是数字字母符号组,从这些符号可以得出单词,但不限于这种Kstore数据库结构。例如,输入的整体可以是文本,例如字母(从这些字母可以得出单词)或单词(从这些单词可以得出词组或句子)。另外,KStore的实体可以替换地由氨基酸组成,从该氨基酸可以得到染色体组,在过程中使用的有限资源,概念,像素组,图像,声音,数字,模拟测量值,或数值或由任何其它可被数字化的基本单元组成的适当整体(或者变为信息存储格式,例如量化状态表示或类似),随后被组合而生成最终产品。
除了上述的节点以外,互锁树数据库(例如,使用图10的说明)还可包括在节点之间的多个连接或链路,例如链路96,97,99和98。在本发明的一个实施例中的链路是双向的。链路96和99在这里被称为asCase链路。链路97和98在这里被称为asResult链路。可以看到,在本发明的优选实施例中,表示开始指示符概念或条件的根节点将具有空的asResult表,因为开始指示符决不是子部件的第二部分,表示数据组单元的根节点将具有空的asCase表,因为数据组单元决不是子部件的第一部分。最后,最终产品根节点将具有空的asCase表,因为最终产品作为用于下一个级别的数据组单元。
互锁树数据库的所有节点也可以包括代表与所述节点有关的信息的附加字段。这可以通过图9示出。然而,应当指出,在几乎所有的优选实施例中,数据仅仅被存储在根节点。在大多数实施例中的大多数节点没有字符串数据,即使它们具有附加字段。通常,附加字段(如果有的话)可被用来存储计数值,或者可能是节点类型的指示符,如果需要的话。
图9示出了一个优选的节点30。这个节点30可包括字符串字段作为附加字段,其包含一个由此节点表示的所有基本根节点的序列。附加一个包括此基本序列的字符串字段在诊断故障时是有帮助的。这类附加字段可以有许多用途,节点例如节点30不一定限于一个附加字段。然而,通常来说,附加字段将包含计数值,而不是字符串,可以有不止一个附加字段。这些字段的数目和特性将根据Kstore在构建时的特性而变化。
优选节点30还可包括计数字段作为字段31。计数字段被初始化,并增加一个强度变量,其数值根据计数字段被引用的次数条件而变化。(强度变量被定义为保持至少一个不能改变的数值的数学实体)。通过使得这个项目变得广义,计数字段的增加强度变量可被用于本发明的互锁树结构,以处理忘记错误的记录数据,记录哪个实体正在查询,记录被使用的查询类型,以及在使用数据时可以派生出的其它感兴趣的处理过程。强度变量的一个简单示例形式是单个序数字段值,例如“1”被用来增加或减少计数字段,以记录节点被访问或被遍历的次数。
而且,认识到指向asCase表字段33的指针对于最终产品节点是零,以及指向asResult表字段34的指针对于所有的子部件节点都是零,以及二者之一(指向asCase表或指向asResult表的指针)对于基本节点是零。认识到这点允许在所描述的保存操作期间创建类型3节点包,因为我们在节点包中只需要一个字段,两个字段之一在所有的情形下将是零。这个表计数值是要与计数器字段区分开来,后者保持节点的遍历频率和强度的记录。
而且,对于不同的功能,强度变量可以以不同的速率和不同的方向改变。不同强度的简单示例可以是每次查询遍历一个节点时,数值加上+1,以及如果包含特定节点(或该特定节点序列)的路径被认为是个错误(由于某些上面的原因,此说明是不重要的),数值加上-100,例如当序列在使用后被发现是拼写错误时,或者传感器发现一个包含危险化学区域的情况,或如果一个成人儿童仿真器在仿真时在热火炉上“触摸”和“自身燃烧”。强度变量的一个替换例是使用一个独立节点来保持对于每种节点遍历的新数值,因此在类型1、类型2、实验1、实验2等等和无穷尽的查询情况下创建一个情况群。在目前考虑本结构的实际应用时,计数字段中的强度变量为解决这个问题提供了最简单的、从而也是当前最好的方法,但是当信息处理系统成熟时,这个或其它的替换例也应当被考虑和再考虑。如果考虑这个替换例,则使用一个独立节点,甚至可能是基本或根节点来记录对于与节点有关的、每种类型的遍历数目的计数值的方法是实施这个方法的一种方式。
因此,在一种用途中,当新的数据被合并到互锁树数据库时,计数字段可以被增加,但当被查询的互锁树数据库为新的数据产生更大的数值并且没有出现查询变化时,省略了计数字段的增加。因此,这个强度变量可以被动态地选择,以使得它适用于由KStore解决的问题。
增加计数字段以便易于使用由互锁树数据库结构的内容,这在寻求统计资料,例如频率和概率时是特别有用的。
另外,应当意识到,如果在节点中存在计数字段以及该计数字段相应于所希望的节点的实验频率和强度,则可以从保存的节点中消除任意节点,如果它们在计数字段中具有零值。消除零值节点甚至可被用于具有零值的计数字段的基本根节点,如果在检验过程中,这些基本根节点不必使用于任何被恢复的KStore。(因此,如果需要,即使低数值的计数值也可被消除;其不是必须等价于零值)。这可能发生在,如果KStore开发器保留多个数据粒子,但发现一旦收集到大多数数据时,它们就是无用的;其然后可以有把握地消除这些基本根节点。另外,在可以对计数字段的数值进行减法的情况下,也可以从保存的节点中消除这类节点,因为它们可能代表错误或误拼写等等。当然,在某些情形下,人们想要永不消除所创建的节点,在这种情形下,人们可以甚至保存在计数字段中具有零值的这些节点,以保存历史。
应当指出,图9上的节点30可以是具有数值字段32的基本节点30A,或子部件节点或最终产品节点30B(缺少数值字段32),但在任一种情形下,它可以具有一个附加字段或多个字段31。
图9示出了附加字段的具体示例,其中节点例如节点30(或者是基本节点30A(具有数值字段32)或者子部件或最终产品节点30B)都具有附加字段31。此附加字段(或如果优选地,多个附加字段)可包含想要的任何信息。例如,人们可能想要知道节点的特定种类(节点类型,如传感器,最终产品或其它种类的节点),或在特定的日期或距离由节点计数值从EOT或BOT创建的,或者人们希望对它做的任何事情。
如果需要,保存包组内的包来帮助保存组织也是有用的。图13中,在较大的包140内具有一组节点包0,,,n,141,142,143...144。优选地,包0...n的第一个,包141是信息头包,其包含的信息对于较大的包140中所有的之后的包来说是共同的内容。这个信息头包在大多数优选实施例中不被重建为节点,但包含对于恢复过程的有用信息。使用包设计内易于实现存储各个包内的基本根节点、BOT节点、以及EOT和最终产品节点,每个节点与其它的节点分隔开,因为它们在每种类型中具有不同的字段。例如,根节点可以具有一个装有全部asResult指针的asReult表,但子部件节点没有这样的表。另外,节点的层可被存储在一起,同样易于实现恢复过程,容易组织恢复较低的层,然后恢复随后的较高层。
应当阐明类型的分类。具有上述三种新的包类型。这些包类型可藉助于具有或不具有一个或两个附加计数字段而被区分,该附加计数字段记录原始节点具有的asResult或asCase链路数目。如果需要的话,这些类型可被方便地存储不具有asResult链路也不具有asCase链路的节点,而是不具有这些链路的节点。这样的节点一般是子部件节点,它具有Case指针、Result指针和计数字段,以及指向具有作为它的成员的asResult表和作为它的成员的asCase表的节点的指针。所以,这可被称为一种不同类型的节点。然而,对于本专利,我们使用1,2,3的类型表示法,以表示在保存期间根据Kstore的(某些或所有的)节点被保存在包内的信息种类。类型1,2,3节点的完整定义如上所述。如果我们把子部件节点保存为节点的包(作为包内的包),则我们不需要表示节点类型,因为它既没有asCase表,也没有asResult表。
本文详细讨论Kstore中的层的概念,并且详细讨论恢复过程如何利用这种分层是很有用的。现有专利申请No.10/879,329中已经描述层的使用,并且增加了一幅类似于本申请中图12的图。应当指出,最低层根据粒子级别构建单词,粒子级别具有作为字母的基本根节点902。BOT 901和EOT 903也是基本根节点,但是在这里是专用。向上的下一层中的单词都是最终产品节点908,906,904。最高层的最终产品节点902是句子节点,CAT ARE FURRY。BOS 904和EOS 905与单词节点904,906和908一起也是这层的根节点。因此,根节点将把asResult指针放置在它们上面的层。
因此,如果我们按次序保存和恢复,则我们从曲线图的底部向上移动,从BOT节点901开始。这指向情况节点BOT C,BOT A(951),和BOT F,对于Kstore在这个级别的每个单词,分别在节点904,906和908结束。为了做到这一点,我们使用包寻找第一BOT,简单的把BOT的旧地址放置在地址转换表中,连同在被恢复的存储器中分配给这个节点的新地址一起,移动到基本根节点,并对于它们的旧和新地址进行同样的工作。基本根节点包的列表是C,A,T,S,R,E,F,U和Y(902)和专用基本根节点EOT 903。正如刚才阐述的,将它们的旧和新的存储器位置放置到地址转换表。当恢复作为这些基本节点的结果的节点时,已在地址转换表中建立了这些根节点的地址,所以知道对于指向节点的指针的新存储地址。子部件节点包也具有它们的asCase指针,因为在Case分支中它们的之前节点(这里是BOT,然后是C,然后是A等等)首先被恢复,并且其新地址已在地址转换表中。然后移动到下一个级别,恢复用于句子的节点BOS 904。我们发现子部件节点具有根节点904,906和908,其作为Kstore的级别1部分上的最终产品节点。这个级别的最终产品节点是节点902,且它也具有EOS节点905,优选地在BOS节点904之后从包中被恢复。对于这个第二级别,从包恢复的每个节点具有其自己的新存储器地址,它们的指针都指向在刚才所述的一次通过过程中被恢复较低级别的节点或BOS节点和EOS节点。可以不使用一次通过就恢复Kstore,但随后在一次通过后必须使用在第一次通过中的某种位置保持器,返回将指针的已丢失的旧地址填充到新地址变换。这样的迭代过程不可避免地是较慢的,并且会不必要地复杂。
在实施方案中有很大的灵活性。例如,在KStore中,可以实施asCase表和asResult表作为被链接的表。另一个实施例中,asCase表和asResult表可被分配为具有可配置大小的连续存储器单元的块,例如但不限于数组。了解这个信息对开始进行恢复是非常重要的。这种组织类型的表示,例如列表可以缺省处理,或作为某种元数据指示符放置在包的信息头,或包节点被组织成的大包的信息头或导引包。在任何情形下,一般有设置在asCase表的开始位置的指向任何asCase表的指针,和指向任何asResult表的指针。优选实施例中,用于处理这种元数据的适当算法过程由元数据本身触发。KStore可被组织来保持节点的asCase链路和asResult表,或优选地,这样的表(然而是组织的)只具有指向被存储在KStore结构中的这些表的指针。存储在节点包中的指针表的计数值使得能够以分配适当大小的存储器来恢复这些包,作为具有适当大小的指针表的节点。因为恢复器可被用于顺序地恢复K,只要考虑恢复次序,就完全不必要存储asCase或asResult表,因为恢复器在恢复期间将创建这些明细表。我们确实希望具有适当尺寸的存储器,这是为什么在指针表上保存指针的计数值的原因。
在本发明之前一个保存和恢复版本的一个实施例中(如美国专利申请No.10/759,466所述),除了创建从新的节点到从其得出新节点的节点的链路之外,指向新节点位置的指针被添加到从其得出新节点的节点的链接表、asCase和asResult表。指针可被加到列表的末端,列表的始端,或可被插入在列表内的某个地方。另外,可以保持多个排序的列表。例如,节点的asCase表可包括顺序表,其中除了排序的列表以外,指针还被加到链接表的末端,在排序的表中,指针以访问频率的顺序被保持。可以理解,虽然给出实例阐述一个排序的列表和一个顺序表,但本发明并不限于此,任何数目的列表和其任何组合都在本发明的范围内。排序的列表可以按最后的更新、最后的访问、或更新或访问的频率、或通过任何其它适当的排序方法被排序。关于此结构的信息也可能需要和元数据一起被保存,并且它也被认为是KStore状态变量信息。在本文所描述的新发明中,完全不需要保持这样的列表,正如在本说明书的其余部分所述,但如果需要的话,可以在给定的情形下这样做。但是如果不保持排序表的顺序,失去了顺序,所以可能出现想要保持顺序和使用旧方法而不是本发明的环境。作为替代,可以基于一定的基础恢复列表顺序,例如基于频率的列表。
在KStore数据结构的最优选实施例中,代表较高级别的根节点的节点不包含数据或者数据或概念的表示;即较高级别的根节点只包含指向较低级别的节点的指针。不同级别的根节点的信息是另一种可被保存的元数据。
可以生成任何适当数量的级别。例如,在文本世界中,级别可以代表字母、单词、句子、段落、章节、书、图书馆等等。可以理解,虽然在示意图上显示两个级别的互锁树数据库,但本发明的KStore不局限于此。可以构建任何数量的级别的互锁树数据库。因为本例的整体是文本,即来自单词的字母组合(一种级别的最终产品),本发明的该实施例中单词组合的结果是词组或句子(另一种级别的最终产品)。句子可被组合形成段落,段落可被组合形成章或节等等。
基本根节点(传感器)和与基本根节点有关的特定数值需要被存储,以便正确地恢复KStore。如果在创建KStore结构的通常过程中,传感器数值与节点无关地被保存,则返回到基本根节点的数值和指针的这些文件可以简单地被保存(对于所述指针地址,适合于指针的地址变化)。在传感器数值实际上被存储在节点的Kstore中,当在保存操作期间保存节点时,数值与其它基本根节点信息一起被保存。因此,很明显,保存过程适合于被保存的KStore。
此外可以看到,根据输入整体,最终产品节点可以代表除了单词、词组、句子等等以外的其它实体。举例来说,如果输入是包括染色体的氨基酸的序列,一个最终产品可以代表基因或对偶基因。在另一个例子中,像素序列可以具有直线、圆或其它形状物体的最终产品。
搜索KStore结构是相对直接的,正如前述专利申请所述,对于了解如何保存和恢复简称为KStore的互锁树数据库,并不需要完全了解如何搜索KStore结构。无论如何,为了便于参考,还是包括了概略说明。
现在考虑图11的输入包括例如以下内容的数据记录Bill星期二40销售PABill星期一103 销售NJBill星期一100 试算PATom 星期一80试算PATom 星期一13试算NJ在本发明的一个实施例中,数据组单元由通过分界符,例如但不限于空白字符而分开的信息字段组成。在一个实施例中,数据组单元从输入获得,尽管可以理解,本发明并不限于如上所述。在输入数据中至今遇到的变量是销售员姓名(Bill和Tom)、星期几(星期一,星期二)、物品数量(40,103,100,80,13)、状态(销售,试算)和州(PA,NJ)。在本发明的一个实施例中,图11的互锁树数据库1000是从此输入得出的。图11中,由于空间的原因,节点的第一部分未示出。例如,虽然节点1002被标记为“Bill”,但节点1002实际上代表“BOT-Bill”。虽然节点1002被标记为“Tuesday(星期二)”,但节点1004实际上代表“BOT-Bill-Tuesday”,等等。
例如,在本发明的一个实施例中,包括所需序列的路径的子部件节点和最终产品节点可以通过跟随表示所需序列的特定根节点的asResult列表中的指针而确定。根节点的asResult表被访问,以及在列表中的每个指针被引导到与该根节点有关的子部件节点。如果最终产品是所需的,则asCase分支树被引导到分支的叶节点。
在本发明的一个实施例中,信息请求具有规定的约束形式(它可被看作为“上下文”或“焦点”,这取决于透视图)。例如,信息请求可以具有约束条件的列表形式。约束条件的列表可以是网状的或独立的。在本发明的一个实施例中,找到每个列出的约束条件的最终产品节点的asResult表,找到对于每个约束条件的每个asResult表内的每个节点路径,这些路径跟随到它们的最终产品,以及选择对于每个约束条件的每个asResult表内的每个路径的最终产品的交叉点。通过首先约束数据库,获取一组数据,然后该数据组被用作为进一步被约束的数据组等等而找到网状约束条件。
逻辑运算符可被用于规定约束条件。可以说,人们正在查找表示个人、地点与(AND)事物的节点,其中AND是表示所有的个人、地点和事物的组的联合体的逻辑运算符,即所有的节点是通过称为“个人”、“地点”和“事物”的基本节点或根节点来标识的。互联树结构给出查询,由所有的“个人”AND“地点”是作为(ARE)(另一个逻辑算子)被约束为如何识别项目“事物”而进行回答的“事物”。如果在构建结构时,事物决不指向地点,则查询中不会发现所有其它的“事物”,但可以在互锁树结构中知道所有的地点。如果人们考虑当被合并到结构中的事物,则也会在查询中发现它们。
逻辑运算符可以采用许多形式,例如AND,OR,NOT,大于,XNOR,等于,等等,而且它们可以被组合。所有的这样的逻辑运算符和其组合在本发明中是有用的。比较数学表达式也是可使用的,当然这取决于上下文。例如找到已销售大于100辆汽车的所有销售员,可以是一个基于比较数学表达式的查询,其中该表达式可以是销售员销售的汽车数>100。
本发明的一个实施例中,聚焦点可被使用来确定被保存的信息。例如,在其中传感器是字母的二级数据库的情况下(可能必须参考我们的CATS-ARE-Furry图,图12),级别1的最终产品包括单词,以及级别2的最终产品包括句子。如果我们只想要保存其中具有字母A的句子,则我们把K约束限制到与“A”的根节点有连接的那些节点。然后必须从A通过其Case链路遍历这些单词,找出最终产品单词节点,并为此需要检验每个单词的asResult表。然后,我们遍历从句子指向的Case链路,找出它们可能处在的句子的最终产品,以便找出其中具有字母A的句子。图12中,对于A,我们进到节点951和952,分别跟随Case链路连接到这些单词节点953和916的末端。这些节点906和908分别具有指向节点953和916的asResult指针。从这些节点的任一项跟随Case链路导致EOS节点902。因此,对于本例,我们保存图12上的所有节点,但明显地,如果我们具有其它的字母和没有其中有A的单词,则这些单词在这类局部保存中将被丢失。
在一个实施例中,通过跟随具有级别开始指示符作为其根节点的树,可以找到从约束条件开始的所有最终产品(例如,可以找到从特定字母开始的所有单词)。同样地,可以找到具有规定的约束条件,或在特定位置处的特定约束条件的所有最终产品,(例如,在其中具有特定字母的所有单词,或在特定的列中具有特定字母的所有单词)。同样地,通过跟随具有级别结束指示符作为其根节点的树,可以找到以特定的约束条件结束的所有最终产品(例如,在以特定字母结束的所有单词)。可以规定多个约束条件和/或聚焦点。
对于局部保存,可能需要保存任何约束条件来表示局部保存的限制。因此,参看图10的KStore,把“来自星期一的所有的信息”放置在信息头中表示所保存的KStore只包含来自星期一的信息。
现在参照图11,假设需要对于“在星期二销售物品的总数是多少”的问题的答案。本领域技术人员将会看到,在本发明的一个实施例中,不用遍历在整个数据库中的所有节点,恢复此信息只需要恢复根节点1054和1055的asResult表。连接到最终产品节点1030的路径5被遍历,因为由代表星期二的根节点1054指向节点1004。连接到最终产品节点1040的路径4被遍历,因为由代表销售的根节点1055指向节点1028。路径5也被遍历,因为由根节点1055销售还指向节点1026。路径1 1080,2 1070和3 1060不必被遍历。沿着根节点1054和1055指向的路径返回的最终产品组的交叉点包括表示“Bill 星期二 40 销售 PA”的节点1030。
通过首先约束数据库恢复一个数据组,然后该数据组被用作为进一步被约束的数据组等等,来找到网状的约束条件。为了进行网状搜索,从来自根节点1065的一个约束条件,例如SOLD开始。从两个标识的最终产品节点1030和1040往回追踪,从节点1030的Case路径仅仅到达具有节点星期二,1004的一个最终产品。因此,我们通过这个替换过程得到相同的结果。
现在参考图3,其中按照本发明的实施例所述,包含需要存储来自节点信息的字段的节点包。类型2节点包220的第一字段是包长度字段211。这个字段不是绝对需要的,但对于在把包恢复到节点时必须进行的过程是有用的,其给出下一个包将从哪里开始的指示。我们将显示在所有类型的包中的该字段,虽然在大多数情况下,对于包的每个字段,包尺寸将被固定到一个存储器地址。下一个字段是Case指针字段212,它当然涉及到指向Case节点,如图9中节点30的指针。下一个字段是包含从图9的节点指向Result节点的指针的Result指针213。附加字段214在这里为了简化起见被缩略,其可包括任何附加字段以及图9中节点30的数值字段。字段215包含旧节点地址。
类型1节点包200如图4所示。其具有相应的字段,用于包长度201、Case指针202、Result指针203、附加字段204和旧节点地址207。其还具有用于asCase和asResult指针表计数值205和206的字段。这些计数值可被用于帮助确定在进行恢复时需要分配的存储器的总尺寸。如前所述,BOT和子部件节点具有asCase指针表,只有根节点具有asResult表,这样实际上只需要字段205和206的一个计数值,但是如果使用类型1节点,则具有把节点处理成包的更简单算法。为了清晰起见,规定根节点为基本根节点(但不是作为一种基本根节点类型的BOT)或最终产品节点。
然而,在可以使用类型1节点包的任何情况下,也可以用类型3节点包来替代它们,类型3节点包具有单个字段“指针表计数值”表计数值,来保持asResult或asCase表指针的计数值。因此,图5中,由任何节点组成的包可以类似于包230,其具有包长度字段231、Case指针字段232、Result指针字段233、附加字段234、指针表计数字段235和节点地址字段237。
正如专利申请No.10/385,421和No.10/666,382的互锁树数据库的优选实施例中所述,asCase指针表以及asResult指针表本身没有直接存储在节点,在节点中的指针表示节点中存储列表的区域。然而,在美国专利申请No.10/759,466中描述的第一个保存和恢复的发明中,优选保存具有其地址的节点的asCase指针表。在使用优选实施例来保存每个节点以便能够恢复互锁树数据库结构时,本发明中没有保存asCase和asResul表。反过来,恢复过程的优选实施例不必依赖于保存的asCase和asResult指针表而进行恢复。
当前发明也可以利用三种不同类型的节点包。第一种类型,类型1节点包,包含asCase指针表计数值和asResult指针表计数值。类型1的变量,被称为类型3,包含一个指针表计数值,而不是两个指针表计数值(因为其中一个是零值)。最后一种类型,类型2,根本没有任何指针表计数值。因此,形成类型1和3的包的节点将具有asCase和/或asResul表,而形成类型2的节点则没有。为了得到这些计数值,必须进到存储指针表的任何地方,如果在链接的明细表中,通过跟随链路,或通过在链接表中某些头信息获得该表中的指针计数值。因此,由于它减少了一个或更多的处理步骤,通常优选使用不需要使用任何指针表的类型2包。另外,如果类型1节点包被构建,则将获得具有asCase或asResult指针表的计数值,或者两个都没有。因此,我们也允许使用类型3节点包,它把无论哪种类型的非零计数值放置在被称为指针表计数值的字段中。另外,虽然可以看到,任一个节点包类型可被交换地利用,但asCase和asResul表的类型和尺寸会出现一种情况,其中一种节点包类型方案比起其它包类型是更有效的。如果asCase和asResult指针表通过数组实施,由实验确定是相对较大,或由静态数据库构建,则应当使用包含包长度、任何附加字段、Case指针、Result指针,和指针表计数值或asCase和asResult指针表计数值以及旧节点地址的类型1或类型3节点包。如果asCase和asResult指针表使用短的链接表,由实验确定是相对较小,或由动态数据库构建,则可以使用包含包长度、任何附加字段、Case指针、Result指针、和旧节点地址的类型2节点包。
应当指出,节点的类型(因此,即指针表计数值是asCase还是asResult)当然可以通过它被链接到的内容和链接到它的内容而确定。
当为恢复的K分配所需存储器时,使用与初始创建K时所进行的过程相同的过程。当我们需要时,为链接表分配用于新链路的存储器。对于数组,从初始大小开始,然后如有必要,重新增加尺寸。
也可能具有保存子程序,其创建两种类型的包,类型1和类型2或类型3和类型2,其中对于子部件节点使用类型2,对于具有asCase或asResult表指针的节点使用类型1或3。可以仅仅具有算法,建立包检验,以便根据节点的读出查明哪种类型的包是最佳的。为了清楚起见,在任何需要有组合的情形下最好不组合使用类型1与类型3包,但我们应当指出,由于前述原因,最好不在单个保存的K中组合两种类型的节点包。子部件节点具有asCase表,然而,这些表更可能比基本节点或最终产品节点的表更小。所以,类型2可能更适用于大多数情况下的节点。
在熟悉待保存单元的基本结构后,现在说明进行保存的过程。
现在参考图6,其中流程图70示出了本发明的保存部分的优选实施例。当用户或系统决定初始化保存时,从步骤71开始。作出决定或表示在查询73中期望局部保存还是全部保存。在构建KStore时,可以创建一组元数据72,描述所考虑的特定KStore事例。假设选择局部保存,根据所需尺寸、根节点的具体部分和保存所需的KStore部分的其它方面的用户输入74(如果它来自自动系统,则也可以被认为是用户输入)可以用于该过程。
在步骤75中,选择至少三种方法中的一种方法,从而能够保存KStore数据结构。如果不是局部保存,则而不用关于KStore数据结构的约束条件的任何用户输入就可选择方法。用户可以根据KStore的已知参数进行选择或者为用户选择。例如,如果知道K具有非常大的asCase表,则优选的保存方法是允许在恢复过程中重建这些表,因此使得对于所有的节点选择类型2节点包,而不需要跟踪这些表。用户可以选择更复杂的保存算法,它检验每个节点,查看该节点是否asCase表指针或对于asResult指针具有非零值,并选择在数值是非零值的节点构建类型1或类型3节点包,但在数值是零值的地方对于这些节点构建类型2节点包。或者该方法可以选择只使用类型1或类型3节点包,并在所检查的节点中没有asCase或asResul表指针的地方存储零值。方法选择的另一个主要方面是确定遍历K的次序,找出待形成包的每个节点。
虽然在本发明的优选形式中可能在稍后这样做(例如在步骤84,或这个步骤附近),但包括元数据的各种方面的支持结构首先应当在步骤76被保存。在这个步骤中,可以把包格式的信息保存在如图13所述的包内,或者可以用本领域技术人员认为比较便利的另一种方式保存该信息。如果确实使用包技术内的包,或如果保存在上述层中,或如果做到上述两项,则对于每层进行以下的步骤,然后返回到步骤76开始保存下一层。在保存下一层时,我们再次保存有关该下一层中所有节点的任何信息,之后再次移动到步骤77,进行保存这个层中的所有节点的迭代过程(或至少属于包的种类的所有节点,然后是可以从这个层构建的其它包中的节点)。在步骤77,保存KStore数据结构的节点和块。如果选择当前非优选的方法来保存KStore结构,则有可能在一个步骤内完成步骤77;如果存储器图像可以用所有的存储器地址不受损伤地保存,并被恢复到相同的位置,则步骤77可以作为单个步骤完成。但是,这在部分保存的情形下多半是不可能的,而且在KStore结构从一个计算机移动到另一个计算机或其中对于所保存的结构可被恢复到主存储器内精确的位置缺乏控制的情形下也是不可能的。在步骤77,第一步骤从由所选择的方法建议的第一节点开始,并在步骤78从该节点的主存储器找出旧地址,然后在步骤79,连同节点的特定字段一起保存该旧地址,这取决于所利用的节点包类型。如果使用类型1节点,则可以把Case指针、Result指针、附加字段、asCase指针表计数值、asResult指针表计数值和旧地址保存到类型1包。如果使用类型2节点包,则可以保存Case指针、Result指针、附加字段和旧地址。在优选实施例中,asCase和asResult表不被保存,但在下述优选恢复过程中被重建。如果使用类型3节点,则可以保存Case指针、Result指针、附加字段、Pointer List Count指针表计数值和旧地址。在此时确定对于该节点保存的包的优选尺寸,以使得所存储的数据结构的最终尺寸将包含信息头,其元数据资源,及以串行方式或其它类似的结构跟随在后面的数据包。因此,对于每个包完成步骤81,当它们准备好时,通过简单地相加每个包的尺寸,可以立即找到包的所有尺寸的总和。
如果KStore是使用计算机系统的唯一应用程序的情况下,可以了解没有任何中间I/O功能,和以原子方式完成保存。然而,这通常不是当今的计算机系统环境。因此,图3-5显示KStore包的中间数据结构,且类型1-3的信息头显示类型2的KStore包的中间数据结构,以及准备好以原子方式(一次一个包)保存到盘驱动或其它永久数据存储装置的信息头。
在步骤79和81中准备好节点包和确定节点包的尺寸后,必须回答是否还有另外的节点按照所选择的方法和/或在步骤74选择的约束条件内保存到KStore内的问题。假设回答是“yes(是)”,步骤82按照保存算法的方法,移动到下一个节点。稍后描述这个方法。
如果没有节点要保存,则需要被恢复的KStore结构的总尺寸可以在步骤84被确定,接着KStore结构准备好被保存,并可以被保存。如果使用计数器的话,这个步骤可以在每次创建节点包时以局部的方式进行,在这种情况下,此步骤可以仅读出计数器中的总和。为了编程容易,可以给所有的根节点和EOT与BOT节点加索引号或标签,由此可以在恢复过程中首先找到这些节点,能够首先恢复具有asCase和asResult表的节点,因此简化了恢复过程。
正如以上参照步骤75的概述,可以有几种方式进行保存过程。所选择的方法可以被适当地选择。假设我们不使用整个存储器交换过程,而是常规保存,处理过程在把一个节点包或在一组包写入到永久存储装置之前将具有至少三个步骤。将保存支持结构,这可以是自动的或用户辅助的过程。将必须有遍历步骤,其中处理过程访问每个相关的节点(某些节点可被排除在部分保存之外,否则基本上所有节点将被访问)。然后来自每个节点的信息必须被变换成包用于保存。然后,可以进行保存过程,利用由硬件和软件在这个结构运行要求时可能需要利用的任何内务整理系统。
应当指出,如果通过从一个级别开始,然后移到下一个较高的级别而进行保存,则恢复过程可以在一次通过中执行,而如果使用不保存指向asCase和asResult节点(这是在本专利中描述的所有的节点)的实际指针的任何节点包类型,不保存会使得不用迭代过程而很难重新组装指针。
支持结构的保存首先需要确定哪些信息结构用互锁树数据库保存。这可包括结构,例如但不限于;一个文件头包含创建日期、KStore文件ID等、基本根节点的列表,(或传感器),表示BOT-EOT单一体的字符串表,或者或许仅仅被包含在互联树数据结构中的目标节点(单一体)的结尾表,例如可能描述其所处的基础OS或计算机系统的数据结构的元数据,如果有的话,密码保护,指针表在节点中如何排序、以及如果需要恢复结构或确定待保存结构中的信息地址的任何特性信息。另外,信息头可保存K状态变量(例如在节点中支持多少附加字段,正在进行哪种查询,如何构建asCase和asResult表,数据源,交换开关和数据流)和/或数据源描述符,例如表示哪些源接受查询和/或从哪些源得到信息等等的钩。当然,所有的这种数据应当被格式化,用于OS所需的写入和获取,以及当前使用的计算机系统的其它特性。另外,如果KStore具有XML格式或访问,则该类型信息也应当被存储,因为KStore本身(可能)不知道该信息本身。
因此,为了列出可能在信息头中发现的项目,信息头记录可能包含创建日期创建保存文件的保存程序的版本/周期硬件配置(CPU类型,等等)OS--操作系统基础结构信息(字段的尺寸)
签名结构信息,如果没有保存“其他”结构信息传感器级别和相关的界定符元数据-字段类型(包括用户规定的类型)、列描述、许可证等等KState变量-交换开关、数据流、签名结构信息(例如对于asCase表的特殊顺序)数据源(类型、位置、附属数据流)--用于学习新知识安全(管理员&用户密码、许可证、保存的查询位置、触发器)现在将描述用于保存KStore互锁树数据库结构的遍历的替换方法。
遍历互锁树数据库访问每个节点从初始节点开始,使用一个沿着每个初级根节点的asCase路径的顺序树。例如,如果从图11的初级根节点BOT 1050开始,则首先进到Bill,得到他的所有到达EOT节点1030,1040和1060的路径,然后进到Tom和他的EOT节点,直至到达EOT节点1061的所有链路为止。这时,除了基本根节点以外的所有节点都已被访问。考虑具有基本根节点数值和指针的文件,可以用该方式访问。图12中可以看到一个更好的例子。在该图的优选实施例中,从第一级别901开始,首先保存传感器(基本根节点),然后第一级别(单词),然后下一个级别(句子),等等。保存传感器C,A,T,S,R,E,F,U,Y以及BOT 901和EOT 903。这些具有所有的asCase和asResult指针,因此如果它在保存期间被构建的话,KStore的所有旧地址将被输入到旧地址列表。接着,我们保存对于单词CATS,ARE和FURRY的节点,其包括所有的子部件节点。接下来我们保存来自第二级别912的BOS和EOS根节点。本文中,我们保存904与905之间的新节点,最后是句子层912的最终产品节点,节点902。
遍历互锁树数据库以便从最终产品节点访问每个节点是第二个方法。它们都是通过EOT节点1061可访问的。因此,通过最终产品节点的所需约束条件表,通过遍历KStore进行部分保存。
遍历互锁树数据库以便从根节点访问每个节点是遍历互锁树数据库结构的第三个方法。因此,可以通过根节点的所需约束条件表,遍历KStore,接着通过来自所需约束条件中的每个根节点的所有asCase链路,而进行部分保存。
恢复过程流程图7显示恢复过程320的优选实施例,直至过程完成为止。如果需要,其可被严密地嵌入到某些其它处理过程。在恢复过程的优选实施例中,在恢复互锁树数据库(这里缩写为K)之前首先读出所需要的支持结构321。这可包括例如哪些粒子对于这个K是已知的(有时称为基本根节点或传感器或传感器列表),对于K,需要在存储器中分配什么尺寸,是否有可为K定址的Kengine可处理的内部触发器和其它功能等等之类信息。如果用户总是将相同的支持结构恢复到相同种类的KStore,则这个步骤可能是多余的,假设每次用相同的支持结构被恢复。假定KStore当前没有广泛的使用,优选使用处理过程321作为标准,除非和直至这时间或对于该类环境不再是有用的。为了恢复互锁树数据库,必须恢复所有的节点包,因为它们被顺序地存储,最容易的恢复方式是以与它们在保存时被创建次序相同的次序的串行恢复。优选从具有早已恢复的asCase或asResult表参考节点的这些节点开始,通过避免在恢复期间用于从在指向旧存储器位置的指针中的以前的地址改变到新的存储器位置的迭代搜索而加速恢复过程。编程领域技术人员能够理解所述几种恢复操作的方式,而不依靠不适当的实验来创建执行这些方式所需要的代码,特别是一起阅读以下的几个段落时。
因此,首先读取第一包节点322,并使用所工作的计算机的操作系统,在步骤323为此新节点分配存储器。当为节点323分配存储器之后,创建或开始创建324转换表,该节点的转换表入口通过节点包存储的旧存储器地址和由操作系统或计算机系统刚分配给这个节点的新存储器地址(见图7)。
另一方面,应当看到,对于可以透明地和可靠地移动整块存储器的机器和操作系统,数据库的尺寸作为分配给相同存储器地址的一个单元,在该类系统中,不需要具体保存和恢复过程,尽管其对于部分保存和减小整块保存所需的存储装置的尺寸是很有用的。但是,目前有一些已经被讨论但没有完全实施的存储器文件类型,因此,需要求助于更复杂的保存和恢复机制,例如本发明所述。
一旦包含节点的旧地址和新地址的节点表入目被创建和输入到转换表324,就进到步骤325,其中转换Case和Result指针,并把转换后的Case和Result指针连同任何附加字段一起存储在新节点。对于这个恢复版本,立即查找Case和Result指针的旧地址。倾向以这样的次序保存它们,由此在需要它们之前出现在转换地址表中。
如上所述,本发明的优选实施例不保存asCase表和asResult表,而是或者不保存与它们有关的任何东西,或者作为替代,把指针计数值保存在列表中。为了重建asCase表和asResult表,及其各个指针,恢复过程进到步骤326。步骤326中,恢复过程把新节点地址存储在Case节点的asCase表,并把新节点地址存储在被恢复的节点的Result节点的asResult表中。待恢复的第一节点的新地址,即EOT节点和其它类型的基本根节点,优选地在步骤321的一部分被建立,由此当从节点包建立新的节点时,可以直接指向这些EOT节点和基本根节点的新地址,而不需要第二迭代过程,虽然这样的处理过程并不超出本发明的范围,只是不是优选过程。
一旦新节点地址被存储在asCase和asResult表中,恢复过程的优选方法就进到步骤327,由此确定所讨论的节点包是否为待恢复的最后的节点包。如果节点包不是待恢复的最后节点包,则过程在步骤322继续进行,并且处理新的节点包。如果最后的节点包已被处理,则可以在步骤327移动到问题之外。这是一个迭代过程,其连续进行直至问题327达到最后的节点包为止。这时,互联树数据结构应当被恢复到新的存储器。
图8示出了地址转换表40。图中示出了相应于新存储器地址表42的旧存储器地址表41,由此例如旧存储器地址1(41a)将对应于新的存储器地址1(42a)等等。因此,每次使用旧的存储器地址时,即被恢复,被恢复的节点/包被装载到的新地址被保持在存储器地址转换表40中,并链接到旧存储器地址。优选地在步骤328中完成这个表之后,建立了可能需要参考这个地址转换表的任何附加支持结构。此时,已具有恢复的K,并且可以退出过程329。
另外,在重建KStore,即恢复它时,可以首先恢复来自基本根节点的数据,因此使得恢复过程更快速地执行,因为基本根节点的建立将快速地建立大的链接网络。
上述方法和系统可以以存储在计算机可读媒体上的程序代码(即,指令)被实施,例如软盘、CD-ROM、DVD-ROM、DVD-RAM、硬盘驱动、或任何其它机器可读的贮存媒体,包括还可得到的光学和纳米技术贮存装置等等,因为媒体既不能改变结构的操作,也不能改变本文描述的方法。在所有的数据贮存装置中,当程序代码被装载在例如计算机的机器并被执行时,此机器变为用于实践本发明的方法的设备,并提供如这里描述的本发明的系统的形式。本发明也可以以程序代码的形式被实施,该程序代码通过RF或某些传输媒体,例如通过电线或电缆,通过光纤或透明光学装置,通过包括因特网或内联网的网络,或经由任何其它传输形式被传送,其中当程序代码被接收和被装载在例如计算机的机器,并且被执行时,机器变为用于实践本发明的方法的设备,并且提供如这里描述的本发明的系统的形式。当在通用处理器上实施时,程序代码与处理器相组合,提供类似于特定逻辑电路操作的专用设备,这些逻辑电路本身可被用于本发明。程序代码可以用高级别编程语言,例如C,C++,或Java实施。作为替代,程序代码可以用汇编或机器语言实施。在任何情况下,语言可以是汇编的或释译的语言。
应当指出,上述的例子仅仅起到说明的作用,而决不能看作为本发明的限制。例如,KStore互锁树数据库可以通过使用面向对象技术、程序过程技术,其混合技术,或任何其它适当的方法来实施。而且,尽管所示例子显示出被存储在计算机系统的存储器的数据组单元,但本领域技术人员可以理解,此功能可以用许多不同的方式实施,以及可被用于专用设备和通用计算机系统。对于设想的许多不同的实施例,本发明打算使用被存储在多个远程机器上的许多不同整体的许多不同数据单元组。
权利要求
1.一种用存储器保存互锁树数据库的方法,其中所述互锁树数据库具有至少一个BOT节点、至少一个子部件节点和至少多个根节点,其中所述BOT节点具有指向子部件节点的asCase指针表,其中所述子部件节点具有指向其它子部件节点的asCase指针表,以及其中所述根节点具有指向依赖于所述BOT节点的子部件节点的asResult指针表,其中所述方法包括遍历互锁树数据库以访问每个节点,创建对于每个节点的节点包,其中所述节点包创建过程包括至少获取每个节点的Case指针和Result指针,但不从所述asCase表获取指针,并且不从所述asResult表获取指针,以及把节点包写入到另一个存储器。
2.如权利要求1所述的方法,其中所述从一个存储器写入到另一个存储器是通过使用主存储器作为所述一个存储器完成的。
3.如权利要求1所述的方法,其中所述写入是写入到至少一个下列类型存储器,包括相对永久的并可由计算机获得的一种类型,安放所述一个存储器的机器的本地存储器、通过网络可访问的一个系统中的远端存储器、在可分区的机器中的分区存储器、所述一个存储器的另一个部分。
4.如权利要求1所述的方法,还包括把所述节点包恢复到一个有效存储器的步骤。
5.如权利要求1所述的方法,其中至少某些所述节点包被保存在更大的包内,以及当所述更大的包被写入到另一个存储器时,所述更大的包被写入有关所述节点的元数据。
6.如权利要求1所述的方法,其中所述创建节点包的过程还包括从具有asCase指针表和asResult指针表的任何节点获取所述指针表中的指针计数值。
7.如权利要求6所述的方法,其中所述获取包括对列表上的指针进行计数,以确定计数值。
8.如权利要求1所述的方法,还包括选择节点包类型,在所述创建节点包过程中来自所述节点的信息将被存储为该类型。
9.如权利要求8所述的方法,其中所述选择过程提供多达三种类型的节点包以供选择,所述三种类型包括第二类型,其不具有关于asCase指针表的信息,也不具有关于asResult指针表的信息;第一类型,具有保持在asCase指针表中的指针计数值字段和具有保持在asResult指针表中的指针计数值字段;以及第三类型,具有保持在asCase指针表中的指针或在asResult指针表中的指针计数值字段,但不同时保持二者。
10.如权利要求9所述的方法,其中所述第三种类型的节点包把所述保持的指针表计数值存储在被称为Point List Count(指针表计数值)的字段。
11.如权利要求9所述的方法,其中供选择的至少一个类型是不具有关于asCase指针表的信息,也不具有关于asResult指针表的信息的节点包。
12.如权利要求9所述的方法,其中供选择的至少一个类型是具有保持在asCase指针表中的指针计数值字段和具有保持在asResult指针表中的指针计数值字段的包。
13.如权利要求9所述的方法,其中供选择的至少一个类型是具有保持在asCase指针表中的指针计数值字段或具有保持在asResult指针表中的指针计数值字段,但不同时具有二者数值的包。
14.如权利要求1所述的方法,还包括保存支持结构。
15.如权利要求14所述的方法,其中所述保存支持结构是在两个步骤中完成的,第一步骤是在恢复过程期间构建地址转换表之前保存可被恢复的任何支持结构,以及第二步骤是在所有的其余节点包被恢复和地址转换表完成之后保存可使用的任何支持结构。
16.如权利要求14所述的方法,其中也被保存的所述支持结构包括至少一个下列支持结构文件头,包含文件类型和创建日期,文件ID,对于基本根节点的数值和指向其数值的地址表,代表互锁树数据库的最终产品节点的字符串表,描述它所处的基本OS或计算机系统的数据结构的元数据,用于文件本身的密码保护,表示指针表在节点中如何排序的代码,对于在特定的环境下恢复结构所需要的特性信息,创建保存文件的保存程序的版本和周期,OS基本结构信息,至少包括所使用字段的尺寸信息,基本根节点数值或指向其数值的指针和任何相关的界定符,元数据,包括字段类型,例如用户规定的类型,列描述和许可证,KState变量,包括交换开关、数据流、节点结构,数据源,包括类型位置和附属数据流的ID信息,安全性,包括管理密码、许可证、保存的查询位置和触发器,以及与元数据有关的XML。
17.如权利要求1所述的方法,其中在所述创建节点包过程中对于每个节点包保存至少下列信息,Result指针,Case指针,任何附加字段数据,旧存储器地址,以及任何计数字段数据。
18.如权利要求17所述的方法,其中在所述创建节点包过程中与包尺寸有关的数值也保存在所述节点包中。
19.如权利要求14所述的方法,其中所述写入支持结构过程把所述支持结构保存到文件头,用于由所述方法创建的、保存的互锁树数据库数据文件。
20.如权利要求17所述的方法,其中所述节点包被保存在包含一组所述节点包的大包中。
21.如权利要求20所述的方法,其中被保存在所述大包中的,在所述一组节点中的每个节点包共享至少一个特性,以及其中所述特性的指示被存储在所述大包的头区域。
22.如权利要求21所述的方法,还包括保存多个大包,每个具有一组节点包,至少一个特性方面与其它的大包的节点包不同。
23.如权利要求1所述的方法,其中所述保存互锁树数据库从一个存储器到另一个存储器还包括以下步骤保存支持结构到所述另一个存储器。
24.一种机器可读的信号媒体,包含具有在权利要求1的处理过程中创建的一组节点包的数据文件。
25.如权利要求24所述的机器可读的信号媒体,其中所述媒体是磁盘。
26.一种机器可读的数据媒体,在其中包括一组指令,该组指令在被装载到计算机和允许执行时,使得所述计算机执行权利要求1的方法。
27.一种从保存的互锁树数据库数据文件恢复互锁树数据库的方法,其中所述互锁树数据库在按照所述方法被恢复后将具有至少一个BOT节点、至少一个子部件节点和至少多个根节点,其中所述BOT节点具有指向子部件节点的asCase指针表,其中所述子部件节点具有指向其它子部件节点的asCase指针表,以及其中所述根节点将具有指向依赖于所述BOT节点的子部件节点的asResult指针表,其中所述恢复的方法包括从所述保存的互锁树数据库数据文件,获得支持信息,根据至少一部分所述支持信息确定存储器中的区域,对于读取的每个节点包,从所述数据文件迭代地读节点包直至所有的节点包被读过为止分配存储器,并把对于从在主存储器上所述读出的节点包所创建的新节点分配的新存储器地址存储在计算机系统,创建用于每个读过的节点包的地址转换表,并把包括所述读过的节点包的至少旧地址的信息增加到所述转换表,所述转换表具有来自分配步骤的、对于每个节点包的所述新存储器地址与对于所述读过的节点包的所述旧存储器地址之间的对应关系。
28.如权利要求27所述的方法,还包括使用所述地址转换表从旧存储器地址找出对于从以前已读出的、任何所述读过的节点包创建的节点的新存储器地址。
29.如权利要求27所述的方法,其中所述迭代读取节点包的步骤是在执行子部件节点和最终产品节点之前,首先执行BOT和基本根节点。
30.如权利要求27所述的方法,还包括当从所述数据文件读出最后的节点包之后,从所述数据文件读出最后的支持结构信息,其中所述最后的支持结构信息具有依赖于以前确定的节点地址的特性。
31.如权利要求27所述的方法,其中在所述数据文件中的所述节点包在所述方法之前的保存操作期间被设置成包含头信息,所述头信息包括关于所述数据文件的元数据,所述元数据提供识别信息,以易于实行所述读出步骤,由此,所述读出步骤首先读出所述识别信息,以便决定数据文件中的所有包的节点包的读出次序。
32.如权利要求27所述的方法,其中在所述数据文件中的所述节点包在所述方法之前的保存操作期间被安排在大包中,所述大包包含头信息,所述头信息包括所述大包中的所有节点包的元数据。
33.如权利要求32所述的方法,其中数据文件中的几个大的包按次序被读出,由此,首先读出包含最低级别BOT节点包的大包,以及首先读出在每个所述大的包内的BOT节点包和基本根节点包,然后在读出下一个大包的节点包之前读出包含其它节点包的大包,以及在读出具有在所述一个级别以上的级别上的节点包的任何大的包之前,读出一个级别上的所有的大包。
34.如权利要求32所述的方法,其中在所述读出步骤之前,确定正在读出哪种类型的节点包,以及所述确定是根据读出关于节点包的支持信息作出的。
35.如权利要求27所述的方法,其中在所述读出步骤之前,确定正在读出哪种类型的节点包,以及所述确定是根据检查大包的第一包作出的,所述包包含所述大包中的所有节点包的元数据。
36.一组编码的计算机指令,该组指令在被装载到计算机和在所述计算机中执行时,使得所述计算机执行权利要求27的方法。
37.一种计算机可读的媒体,用于计算机指令和包含权利要求36的一组编码计算机指令的数据。
38.一种计算机系统,运行编码的指令组,以执行权利要求27的方法。
39.一种用存储器保存互锁树数据库的方法,其中所述互锁树数据库具有至少一个BOT节点、至少一个子部件节点和至少多个根节点,其中所述BOT节点具有指向子部件节点的asCase指针表,其中所述子部件节点具有指向其它子部件节点的asCase指针表,以及其中所述根节点具有指向依赖于所述BOT节点的子部件节点的asResult指针表,其中所述方法包括遍历互锁树数据库以访问每个节点,创建对于每个节点的节点包,其中所述节点包创建过程包括至少获取每个节点的case指针和result指针,但不从所述asCase表获取指针,以及不从所述asResult表获取指针,以及把节点包写入到所述存储器。
40.如权利要求13的方法,其中把附加字段加到节点包,以区分由在指针表计数值中的计数值表示的指针表类型。
全文摘要
一种基于树的数据库,其包括可以被生成和/或访问的互锁树的树林,可能需要专用的保存和恢复过程,以保证所有的链路被适当地保持,不管是全部还是局部被恢复。以前的过程对基于树的数据库的已知特性起作用,生成一个元数据文件,并且把结构的每个节点包化,用所考虑的旧存储器地址精确的保存链路和链路表。这显示不是通过保存所有的链路来构建一个保存文件,而是使用新的恢复过程来恢复链路。
文档编号G06F17/30GK101091181SQ200580038950
公开日2007年12月19日 申请日期2005年9月29日 优先权日2004年10月5日
发明者简·卡马贝尔·玛泽加特, 简·万-库仑·克莱尔 申请人:尤尼西斯公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1