專利名稱:保存和恢復(fù)互鎖樹數(shù)據(jù)庫的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及互鎖樹數(shù)據(jù)庫的操作領(lǐng)域,具體地說,允許保存和恢復(fù)互鎖樹數(shù)據(jù)庫,更具體地說,涉及用于提供保存和恢復(fù)互鎖樹數(shù)據(jù)庫的改進(jìn)方案。
背景技術(shù):
保存和恢復(fù)作為互鎖樹數(shù)據(jù)庫的知識(shí)存儲(chǔ)體(或KStore)是該類數(shù)據(jù)庫的商品化的重要特性。在實(shí)驗(yàn)過程中,通過應(yīng)用本文中說明的基本理論,已經(jīng)將保存和恢復(fù)知識(shí)存儲(chǔ)體所需要的時(shí)間減小了幾個(gè)數(shù)量級(jí),并且減小了所需要的存儲(chǔ)器尺寸。
已經(jīng)開發(fā)了用于創(chuàng)建和使用互鎖樹數(shù)據(jù)庫的一種系統(tǒng)和各種方法。具體地說,這些結(jié)構(gòu)和方法在Mazzagatti發(fā)明的共同待決的美國專利申請(qǐng)?zhí)朜o.10/385,421和10/666,382中得到具體描述。另外,我們描述了一個(gè)系統(tǒng),其中這樣的互鎖樹數(shù)據(jù)庫在美國專利申請(qǐng)系列號(hào)No.10/879,329中被更有效地使用。雖然在本專利中描述的系統(tǒng)和方法具體地涉及到由發(fā)明人Mazzagatti在上述專利(申請(qǐng))中描述的特定的互鎖樹數(shù)據(jù)庫,但本文描述的系統(tǒng)和方法也可以應(yīng)用于類似的結(jié)構(gòu)。
保存的互鎖樹數(shù)據(jù)庫當(dāng)然具有其它的用途。通過部分保存或整個(gè)互鎖樹數(shù)據(jù)庫的“部分”,甚至有更多的用途。所以,可以使用保存和恢復(fù)過程來進(jìn)行工作,例如把已在一個(gè)機(jī)器上構(gòu)建的互鎖樹數(shù)據(jù)庫保存到多個(gè)計(jì)算機(jī)(或保存部分互鎖樹數(shù)據(jù)庫),用于類似的但分布的或獨(dú)立的同期(對(duì)等的)用途,這僅僅是一個(gè)示例。從實(shí)際的觀點(diǎn)來看,可以得到在中央處理器上存儲(chǔ)裝有內(nèi)容的互鎖樹數(shù)據(jù)庫,并被恢復(fù)到遍布全國的公司的現(xiàn)金出納機(jī),用于在銷售點(diǎn)進(jìn)行庫存的查詢,而無需求助于中央數(shù)據(jù)庫。人們可以在其各自的計(jì)算機(jī)上看到保存過程資料或樣本知識(shí)庫用于教學(xué)用途或修改。對(duì)于任何這類類用途,對(duì)此需求做出響應(yīng),于這些需要的保存和恢復(fù)過程可被使用來移動(dòng)互鎖樹數(shù)據(jù)庫和部分保存,從任何存儲(chǔ)器到任何其它的存儲(chǔ)器。
盡管在共同待決的美國專利申請(qǐng)系列號(hào)No.10/385,421中最初描述的系統(tǒng)創(chuàng)建的互鎖樹數(shù)據(jù)庫結(jié)構(gòu)提供了許多有用的特性,用于各種不同方式的數(shù)據(jù)聯(lián)系,以及用于生成對(duì)于各種查詢的結(jié)果而不需要生成特定結(jié)構(gòu)來獲得結(jié)果,但迄今為止,它的用途仍舊有根本上的局限性。一個(gè)局限性是計(jì)算機(jī)的存儲(chǔ)器的數(shù)據(jù)結(jié)構(gòu)在原位工作,但不能(amenable)修改移動(dòng)、保存和以后的恢復(fù)。以前,每當(dāng)我們需要移動(dòng)它或需要關(guān)閉它所位于的計(jì)算機(jī)系統(tǒng)時(shí),都必須重新教導(dǎo),即重新創(chuàng)建(或更精確地,允許我們的庫存系統(tǒng)重新創(chuàng)建)互鎖樹數(shù)據(jù)庫的整個(gè)新的拷貝或安裝。因此,對(duì)于以前的互鎖樹數(shù)據(jù)庫開發(fā),除了計(jì)算機(jī)系統(tǒng)故障之外,不能獲得可用的互鎖樹數(shù)據(jù)庫的便攜性和耐久性。
假定我們創(chuàng)建的數(shù)據(jù)結(jié)構(gòu)不存在于在我們的開發(fā)之前的計(jì)算機(jī)系統(tǒng)中,就很難用這類系統(tǒng)的原有設(shè)計(jì)方式來適應(yīng)我們的需求。因此,迫使我們?cè)O(shè)計(jì)一種特定的方式來保存我們的結(jié)構(gòu),由此該結(jié)構(gòu)可被恢復(fù)而不會(huì)損失使其成為此結(jié)構(gòu)的連接;即需要正確地恢復(fù)指針結(jié)構(gòu),除了新系統(tǒng)內(nèi)的改變后的地址空間.基本根節(jié)點(diǎn)需要它們的數(shù)據(jù)被保持,訪問指向所恢復(fù)結(jié)構(gòu)的指針。所有的節(jié)點(diǎn)需要具有相同的訪問指針的途徑,雖然它們以后可被全部恢復(fù)到不同的地址,需要用不依賴于操作系統(tǒng)(OS)和機(jī)器的方式來實(shí)現(xiàn),這樣,互鎖樹數(shù)據(jù)庫可被使用于任何計(jì)算機(jī)環(huán)境。
通常,互鎖樹數(shù)據(jù)庫的樹林以前述專利文件中描述的方式被生成和/或訪問?;跇涞臄?shù)據(jù)庫包括依賴于第一根節(jié)點(diǎn)的第一樹,其可包括多個(gè)分支。第一樹的每個(gè)分支在一個(gè)葉節(jié)點(diǎn)結(jié)束。每個(gè)葉節(jié)點(diǎn)可以表示一個(gè)最終產(chǎn)品或子部件節(jié)點(diǎn)。同一個(gè)基于樹的數(shù)據(jù)庫的第二根被鏈接到表示最終產(chǎn)品的各個(gè)葉節(jié)點(diǎn)。最后,基于樹的數(shù)據(jù)庫包括多個(gè)樹,其中每個(gè)樹的根節(jié)點(diǎn)可被描述為基本節(jié)點(diǎn)。每個(gè)樹的根節(jié)點(diǎn)可被鏈接到在第一樹的一個(gè)或多個(gè)分支上的一個(gè)或多個(gè)節(jié)點(diǎn)?;跇涞臄?shù)據(jù)庫的節(jié)點(diǎn)只包含指向在基于樹的數(shù)據(jù)庫內(nèi)其它節(jié)點(diǎn)的指針,還可能包含附加字段,其中一個(gè)這樣的字段可以是計(jì)數(shù)字段。另外,描述了獲取與特定節(jié)點(diǎn)有關(guān)的變量一致性的概率的裝置,例如在一個(gè)或多個(gè)確定的聚焦點(diǎn)內(nèi)用所需文字表示。此外,示出了關(guān)于這類變量的排序邏輯算子的應(yīng)用。
使用共同待決的申請(qǐng)序列號(hào)No.10/759,466中描述的保存和恢復(fù)系統(tǒng)工作后,我們發(fā)現(xiàn)可以非常更加有效地實(shí)現(xiàn)保存和恢復(fù)。因此,我們?cè)谶@里描述這些發(fā)現(xiàn)內(nèi)容,以及來自該申請(qǐng)的某些原始公開內(nèi)容。
發(fā)明內(nèi)容
為了保存和能夠恢復(fù)包括一個(gè)或多個(gè)級(jí)別的互聯(lián)樹的樹林的基于樹的數(shù)據(jù)庫,即優(yōu)選與美國專利申請(qǐng)序列號(hào)No.10/385,421中所述類似或相同的固有學(xué)習(xí)過程生成和/或訪問,需要保存支持結(jié)構(gòu)、節(jié)點(diǎn)組織、以及特定的基本數(shù)據(jù)。
如前所述的SAVE/RESTORE(保存/恢復(fù))過程對(duì)于很大的K數(shù)據(jù)庫是非常慢的。在許多情況下,從原始數(shù)據(jù)來重新創(chuàng)建K是更快速的。
新方法不保存asCase和asResult列表。這些列表可以通過恢復(fù)各個(gè)單獨(dú)的節(jié)點(diǎn)而重建。即當(dāng)節(jié)點(diǎn)被恢復(fù)時(shí),新的節(jié)點(diǎn)地址被存儲(chǔ)在Case指針的asCase表和Result指針的asResult表中。
新方法的另一個(gè)重要的方面在于,在恢復(fù)階段,它只需要passthrough一次數(shù)據(jù),而不是系列號(hào)10/759,466中的原始方法的兩個(gè)來回。正如在之前的專利中對(duì)于優(yōu)選的互鎖樹數(shù)據(jù)庫所述,基于樹的數(shù)據(jù)庫的每一級(jí)包括取決于第一根節(jié)點(diǎn)的第一樹,其可以包括多個(gè)分支。第一根節(jié)點(diǎn)可以表示一個(gè)概念,例如但不限于級(jí)別開始指示符。第一樹的每個(gè)分支結(jié)束于一個(gè)葉節(jié)點(diǎn)或一個(gè)最終產(chǎn)品節(jié)點(diǎn)?;跇涞臄?shù)據(jù)庫的同一級(jí)別的第二根節(jié)點(diǎn)被鏈接到第一樹中表示最終產(chǎn)品的每個(gè)葉節(jié)點(diǎn)。因此,第二根節(jié)點(diǎn)實(shí)際上是第一樹的反序節(jié)點(diǎn),或第一樹的子組,但第一樹沒有被復(fù)制。第二根節(jié)點(diǎn)表示一個(gè)概念,例如但不限于級(jí)別結(jié)束指示符。最后,基于樹的數(shù)據(jù)庫包括多個(gè)樹,其中每個(gè)樹的根節(jié)點(diǎn)可包括例如數(shù)據(jù)組單元或表示數(shù)據(jù)組單元的數(shù)據(jù)。這種類型的根節(jié)點(diǎn)在這里被簡稱為基本根節(jié)點(diǎn)。每個(gè)樹的基本根節(jié)點(diǎn)可被鏈接到在未被復(fù)制的第一樹的一個(gè)或多個(gè)分支中的一個(gè)或多個(gè)節(jié)點(diǎn)?;跇涞臄?shù)據(jù)庫的非根節(jié)點(diǎn)實(shí)際上只包含指向基于樹的數(shù)據(jù)庫內(nèi)其它節(jié)點(diǎn)的指針,并可能包含附加字段,其中一個(gè)這樣的附加字段可以是計(jì)數(shù)字段。在包括基于樹的數(shù)據(jù)庫的每個(gè)級(jí)別的樹的樹林中的樹的根節(jié)點(diǎn)也由指針組成,然而,基本根節(jié)點(diǎn)可以額外包含表示信息的數(shù)據(jù)(即,包含作為或表示例如數(shù)據(jù)組單元的數(shù)據(jù)或例如級(jí)別開始或級(jí)別結(jié)束指示符概念的數(shù)據(jù));基于樹的數(shù)據(jù)庫的所有其它節(jié)點(diǎn)只指向其它節(jié)點(diǎn),并基本上不包含數(shù)據(jù)。在一個(gè)實(shí)施例中,數(shù)據(jù)是與字符、像素表示、條件例如開始指示符、結(jié)束指示符、字段指示符的開始或者類似等等有關(guān)的整數(shù),雖然互鎖樹數(shù)據(jù)庫不限于此。上述基于樹的數(shù)據(jù)庫的多個(gè)級(jí)別可以被生成和訪問;較低級(jí)別的最終產(chǎn)品變?yōu)橄乱粋€(gè)級(jí)別的基本根節(jié)點(diǎn)。在本發(fā)明的保存和恢復(fù)中,使用級(jí)別來引導(dǎo)過程,如本文具體描述。
節(jié)點(diǎn)本身的結(jié)構(gòu)通常用每個(gè)節(jié)點(diǎn)內(nèi)有限的數(shù)據(jù)字段組來保持??偣灿袑?duì)于Case(情形)、Result(結(jié)果)、asCase列表指針、asResult列表指針的字段和附加字段,后者對(duì)于每個(gè)基本根節(jié)點(diǎn),大多數(shù)結(jié)構(gòu)形式內(nèi)包括至少一個(gè)計(jì)數(shù)字段,以及一個(gè)數(shù)值字段。
為了保存上述結(jié)構(gòu),并且如上述列出的待決專利申請(qǐng)所描述,這些專利申請(qǐng)整體地被引用以供參考,應(yīng)當(dāng)保存支持結(jié)構(gòu),但取決于計(jì)劃采用哪種恢復(fù)形式,其中某些結(jié)構(gòu)可能無損失的丟失。支持結(jié)構(gòu)根據(jù)正在保存的互鎖樹數(shù)據(jù)庫的形式以及如何保存數(shù)據(jù)庫的過程而變化。
整個(gè)互鎖樹數(shù)據(jù)庫結(jié)構(gòu)本身必須訪問各個(gè)節(jié)點(diǎn)的保存機(jī)器所遍歷,并從每個(gè)節(jié)點(diǎn)中的信息生成用于保存的節(jié)點(diǎn)包。在一個(gè)優(yōu)選實(shí)施例中,節(jié)點(diǎn)包將包含由保存機(jī)器創(chuàng)建的元數(shù)據(jù),該元數(shù)據(jù)優(yōu)選地包括節(jié)點(diǎn)包的長度。該保存機(jī)器然后將把節(jié)點(diǎn)包保存到永久存儲(chǔ)器或任何一種希望用于保存互鎖樹數(shù)據(jù)庫的存儲(chǔ)器,不管是在形成該保存機(jī)器或者形成其他機(jī)器或者存儲(chǔ)器系統(tǒng)中。這樣的存儲(chǔ)器可以是相對(duì)較永久的,對(duì)于安放所述一個(gè)存儲(chǔ)器的機(jī)器的本地存儲(chǔ)器,通過網(wǎng)絡(luò)可訪問的系統(tǒng)中的遠(yuǎn)端存儲(chǔ)器,在分區(qū)機(jī)器中的部分存儲(chǔ)器,所述一個(gè)存儲(chǔ)器的另一個(gè)部分。最后,在大多數(shù)情形下,我們預(yù)期將互鎖樹數(shù)據(jù)庫恢復(fù)到一個(gè)有效存儲(chǔ)器,不管其在原先的機(jī)器中,或在其他能夠提供功能的機(jī)器中。稍后討論元數(shù)據(jù)也可以被存儲(chǔ)在包本身中。還要討論如何以優(yōu)選方式組織包的存儲(chǔ),作為在較大的包內(nèi)的節(jié)點(diǎn)包。
在用于確定哪些支持結(jié)構(gòu)需要被保存的原始概念中,一些選擇包括一個(gè)文件頭,其包含創(chuàng)建日期(用于保存)、文件ID、簡稱為“傳感器”但通常描述為基本根節(jié)點(diǎn)的數(shù)值列表,或指向數(shù)值的地址、表示結(jié)構(gòu)的最終產(chǎn)品的字符串列表(因?yàn)樗鼈儽硎驹诨ユi樹數(shù)據(jù)庫樹林內(nèi)的所有“設(shè)想”和節(jié)點(diǎn)字符串)、可以描述它所處的基本操作系統(tǒng)或計(jì)算機(jī)系統(tǒng)的數(shù)據(jù)結(jié)構(gòu)的任何所需元數(shù)據(jù),如果需要的話,還有密碼保護(hù),指針列表在節(jié)點(diǎn)中如何排序,以及恢復(fù)結(jié)構(gòu)或確定待保存結(jié)構(gòu)中信息的地址的任何所需信息。另外,文件頭可以保存K個(gè)狀態(tài)變量(例如一個(gè)節(jié)點(diǎn)中支持多少個(gè)附加字段,將進(jìn)行哪種查詢,asCase表和asResult表如何構(gòu)建,數(shù)據(jù)源,轉(zhuǎn)換開關(guān),以及數(shù)據(jù)流)和/或數(shù)據(jù)源描述符,例如表示哪些源接受查詢和/或從哪些源得到信息等等的鉤。所有這些項(xiàng)目的數(shù)據(jù)可以在單個(gè)文件頭中,或其中的全部或一些數(shù)據(jù)可以在每個(gè)包的小文件頭中,或者在使用特定項(xiàng)目的包中,或者在某些不需要保存這種信息的情況下。編程領(lǐng)域技術(shù)人員能夠明白,假定系統(tǒng)是基于已知環(huán)境或類似環(huán)境,會(huì)使得這類數(shù)據(jù)在特定環(huán)境下保持非相關(guān)。換句話說,如果保存K和恢復(fù)K的環(huán)境相同或相當(dāng)類似,很多元數(shù)據(jù)可能是冗余的。(“數(shù)據(jù)流”是表示數(shù)據(jù)組以及其相關(guān)輸入源的術(shù)語,不管它是靜態(tài)還是動(dòng)態(tài)的。)
在嘗試使處理過程更有效時(shí),我們發(fā)現(xiàn)不必保存用于asCase和asResult列表的指針(雖然保存多個(gè)表的指針可能有助于使得恢復(fù)更有效)。然而,這種改進(jìn)方案通常只在我們以正確的序列保存節(jié)點(diǎn)時(shí)才能通過使用當(dāng)前的技術(shù)而順利運(yùn)行,即具有asCase和asResult表的節(jié)點(diǎn)在它們指向的節(jié)點(diǎn)之前被處理。我們簡單地從互鎖樹數(shù)據(jù)庫的最低級(jí)別開始,然后在保存所有最低級(jí)別的節(jié)點(diǎn)后移到隨后的(較高的)級(jí)別,從具有asCase指針(BOT和子器件節(jié)點(diǎn))和asResult指針的節(jié)點(diǎn)(根節(jié)點(diǎn))開始,然后移動(dòng)到較高的級(jí)別,在該級(jí)別上從相同類型的節(jié)點(diǎn)開始。
接下來描述如何使用三種新的節(jié)點(diǎn)包用于這種改進(jìn)的保存和恢復(fù)系統(tǒng),在本專利中我們稱為包類型1,2和3。在優(yōu)選實(shí)施例中,我們表示和互鎖樹數(shù)據(jù)庫結(jié)構(gòu)一起保存的支持結(jié)構(gòu)內(nèi)的節(jié)點(diǎn)包類型。作為替代,用于節(jié)點(diǎn)包類型的標(biāo)志符可被存儲(chǔ)在節(jié)點(diǎn)的附加字段。在關(guān)于類型的術(shù)語方面可能存在一些混淆,在具體說明中提供一個(gè)密鑰用于區(qū)分所討論的節(jié)點(diǎn)和包的類型,以及分類取決于節(jié)點(diǎn)“字段”的內(nèi)容或包組織的內(nèi)容。
類型1節(jié)點(diǎn)包包括當(dāng)前的或舊節(jié)點(diǎn)地址、Case和Result指針、“任何附加字段”、asCase表指針的計(jì)數(shù)值和asResult表指針的計(jì)數(shù)值。類型1包還可以具有包尺寸的信息和節(jié)點(diǎn)包類型的指示。需要列表計(jì)數(shù)值的原因是,當(dāng)保存的K被恢復(fù)時(shí),需要在用來保存所恢復(fù)K的目標(biāo)機(jī)器的存儲(chǔ)器中為這些表分配足夠的空間,指針的數(shù)目(每個(gè)指針需要一定的地址)對(duì)尺寸需求影響很大。節(jié)點(diǎn)的絕對(duì)數(shù)目是尺寸分配需求的另一個(gè)主要因素,但如果我們需要分配為每個(gè)節(jié)點(diǎn)分配存儲(chǔ)器區(qū)域,則該需求主要是指針表的尺寸。
類型2包包含Case和Result指針、任何附加字段、當(dāng)前的或舊節(jié)點(diǎn)地址,還可以具有包尺寸和包類型的信息,因此省略了asCase表指針的計(jì)數(shù)值和asResult表指針的計(jì)數(shù)值。節(jié)點(diǎn)包類型1和類型2可以用于如下所述的各種環(huán)境,但應(yīng)當(dāng)明白,它們可以根據(jù)用戶的需要或喜愛被選擇。
第三種類型,類型3識(shí)別出節(jié)點(diǎn)在互鎖樹數(shù)據(jù)庫中只具有asCase或asResult表,并且不同時(shí)具有二者。因此,它包含當(dāng)前的或舊節(jié)點(diǎn)地址、Case和Result指針、“任何附加字段”、和一個(gè)指針表計(jì)數(shù)字段,因此節(jié)省了同時(shí)具有asCase和asResult指針表區(qū)域所需要的存儲(chǔ)器空間。類型3包還可包含有包尺寸和包類型的信息。包類型信息包括包內(nèi)包括了哪種指針表,asCase或asResult的指示。如果包不包含包內(nèi)包括哪種類型的指針表的信息,則指針表將被認(rèn)為是asReference型,Restore(恢復(fù))和/或其它Kstore處理過程將確定其類型。
節(jié)點(diǎn)包類型1,類型2和類型3可以用于各種環(huán)境,事實(shí)上,它們可以一起被使用于單個(gè)保存/恢復(fù)操作,只要類型1被使用于一種節(jié)點(diǎn)以及類型2被使用于另一種節(jié)點(diǎn)。不太可能在單個(gè)保存的K中一起使用三種類型,因?yàn)檫@需要在算法中附加編程步驟,這將創(chuàng)建節(jié)點(diǎn)包并確定給定節(jié)點(diǎn)是兩種類型的哪種類型,而這將降低處理速度,此時(shí)幾乎或很少獲得利益。然而,應(yīng)當(dāng)指出,恢復(fù)子程序會(huì)占用包含不同節(jié)點(diǎn)包類型的已保存的K,例如用于包類型1的已保存的K1和用于包類型2的已保存的K2,并且把它們恢復(fù)成單個(gè)新的K。
對(duì)于以前的保存和恢復(fù)專利申請(qǐng),優(yōu)選地僅在每次新的包準(zhǔn)備好用于貯存或已存儲(chǔ)時(shí)確定包的尺寸,優(yōu)選通過任何建立包的機(jī)制。其總存儲(chǔ)器長度、給定的通常的編程約束條件和習(xí)慣被放置在文件頭中,或者被保存用于整個(gè)互鎖樹數(shù)據(jù)庫存儲(chǔ)器區(qū)域。在一些實(shí)施例中,所有的包都給定相同的長度,以避免這個(gè)步驟,在該實(shí)施例的保存中舍棄了任何剩余的空間。我們還公開了使用包內(nèi)的包來更好的組織本發(fā)明中的保存。
為了訪問所有的節(jié)點(diǎn),可以用不同的方式遍歷結(jié)構(gòu)??梢詮某跫?jí)根節(jié)點(diǎn)開始,沿asCase路徑遍歷,或從最終產(chǎn)品節(jié)點(diǎn)出發(fā),沿著向后的Case鏈路,直至所有的初級(jí)根節(jié)點(diǎn)被定位為止,或從每個(gè)根節(jié)點(diǎn)出發(fā),沿著各自的asResult鏈路。如上所述,如果在保存操作期間使用類型1或類型3的包來存儲(chǔ)節(jié)點(diǎn)信息,則優(yōu)選最好是從具有asCase表的節(jié)點(diǎn)開始,本文中是BOT節(jié)點(diǎn)。
也可以通過從最低級(jí)別的每個(gè)根節(jié)點(diǎn)開始,然后沿著所有的asResult指針遍歷K的結(jié)構(gòu)。對(duì)類型1和類型3包應(yīng)用相同的設(shè)計(jì)。
通過適當(dāng)?shù)乇4?,我們也能夠恢?fù)部分互鎖樹數(shù)據(jù)庫,它可保持全部結(jié)構(gòu)內(nèi)容的有用性,而沒有具體應(yīng)用的笨重性。通常,如果希望限制一個(gè)完全開發(fā)的互鎖樹數(shù)據(jù)庫,通過僅用感興趣的約束條件遍歷數(shù)據(jù)庫部分來保存它,并且恢復(fù)被保存的全部內(nèi)容。因此,例如,我們可以通過這個(gè)處理過程消除具有我們不繼續(xù)感興趣的最終產(chǎn)品節(jié)點(diǎn)的所有數(shù)據(jù)。目前不建議其它種類的部分保存。然而,我們相信在將來將開發(fā)出勝于當(dāng)前的部分保存技術(shù)。另外,如果不保存具有零、小的或甚至負(fù)值的計(jì)數(shù)器的節(jié)點(diǎn),可以減小保存節(jié)點(diǎn)的數(shù)目。
恢復(fù)結(jié)構(gòu)需要對(duì)于恢復(fù)和讀出已被保存的支持結(jié)構(gòu)分配所需要的存儲(chǔ)器。每個(gè)節(jié)點(diǎn)包應(yīng)當(dāng)被讀出和進(jìn)行存儲(chǔ)器分配,同時(shí)構(gòu)建一個(gè)地址轉(zhuǎn)換表。地址轉(zhuǎn)換表被用來將各個(gè)節(jié)點(diǎn)的舊存儲(chǔ)器地址轉(zhuǎn)換成新的存儲(chǔ)器地址。每個(gè)節(jié)點(diǎn)隨后用其已確定的Case和Result指針,以及其它相關(guān)數(shù)據(jù)被重建,而Case和Result節(jié)點(diǎn)的asCase和asResult指針表用當(dāng)前的節(jié)點(diǎn)的新的存儲(chǔ)器地址被繁殖。K結(jié)構(gòu)隨后將被恢復(fù)。作為替代,人們可以存儲(chǔ)相對(duì)地址,并且僅僅用基礎(chǔ)相對(duì)地址來恢復(fù)。
KStore結(jié)構(gòu)的一個(gè)級(jí)別的最終產(chǎn)品節(jié)點(diǎn)是根節(jié)點(diǎn),其被組合生成下一個(gè)級(jí)別的子器件節(jié)點(diǎn)。此處理過程可以重復(fù)任何次數(shù),創(chuàng)建任意數(shù)量的級(jí)別的asCase樹。另外,一個(gè)級(jí)別的節(jié)點(diǎn)可以通過Result指針被遍歷,以查看它們的相關(guān)的低級(jí)別節(jié)點(diǎn)和根。一個(gè)級(jí)別的最終產(chǎn)品節(jié)點(diǎn)成為通過它的asResult樹的下一個(gè)較高級(jí)別的根節(jié)點(diǎn),即較低級(jí)別的sResult樹具有代表較低級(jí)別結(jié)束指示符(EOT)的根節(jié)點(diǎn)。
在某些情況下,來自每個(gè)級(jí)別的最終產(chǎn)品節(jié)點(diǎn)在它們被創(chuàng)建時(shí)被表示。所創(chuàng)建的元數(shù)據(jù)是互鎖樹數(shù)據(jù)庫結(jié)構(gòu)的元數(shù)據(jù)的一部分,該結(jié)構(gòu)可以被保存在僅需要對(duì)較高的級(jí)別進(jìn)行部分保存的地方。
前述摘要和本發(fā)明的實(shí)施例的下述詳細(xì)說明在結(jié)合附圖時(shí)將更容易了解。為了說明本發(fā)明,示出了本發(fā)明的優(yōu)選結(jié)構(gòu)的附圖;但是本發(fā)明不限于所公開的具體的方法和實(shí)施方案。圖中圖1和2示出了實(shí)施本發(fā)明中優(yōu)選計(jì)算環(huán)境的兩個(gè)階段的框圖;圖3-5是本發(fā)明的各種優(yōu)選實(shí)施例的節(jié)點(diǎn)包的框圖;圖6是本發(fā)明的保存過程的優(yōu)選形式的流程圖;圖7是本發(fā)明的恢復(fù)過程的優(yōu)選形式的流程圖;圖8是本發(fā)明使用的地址轉(zhuǎn)換表的優(yōu)選形式的框圖;圖9是本發(fā)明的實(shí)施例中來自互鎖樹數(shù)據(jù)庫的節(jié)點(diǎn)的典型結(jié)構(gòu)的框圖;圖10是本發(fā)明的實(shí)施例中稱為Kstore的互鎖樹數(shù)據(jù)庫的最小結(jié)構(gòu)的框圖;以及圖11是本發(fā)明的實(shí)施例中小的KStore互鎖樹數(shù)據(jù)庫的框圖。
圖12是支持說明多個(gè)級(jí)別情況的KStore互鎖樹數(shù)據(jù)庫的框圖。
圖13是用于說明包概念內(nèi)的包的框圖。
具體實(shí)施例方式
綜述雖然我們?cè)谇懊嫣岬降膶@暾?qǐng)中描述了一種創(chuàng)建互鎖樹數(shù)據(jù)庫的系統(tǒng)和方法,簡稱為Kstore,我們?nèi)愿杏X必須重復(fù)其中一些描述,以便讀者熟悉本發(fā)明所采用的現(xiàn)有技術(shù)的概念,但我們相信這些概念不能在計(jì)算機(jī)數(shù)據(jù)領(lǐng)域中找到。KStore通常包括互聯(lián)樹的樹林的至少一個(gè)級(jí)別?;ユi樹數(shù)據(jù)庫的樹林的每個(gè)級(jí)別的結(jié)構(gòu)通過從基本數(shù)據(jù)組創(chuàng)建代表數(shù)據(jù)序列的新節(jié)點(diǎn)而獲取有關(guān)數(shù)據(jù)流的信息。由于每個(gè)單元是在數(shù)據(jù)流中遇到的,新的子部件節(jié)點(diǎn)部件通過使用對(duì)于以前的子部件節(jié)點(diǎn)的基準(zhǔn)和對(duì)于基本根節(jié)點(diǎn)的基準(zhǔn)被構(gòu)建。如果新的序列被構(gòu)建,則基準(zhǔn)將是意圖指示符(被包括在基本節(jié)點(diǎn)組中)和基本根節(jié)點(diǎn)的級(jí)別開始。如果遇到了序列結(jié)束,則基準(zhǔn)將是子器件節(jié)點(diǎn)和表示意圖指示符的級(jí)別結(jié)束的節(jié)點(diǎn)。這個(gè)重疊過程導(dǎo)致由asCase樹分支和多個(gè)asResult樹鏈接的節(jié)點(diǎn)組成的單個(gè)asCase樹。asCase分支的節(jié)點(diǎn)取決于第一根節(jié)點(diǎn)。例如,參照?qǐng)D11,節(jié)點(diǎn)1050,1002,1004,1024,1026,1027和1030是取決于第一開始指示根節(jié)點(diǎn)1050的優(yōu)選asCase樹。從節(jié)點(diǎn)1005開始的其它分支也被看作為部分asCase樹,包括但不限于1028,1029,1040,1031和1060。AsResult樹的示例包括以下的樹節(jié)點(diǎn)1051和1002(一個(gè)asResult樹),節(jié)點(diǎn)1053,及1003和1005(第二個(gè)示例性asResult樹),及節(jié)點(diǎn)1057,1033,1031和1027(第三示例性asResult樹),在這個(gè)圖上還可以找到許多其它節(jié)點(diǎn)。右側(cè)asResult樹是asResult樹的特殊情況,因?yàn)楦?jié)點(diǎn)(節(jié)點(diǎn)1061)代表結(jié)束指示符。
為了明白最基本形式的結(jié)構(gòu),請(qǐng)參考圖10,圖上顯示互鎖樹數(shù)據(jù)庫結(jié)構(gòu)的最小單元,具有由鏈路96-99連接的節(jié)點(diǎn)91-95?;窘Y(jié)構(gòu)具有通過鏈路96連接到子部件節(jié)點(diǎn)94的一個(gè)初級(jí)根節(jié)點(diǎn)(第一根節(jié)點(diǎn)91)。第三根節(jié)點(diǎn)(基本根節(jié)點(diǎn))92也通過鏈路97連接到子部件節(jié)點(diǎn)94。(因此,節(jié)點(diǎn)94是數(shù)據(jù)中的內(nèi)容表示,即,節(jié)點(diǎn)94代表之后是節(jié)點(diǎn)92的基本節(jié)點(diǎn)91的數(shù)據(jù)中的情況)。節(jié)點(diǎn)95通過鏈路99連接到節(jié)點(diǎn)94,而路徑91-96-94-99-95可以被稱為從初級(jí)根節(jié)點(diǎn)開始朝向最終產(chǎn)品節(jié)點(diǎn)95的路徑。(路徑可以是鏈路和節(jié)點(diǎn)的任何連接線)。最終產(chǎn)品節(jié)點(diǎn)也是第二根節(jié)點(diǎn)(目標(biāo)節(jié)點(diǎn)的結(jié)尾)93的情況,并通過鏈路98被連接到路徑。
給定級(jí)別的asCase樹的每個(gè)分支從一個(gè)子部件節(jié)點(diǎn)開始,該節(jié)點(diǎn)由表示級(jí)別開始指示符的節(jié)點(diǎn)和表示根節(jié)點(diǎn)的節(jié)點(diǎn)組合而成。子部件節(jié)點(diǎn)可以迭代地與根節(jié)點(diǎn)組合成另一個(gè)子部件節(jié)點(diǎn)。子部件可以與表示級(jí)別結(jié)束指示符的節(jié)點(diǎn)相組合來創(chuàng)建最終產(chǎn)品節(jié)點(diǎn)。這個(gè)過程可以重復(fù),并可導(dǎo)致取決于第一根節(jié)點(diǎn)的多個(gè)asCase樹的形成。
例如,如果特定的互鎖樹數(shù)據(jù)庫的不可分割的基本根節(jié)點(diǎn)或傳感器是數(shù)字字母,則子部件節(jié)點(diǎn)可以表示不是單詞的字母組合,而最終產(chǎn)品節(jié)點(diǎn)可以表示單詞。作為替代,子部件節(jié)點(diǎn)可以代表數(shù)字字母的組合,包括部分庫存號(hào)或定單號(hào),以及最終產(chǎn)品節(jié)點(diǎn)可代表完整庫存號(hào)或定單號(hào),作為應(yīng)用于本發(fā)明的輸入的數(shù)字字母整體的許多使用中的兩個(gè)可能的用途。
一個(gè)級(jí)別的最終產(chǎn)品節(jié)點(diǎn)可以是下一個(gè)級(jí)別的根節(jié)點(diǎn)。最終產(chǎn)品節(jié)點(diǎn)可被用來生成下一個(gè)級(jí)別的子部件,較低級(jí)別的數(shù)據(jù)單元以相同的方式被用來創(chuàng)建較低級(jí)別的子部件節(jié)點(diǎn)和最終產(chǎn)品節(jié)點(diǎn)。例如,上述的具體互鎖樹結(jié)構(gòu)中,一個(gè)級(jí)別的最終產(chǎn)品節(jié)點(diǎn)(表示單詞)可以是根節(jié)點(diǎn),從該節(jié)點(diǎn)可以創(chuàng)建較高級(jí)別的最終產(chǎn)品節(jié)點(diǎn)(表示句子)。這個(gè)過程可以重復(fù)任意次數(shù),在數(shù)據(jù)庫中創(chuàng)建任何數(shù)量的互聯(lián)樹級(jí)別。
例如圖10的91,92,和93與圖11的1050-1059和1061的該類節(jié)點(diǎn)在本文中稱為基本根節(jié)點(diǎn),因?yàn)檫@些節(jié)點(diǎn)代表數(shù)據(jù)組單元,并包括不可分割的單元,而可分割的單元(子部件節(jié)點(diǎn)與最終產(chǎn)品節(jié)點(diǎn))由這些不可分割的單元組成。例如94,1004,1024,1033等該類節(jié)點(diǎn)在本文中被稱為子部件節(jié)點(diǎn),因?yàn)檫@些節(jié)點(diǎn)表示例如開始指示符那樣的概念指示符的根節(jié)點(diǎn)與表示數(shù)據(jù)組單元的根節(jié)點(diǎn)的組合,或子部件節(jié)點(diǎn)與表示不包括最終產(chǎn)品的數(shù)據(jù)組單元的組合,或子部件節(jié)點(diǎn)與表示包括最終產(chǎn)品節(jié)點(diǎn)的結(jié)束指示符的節(jié)點(diǎn)的組合。節(jié)點(diǎn)例如1030或95表示最終產(chǎn)品節(jié)點(diǎn)。在所引用例子中,基本根節(jié)點(diǎn)是字母,子部件節(jié)點(diǎn)表示不包括單詞的字母組合,而最終產(chǎn)品節(jié)點(diǎn)表示單詞。應(yīng)當(dāng)指出,基本根節(jié)點(diǎn)組包括“BOT”,在本例中表示單詞、目標(biāo)、或字符串的開始,以及“EOT”,表示單詞、目標(biāo)、或字符串的結(jié)束。將會(huì)看到,“BOT”和“EOT”表示開始和結(jié)束指示符,但本發(fā)明不限于此。當(dāng)不存在一個(gè)或兩個(gè)這樣的指示符時(shí),可以設(shè)想使用其它指示符。在本發(fā)明的一個(gè)實(shí)施例中,最終產(chǎn)品節(jié)點(diǎn)是與子部件節(jié)點(diǎn)可區(qū)分的,因?yàn)閺奶囟ǖ墓?jié)點(diǎn)到根節(jié)點(diǎn)的鏈路代表EOT概念。
如果基本節(jié)點(diǎn)在KStore結(jié)構(gòu)的第一級(jí)別中代表字母,在第二級(jí)別中使用單詞,字母序列,而KStore結(jié)構(gòu)中的級(jí)別根節(jié)點(diǎn)可包括句子。同樣地,作為一個(gè)級(jí)別的基本根節(jié)點(diǎn)是像素,可包括下一個(gè)較高的級(jí)別中的圖像區(qū)域,以及在再一個(gè)更高級(jí)別的整個(gè)圖像。句子可以被組合而創(chuàng)建段落(比單詞更高的級(jí)別)等等。另外,較高級(jí)別的根節(jié)點(diǎn)可以遍歷到互鎖樹數(shù)據(jù)庫的較低級(jí)別。在本發(fā)明的一個(gè)實(shí)施例中,從級(jí)別結(jié)束指示符開始的asResult樹被用于規(guī)定下一個(gè)級(jí)別的根節(jié)點(diǎn)。結(jié)束指示符是第二根節(jié)點(diǎn),其次序與本發(fā)明的一個(gè)實(shí)施例中由asCase樹規(guī)定的互鎖樹數(shù)據(jù)庫相反。
創(chuàng)建節(jié)點(diǎn)時(shí),在新節(jié)點(diǎn)與新節(jié)點(diǎn)表示的2個(gè)節(jié)點(diǎn)之間創(chuàng)建雙向鏈路。Case鏈路表示連接到創(chuàng)建的新的兩個(gè)節(jié)點(diǎn)中的第一節(jié)點(diǎn)的鏈路。到新節(jié)點(diǎn)的另一個(gè)指針被存儲(chǔ)在Case節(jié)點(diǎn)的asCase表中。可以看到,asCase樹的asCase分支可以通過在處理輸入時(shí)生成asCase鏈路而被創(chuàng)建。每個(gè)級(jí)別的asCase分支提供如何創(chuàng)建該級(jí)別的每個(gè)子部件節(jié)點(diǎn)與最終產(chǎn)品節(jié)點(diǎn)的直接記錄。因此,asCase分支可被使用于任何目的,為此知道子部件節(jié)點(diǎn)和最終產(chǎn)品節(jié)點(diǎn)如何被創(chuàng)建是有用的。如果例如加到互鎖樹生成器的輸入包括正確拼寫單詞的整體,則生成的互鎖樹的最終得到的asCase鏈路可被用作拼寫檢驗(yàn)器,以便只列出在數(shù)據(jù)庫的許多可能的用途的一個(gè)例子。
Result鏈路表示連接到創(chuàng)建的新的兩個(gè)節(jié)點(diǎn)的第二節(jié)點(diǎn)的鏈路。AsResult鏈路的生成創(chuàng)建了一系列互鎖樹,其中每個(gè)asResult樹取決于包括根節(jié)點(diǎn)的根。其結(jié)果是記錄了數(shù)據(jù)庫內(nèi)根節(jié)點(diǎn)與asCase樹之間的關(guān)系。即,asCase樹與asResult樹的組合獲取互鎖樹的節(jié)點(diǎn)的所有可能的內(nèi)容。asCase樹與asResult樹的組合可被使用于任何目的,為此知道在根節(jié)點(diǎn)之間的內(nèi)容或關(guān)系是有用的。如果例如加到互鎖樹數(shù)據(jù)庫生成器的輸入包括銷售數(shù)據(jù)的整體,其包括銷售員姓名、星期幾、物品數(shù)量和狀態(tài),生成的互鎖樹數(shù)據(jù)庫的最終得到的asCase和asResult鏈路可被用來提取信息,例如“在特定的州中銷售員銷售如何?”“在星期一銷售了多少物品?”“銷售員Bob在星期一和星期二銷售了多少物品?”等等--全部來自同一個(gè)互鎖樹數(shù)據(jù)庫,而不用創(chuàng)建數(shù)據(jù)庫的多個(gè)拷貝。
可以看到,上述的關(guān)系信息實(shí)際上被存儲(chǔ)在被構(gòu)建的互鎖樹數(shù)據(jù)庫的結(jié)構(gòu)內(nèi),而不是明顯地存儲(chǔ)在樹的子部件和最終產(chǎn)品節(jié)點(diǎn)中。因?yàn)橹挥谢ユi樹數(shù)據(jù)庫的基本根節(jié)點(diǎn)可包括數(shù)據(jù),所以可以跟隨Case和Result鏈路回到根節(jié)點(diǎn),以便從數(shù)據(jù)流確定或重建原始數(shù)據(jù)。
優(yōu)選計(jì)算環(huán)境圖1是示出了實(shí)施本發(fā)明的優(yōu)選計(jì)算機(jī)系統(tǒng)100的框圖。計(jì)算機(jī)系統(tǒng)100可以是任何適當(dāng)?shù)南到y(tǒng),例如但不限于主計(jì)算機(jī)、迷你計(jì)算機(jī)、IBM兼容的個(gè)人計(jì)算機(jī)、Unix工作站或網(wǎng)絡(luò)計(jì)算機(jī)。本領(lǐng)域技術(shù)人員將會(huì)看到,本發(fā)明的設(shè)備可以應(yīng)用于任何計(jì)算機(jī)系統(tǒng),包括但不限于多用戶計(jì)算機(jī)系統(tǒng)或單用戶計(jì)算機(jī)。如圖1所示,計(jì)算機(jī)系統(tǒng)100包括連接到主存儲(chǔ)器104的中央處理單元(CPU)102,輔助存儲(chǔ)接口106,終端接口108、以及網(wǎng)絡(luò)接口110。這些系統(tǒng)部件經(jīng)由系統(tǒng)總線160互相連接。輔助存儲(chǔ)接口106被用于連接存儲(chǔ)設(shè)備,例如但不限于,DASD設(shè)備190,存儲(chǔ)設(shè)備把盤上的數(shù)據(jù),例如但不限于盤195,存儲(chǔ)在計(jì)算機(jī)系統(tǒng)100中。
主存儲(chǔ)器104,包括計(jì)算機(jī)系統(tǒng)100的整個(gè)虛擬存儲(chǔ)器,包括操作系統(tǒng)122和應(yīng)用124,還可包括互鎖樹數(shù)據(jù)庫126?;ユi樹數(shù)據(jù)庫126提供一種數(shù)據(jù)結(jié)構(gòu),其可以在多上下文模式下快速搜索數(shù)據(jù),而不需要數(shù)據(jù)復(fù)制。計(jì)算機(jī)系統(tǒng)100可以使用常用的虛擬尋址機(jī)制,允許計(jì)算機(jī)系統(tǒng)100的程序起作用,就好像它們?cè)L問到大的單個(gè)存儲(chǔ)實(shí)體,而不是訪問到多個(gè)較小的存儲(chǔ)實(shí)體,例如主存儲(chǔ)器104和DASD設(shè)備190。因此,雖然操作系統(tǒng)122、應(yīng)用124、和互鎖樹數(shù)據(jù)庫126被示為處在主存儲(chǔ)器104中,但本領(lǐng)域技術(shù)人員能夠理解,這些單元不一定同時(shí)全部位于主存儲(chǔ)器104內(nèi)。
雖然計(jì)算機(jī)系統(tǒng)100被示為只包括單個(gè)CPU和系統(tǒng)總線,但本領(lǐng)域技術(shù)人員可以看出本發(fā)明可以通過包括多個(gè)CPU和/或總線的系統(tǒng)來實(shí)施。終端接口108可被用來把一個(gè)或多個(gè)終端連接到計(jì)算機(jī)系統(tǒng)100。所述終端可以是從屬終端或完全可編程工作站,它們可被用來使得系統(tǒng)管理員和用戶與計(jì)算機(jī)系統(tǒng)100通信。
網(wǎng)絡(luò)接口110可被使用來把其它計(jì)算機(jī)系統(tǒng)和/或工作站連接到計(jì)算機(jī)系統(tǒng)100。網(wǎng)絡(luò)接口110所接口連接的網(wǎng)絡(luò)可以是局域網(wǎng)(LAN)、廣域網(wǎng)(WAN)、互聯(lián)網(wǎng)、外部網(wǎng)絡(luò)或內(nèi)部網(wǎng)絡(luò)、或任何其它適當(dāng)?shù)木W(wǎng)絡(luò)。操作系統(tǒng)122可以是例如OS2、WINDOWS、AIX、UNIX、LINUX或任何其它適當(dāng)?shù)牟僮飨到y(tǒng)。
應(yīng)用程序124可以是訪問存儲(chǔ)在互鎖樹數(shù)據(jù)庫126的數(shù)據(jù)的任何類型的應(yīng)用程序。因此,舉例來說,應(yīng)用可包括數(shù)據(jù)分析應(yīng)用、數(shù)據(jù)倉儲(chǔ)應(yīng)用、盜用檢測系統(tǒng),雖然本發(fā)明不限于這些例子。
互鎖樹數(shù)據(jù)庫126提供一個(gè)數(shù)據(jù)存儲(chǔ)結(jié)構(gòu),使得用戶能夠訪問相同的數(shù)據(jù)庫以得到與任何上下文有關(guān)的信息。術(shù)語數(shù)據(jù),正如這里使用的,可包括任何類型的計(jì)算機(jī)存儲(chǔ)信息,例如但不限于文本、圖形、公式、表格、視頻、多媒體或它們的組合。互鎖樹數(shù)據(jù)庫126可被實(shí)施為應(yīng)用124的一部分、操作系統(tǒng)122的一部分、或者作為一個(gè)獨(dú)立的數(shù)據(jù)庫產(chǎn)品,適用于為各種應(yīng)用提供數(shù)據(jù)存儲(chǔ)。
雖然本發(fā)明是結(jié)合全功能性計(jì)算機(jī)系統(tǒng)描述的,但本領(lǐng)域技術(shù)人員將會(huì)看到,本發(fā)明能夠以各種各樣的形式作為程序產(chǎn)品被分發(fā),以及本發(fā)明同樣地應(yīng)用,與實(shí)行分發(fā)的信號(hào)承載媒體的具體類型無關(guān)。承載此信號(hào)的媒體的例子包括但不限于軟盤、硬盤驅(qū)動(dòng)、CD ROM、通過電、光、無線或其它適當(dāng)媒體的數(shù)字和模擬通信鏈路。如果需要的話,也可能分發(fā)在計(jì)算機(jī)系統(tǒng)上工作的這種互鎖樹數(shù)據(jù)庫。
圖2與圖1類似,除了其包含表示被保存的KStore的塊。另外,圖2上的重復(fù)單元僅僅在它們表示的數(shù)字上附著一個(gè)“a”。KStore(數(shù)據(jù)庫126a)由計(jì)算機(jī)系統(tǒng)內(nèi)有效存儲(chǔ)器104a中的保存子程序128操作。為了在保存過程完成后恢復(fù)它,還有恢復(fù)子程序129,為了方便起見,它們也被顯示為在有效的主存儲(chǔ)器104a內(nèi),雖然它們可以在需要時(shí)或按希望地被交換。在處理過程中,處理過程將開發(fā)一個(gè)頭空間127r,和代表KStore結(jié)構(gòu)的節(jié)點(diǎn),優(yōu)選在存儲(chǔ)在有效存儲(chǔ)器區(qū)域127的結(jié)構(gòu)上操作,作為區(qū)域127。為了方便起見,我們把存儲(chǔ)器中的這個(gè)工作空間簡稱為區(qū)域127。作為替代,空間127可以是非常小的,只具有當(dāng)前在處理的節(jié)點(diǎn)包,該包是由保存子程序128創(chuàng)建的,或替換地是由恢復(fù)子程序恢復(fù)的,如果該KStore被恢復(fù)的話。如果KStore被恢復(fù),則不需要空間127,但在KStore被遍歷時(shí),可能想要有該空間127作為測試或工作空間,而節(jié)點(diǎn)在恢復(fù)過程中被添加。如果節(jié)點(diǎn)被轉(zhuǎn)變成包,并且在它們被形成時(shí)作為文件流到存儲(chǔ)器,則它們可以以流文件立即流動(dòng)到永久存儲(chǔ)裝置的速度被創(chuàng)建。至少在這樣的情形下,在存儲(chǔ)裝置中分配用于包的存儲(chǔ)器不是一個(gè)必需步驟,因?yàn)榱魑募?huì)使得OS和數(shù)據(jù)貯存系統(tǒng)自動(dòng)做到這一點(diǎn)。
將會(huì)看到,雖然在以上給出的文本例子(“BOT-C-A-T-EOT”和“BOT-T-A-B-EOT”)中輸入的整體是數(shù)字字母符號(hào)組,從這些符號(hào)可以得出單詞,但不限于這種Kstore數(shù)據(jù)庫結(jié)構(gòu)。例如,輸入的整體可以是文本,例如字母(從這些字母可以得出單詞)或單詞(從這些單詞可以得出詞組或句子)。另外,KStore的實(shí)體可以替換地由氨基酸組成,從該氨基酸可以得到染色體組,在過程中使用的有限資源,概念,像素組,圖像,聲音,數(shù)字,模擬測量值,或數(shù)值或由任何其它可被數(shù)字化的基本單元組成的適當(dāng)整體(或者變?yōu)樾畔⒋鎯?chǔ)格式,例如量化狀態(tài)表示或類似),隨后被組合而生成最終產(chǎn)品。
除了上述的節(jié)點(diǎn)以外,互鎖樹數(shù)據(jù)庫(例如,使用圖10的說明)還可包括在節(jié)點(diǎn)之間的多個(gè)連接或鏈路,例如鏈路96,97,99和98。在本發(fā)明的一個(gè)實(shí)施例中的鏈路是雙向的。鏈路96和99在這里被稱為asCase鏈路。鏈路97和98在這里被稱為asResult鏈路??梢钥吹?,在本發(fā)明的優(yōu)選實(shí)施例中,表示開始指示符概念或條件的根節(jié)點(diǎn)將具有空的asResult表,因?yàn)殚_始指示符決不是子部件的第二部分,表示數(shù)據(jù)組單元的根節(jié)點(diǎn)將具有空的asCase表,因?yàn)閿?shù)據(jù)組單元決不是子部件的第一部分。最后,最終產(chǎn)品根節(jié)點(diǎn)將具有空的asCase表,因?yàn)樽罱K產(chǎn)品作為用于下一個(gè)級(jí)別的數(shù)據(jù)組單元。
互鎖樹數(shù)據(jù)庫的所有節(jié)點(diǎn)也可以包括代表與所述節(jié)點(diǎn)有關(guān)的信息的附加字段。這可以通過圖9示出。然而,應(yīng)當(dāng)指出,在幾乎所有的優(yōu)選實(shí)施例中,數(shù)據(jù)僅僅被存儲(chǔ)在根節(jié)點(diǎn)。在大多數(shù)實(shí)施例中的大多數(shù)節(jié)點(diǎn)沒有字符串?dāng)?shù)據(jù),即使它們具有附加字段。通常,附加字段(如果有的話)可被用來存儲(chǔ)計(jì)數(shù)值,或者可能是節(jié)點(diǎn)類型的指示符,如果需要的話。
圖9示出了一個(gè)優(yōu)選的節(jié)點(diǎn)30。這個(gè)節(jié)點(diǎn)30可包括字符串字段作為附加字段,其包含一個(gè)由此節(jié)點(diǎn)表示的所有基本根節(jié)點(diǎn)的序列。附加一個(gè)包括此基本序列的字符串字段在診斷故障時(shí)是有幫助的。這類附加字段可以有許多用途,節(jié)點(diǎn)例如節(jié)點(diǎn)30不一定限于一個(gè)附加字段。然而,通常來說,附加字段將包含計(jì)數(shù)值,而不是字符串,可以有不止一個(gè)附加字段。這些字段的數(shù)目和特性將根據(jù)Kstore在構(gòu)建時(shí)的特性而變化。
優(yōu)選節(jié)點(diǎn)30還可包括計(jì)數(shù)字段作為字段31。計(jì)數(shù)字段被初始化,并增加一個(gè)強(qiáng)度變量,其數(shù)值根據(jù)計(jì)數(shù)字段被引用的次數(shù)條件而變化。(強(qiáng)度變量被定義為保持至少一個(gè)不能改變的數(shù)值的數(shù)學(xué)實(shí)體)。通過使得這個(gè)項(xiàng)目變得廣義,計(jì)數(shù)字段的增加強(qiáng)度變量可被用于本發(fā)明的互鎖樹結(jié)構(gòu),以處理忘記錯(cuò)誤的記錄數(shù)據(jù),記錄哪個(gè)實(shí)體正在查詢,記錄被使用的查詢類型,以及在使用數(shù)據(jù)時(shí)可以派生出的其它感興趣的處理過程。強(qiáng)度變量的一個(gè)簡單示例形式是單個(gè)序數(shù)字段值,例如“1”被用來增加或減少計(jì)數(shù)字段,以記錄節(jié)點(diǎn)被訪問或被遍歷的次數(shù)。
而且,認(rèn)識(shí)到指向asCase表字段33的指針對(duì)于最終產(chǎn)品節(jié)點(diǎn)是零,以及指向asResult表字段34的指針對(duì)于所有的子部件節(jié)點(diǎn)都是零,以及二者之一(指向asCase表或指向asResult表的指針)對(duì)于基本節(jié)點(diǎn)是零。認(rèn)識(shí)到這點(diǎn)允許在所描述的保存操作期間創(chuàng)建類型3節(jié)點(diǎn)包,因?yàn)槲覀冊(cè)诠?jié)點(diǎn)包中只需要一個(gè)字段,兩個(gè)字段之一在所有的情形下將是零。這個(gè)表計(jì)數(shù)值是要與計(jì)數(shù)器字段區(qū)分開來,后者保持節(jié)點(diǎn)的遍歷頻率和強(qiáng)度的記錄。
而且,對(duì)于不同的功能,強(qiáng)度變量可以以不同的速率和不同的方向改變。不同強(qiáng)度的簡單示例可以是每次查詢遍歷一個(gè)節(jié)點(diǎn)時(shí),數(shù)值加上+1,以及如果包含特定節(jié)點(diǎn)(或該特定節(jié)點(diǎn)序列)的路徑被認(rèn)為是個(gè)錯(cuò)誤(由于某些上面的原因,此說明是不重要的),數(shù)值加上-100,例如當(dāng)序列在使用后被發(fā)現(xiàn)是拼寫錯(cuò)誤時(shí),或者傳感器發(fā)現(xiàn)一個(gè)包含危險(xiǎn)化學(xué)區(qū)域的情況,或如果一個(gè)成人兒童仿真器在仿真時(shí)在熱火爐上“觸摸”和“自身燃燒”。強(qiáng)度變量的一個(gè)替換例是使用一個(gè)獨(dú)立節(jié)點(diǎn)來保持對(duì)于每種節(jié)點(diǎn)遍歷的新數(shù)值,因此在類型1、類型2、實(shí)驗(yàn)1、實(shí)驗(yàn)2等等和無窮盡的查詢情況下創(chuàng)建一個(gè)情況群。在目前考慮本結(jié)構(gòu)的實(shí)際應(yīng)用時(shí),計(jì)數(shù)字段中的強(qiáng)度變量為解決這個(gè)問題提供了最簡單的、從而也是當(dāng)前最好的方法,但是當(dāng)信息處理系統(tǒng)成熟時(shí),這個(gè)或其它的替換例也應(yīng)當(dāng)被考慮和再考慮。如果考慮這個(gè)替換例,則使用一個(gè)獨(dú)立節(jié)點(diǎn),甚至可能是基本或根節(jié)點(diǎn)來記錄對(duì)于與節(jié)點(diǎn)有關(guān)的、每種類型的遍歷數(shù)目的計(jì)數(shù)值的方法是實(shí)施這個(gè)方法的一種方式。
因此,在一種用途中,當(dāng)新的數(shù)據(jù)被合并到互鎖樹數(shù)據(jù)庫時(shí),計(jì)數(shù)字段可以被增加,但當(dāng)被查詢的互鎖樹數(shù)據(jù)庫為新的數(shù)據(jù)產(chǎn)生更大的數(shù)值并且沒有出現(xiàn)查詢變化時(shí),省略了計(jì)數(shù)字段的增加。因此,這個(gè)強(qiáng)度變量可以被動(dòng)態(tài)地選擇,以使得它適用于由KStore解決的問題。
增加計(jì)數(shù)字段以便易于使用由互鎖樹數(shù)據(jù)庫結(jié)構(gòu)的內(nèi)容,這在尋求統(tǒng)計(jì)資料,例如頻率和概率時(shí)是特別有用的。
另外,應(yīng)當(dāng)意識(shí)到,如果在節(jié)點(diǎn)中存在計(jì)數(shù)字段以及該計(jì)數(shù)字段相應(yīng)于所希望的節(jié)點(diǎn)的實(shí)驗(yàn)頻率和強(qiáng)度,則可以從保存的節(jié)點(diǎn)中消除任意節(jié)點(diǎn),如果它們?cè)谟?jì)數(shù)字段中具有零值。消除零值節(jié)點(diǎn)甚至可被用于具有零值的計(jì)數(shù)字段的基本根節(jié)點(diǎn),如果在檢驗(yàn)過程中,這些基本根節(jié)點(diǎn)不必使用于任何被恢復(fù)的KStore。(因此,如果需要,即使低數(shù)值的計(jì)數(shù)值也可被消除;其不是必須等價(jià)于零值)。這可能發(fā)生在,如果KStore開發(fā)器保留多個(gè)數(shù)據(jù)粒子,但發(fā)現(xiàn)一旦收集到大多數(shù)數(shù)據(jù)時(shí),它們就是無用的;其然后可以有把握地消除這些基本根節(jié)點(diǎn)。另外,在可以對(duì)計(jì)數(shù)字段的數(shù)值進(jìn)行減法的情況下,也可以從保存的節(jié)點(diǎn)中消除這類節(jié)點(diǎn),因?yàn)樗鼈兛赡艽礤e(cuò)誤或誤拼寫等等。當(dāng)然,在某些情形下,人們想要永不消除所創(chuàng)建的節(jié)點(diǎn),在這種情形下,人們可以甚至保存在計(jì)數(shù)字段中具有零值的這些節(jié)點(diǎn),以保存歷史。
應(yīng)當(dāng)指出,圖9上的節(jié)點(diǎn)30可以是具有數(shù)值字段32的基本節(jié)點(diǎn)30A,或子部件節(jié)點(diǎn)或最終產(chǎn)品節(jié)點(diǎn)30B(缺少數(shù)值字段32),但在任一種情形下,它可以具有一個(gè)附加字段或多個(gè)字段31。
圖9示出了附加字段的具體示例,其中節(jié)點(diǎn)例如節(jié)點(diǎn)30(或者是基本節(jié)點(diǎn)30A(具有數(shù)值字段32)或者子部件或最終產(chǎn)品節(jié)點(diǎn)30B)都具有附加字段31。此附加字段(或如果優(yōu)選地,多個(gè)附加字段)可包含想要的任何信息。例如,人們可能想要知道節(jié)點(diǎn)的特定種類(節(jié)點(diǎn)類型,如傳感器,最終產(chǎn)品或其它種類的節(jié)點(diǎn)),或在特定的日期或距離由節(jié)點(diǎn)計(jì)數(shù)值從EOT或BOT創(chuàng)建的,或者人們希望對(duì)它做的任何事情。
如果需要,保存包組內(nèi)的包來幫助保存組織也是有用的。圖13中,在較大的包140內(nèi)具有一組節(jié)點(diǎn)包0,,,n,141,142,143...144。優(yōu)選地,包0...n的第一個(gè),包141是信息頭包,其包含的信息對(duì)于較大的包140中所有的之后的包來說是共同的內(nèi)容。這個(gè)信息頭包在大多數(shù)優(yōu)選實(shí)施例中不被重建為節(jié)點(diǎn),但包含對(duì)于恢復(fù)過程的有用信息。使用包設(shè)計(jì)內(nèi)易于實(shí)現(xiàn)存儲(chǔ)各個(gè)包內(nèi)的基本根節(jié)點(diǎn)、BOT節(jié)點(diǎn)、以及EOT和最終產(chǎn)品節(jié)點(diǎn),每個(gè)節(jié)點(diǎn)與其它的節(jié)點(diǎn)分隔開,因?yàn)樗鼈冊(cè)诿糠N類型中具有不同的字段。例如,根節(jié)點(diǎn)可以具有一個(gè)裝有全部asResult指針的asReult表,但子部件節(jié)點(diǎn)沒有這樣的表。另外,節(jié)點(diǎn)的層可被存儲(chǔ)在一起,同樣易于實(shí)現(xiàn)恢復(fù)過程,容易組織恢復(fù)較低的層,然后恢復(fù)隨后的較高層。
應(yīng)當(dāng)闡明類型的分類。具有上述三種新的包類型。這些包類型可藉助于具有或不具有一個(gè)或兩個(gè)附加計(jì)數(shù)字段而被區(qū)分,該附加計(jì)數(shù)字段記錄原始節(jié)點(diǎn)具有的asResult或asCase鏈路數(shù)目。如果需要的話,這些類型可被方便地存儲(chǔ)不具有asResult鏈路也不具有asCase鏈路的節(jié)點(diǎn),而是不具有這些鏈路的節(jié)點(diǎn)。這樣的節(jié)點(diǎn)一般是子部件節(jié)點(diǎn),它具有Case指針、Result指針和計(jì)數(shù)字段,以及指向具有作為它的成員的asResult表和作為它的成員的asCase表的節(jié)點(diǎn)的指針。所以,這可被稱為一種不同類型的節(jié)點(diǎn)。然而,對(duì)于本專利,我們使用1,2,3的類型表示法,以表示在保存期間根據(jù)Kstore的(某些或所有的)節(jié)點(diǎn)被保存在包內(nèi)的信息種類。類型1,2,3節(jié)點(diǎn)的完整定義如上所述。如果我們把子部件節(jié)點(diǎn)保存為節(jié)點(diǎn)的包(作為包內(nèi)的包),則我們不需要表示節(jié)點(diǎn)類型,因?yàn)樗葲]有asCase表,也沒有asResult表。
本文詳細(xì)討論Kstore中的層的概念,并且詳細(xì)討論恢復(fù)過程如何利用這種分層是很有用的?,F(xiàn)有專利申請(qǐng)No.10/879,329中已經(jīng)描述層的使用,并且增加了一幅類似于本申請(qǐng)中圖12的圖。應(yīng)當(dāng)指出,最低層根據(jù)粒子級(jí)別構(gòu)建單詞,粒子級(jí)別具有作為字母的基本根節(jié)點(diǎn)902。BOT 901和EOT 903也是基本根節(jié)點(diǎn),但是在這里是專用。向上的下一層中的單詞都是最終產(chǎn)品節(jié)點(diǎn)908,906,904。最高層的最終產(chǎn)品節(jié)點(diǎn)902是句子節(jié)點(diǎn),CAT ARE FURRY。BOS 904和EOS 905與單詞節(jié)點(diǎn)904,906和908一起也是這層的根節(jié)點(diǎn)。因此,根節(jié)點(diǎn)將把a(bǔ)sResult指針放置在它們上面的層。
因此,如果我們按次序保存和恢復(fù),則我們從曲線圖的底部向上移動(dòng),從BOT節(jié)點(diǎn)901開始。這指向情況節(jié)點(diǎn)BOT C,BOT A(951),和BOT F,對(duì)于Kstore在這個(gè)級(jí)別的每個(gè)單詞,分別在節(jié)點(diǎn)904,906和908結(jié)束。為了做到這一點(diǎn),我們使用包尋找第一BOT,簡單的把BOT的舊地址放置在地址轉(zhuǎn)換表中,連同在被恢復(fù)的存儲(chǔ)器中分配給這個(gè)節(jié)點(diǎn)的新地址一起,移動(dòng)到基本根節(jié)點(diǎn),并對(duì)于它們的舊和新地址進(jìn)行同樣的工作?;靖?jié)點(diǎn)包的列表是C,A,T,S,R,E,F(xiàn),U和Y(902)和專用基本根節(jié)點(diǎn)EOT 903。正如剛才闡述的,將它們的舊和新的存儲(chǔ)器位置放置到地址轉(zhuǎn)換表。當(dāng)恢復(fù)作為這些基本節(jié)點(diǎn)的結(jié)果的節(jié)點(diǎn)時(shí),已在地址轉(zhuǎn)換表中建立了這些根節(jié)點(diǎn)的地址,所以知道對(duì)于指向節(jié)點(diǎn)的指針的新存儲(chǔ)地址。子部件節(jié)點(diǎn)包也具有它們的asCase指針,因?yàn)樵贑ase分支中它們的之前節(jié)點(diǎn)(這里是BOT,然后是C,然后是A等等)首先被恢復(fù),并且其新地址已在地址轉(zhuǎn)換表中。然后移動(dòng)到下一個(gè)級(jí)別,恢復(fù)用于句子的節(jié)點(diǎn)BOS 904。我們發(fā)現(xiàn)子部件節(jié)點(diǎn)具有根節(jié)點(diǎn)904,906和908,其作為Kstore的級(jí)別1部分上的最終產(chǎn)品節(jié)點(diǎn)。這個(gè)級(jí)別的最終產(chǎn)品節(jié)點(diǎn)是節(jié)點(diǎn)902,且它也具有EOS節(jié)點(diǎn)905,優(yōu)選地在BOS節(jié)點(diǎn)904之后從包中被恢復(fù)。對(duì)于這個(gè)第二級(jí)別,從包恢復(fù)的每個(gè)節(jié)點(diǎn)具有其自己的新存儲(chǔ)器地址,它們的指針都指向在剛才所述的一次通過過程中被恢復(fù)較低級(jí)別的節(jié)點(diǎn)或BOS節(jié)點(diǎn)和EOS節(jié)點(diǎn)??梢圆皇褂靡淮瓮ㄟ^就恢復(fù)Kstore,但隨后在一次通過后必須使用在第一次通過中的某種位置保持器,返回將指針的已丟失的舊地址填充到新地址變換。這樣的迭代過程不可避免地是較慢的,并且會(huì)不必要地復(fù)雜。
在實(shí)施方案中有很大的靈活性。例如,在KStore中,可以實(shí)施asCase表和asResult表作為被鏈接的表。另一個(gè)實(shí)施例中,asCase表和asResult表可被分配為具有可配置大小的連續(xù)存儲(chǔ)器單元的塊,例如但不限于數(shù)組。了解這個(gè)信息對(duì)開始進(jìn)行恢復(fù)是非常重要的。這種組織類型的表示,例如列表可以缺省處理,或作為某種元數(shù)據(jù)指示符放置在包的信息頭,或包節(jié)點(diǎn)被組織成的大包的信息頭或?qū)б?。在任何情形下,一般有設(shè)置在asCase表的開始位置的指向任何asCase表的指針,和指向任何asResult表的指針。優(yōu)選實(shí)施例中,用于處理這種元數(shù)據(jù)的適當(dāng)算法過程由元數(shù)據(jù)本身觸發(fā)。KStore可被組織來保持節(jié)點(diǎn)的asCase鏈路和asResult表,或優(yōu)選地,這樣的表(然而是組織的)只具有指向被存儲(chǔ)在KStore結(jié)構(gòu)中的這些表的指針。存儲(chǔ)在節(jié)點(diǎn)包中的指針表的計(jì)數(shù)值使得能夠以分配適當(dāng)大小的存儲(chǔ)器來恢復(fù)這些包,作為具有適當(dāng)大小的指針表的節(jié)點(diǎn)。因?yàn)榛謴?fù)器可被用于順序地恢復(fù)K,只要考慮恢復(fù)次序,就完全不必要存儲(chǔ)asCase或asResult表,因?yàn)榛謴?fù)器在恢復(fù)期間將創(chuàng)建這些明細(xì)表。我們確實(shí)希望具有適當(dāng)尺寸的存儲(chǔ)器,這是為什么在指針表上保存指針的計(jì)數(shù)值的原因。
在本發(fā)明之前一個(gè)保存和恢復(fù)版本的一個(gè)實(shí)施例中(如美國專利申請(qǐng)No.10/759,466所述),除了創(chuàng)建從新的節(jié)點(diǎn)到從其得出新節(jié)點(diǎn)的節(jié)點(diǎn)的鏈路之外,指向新節(jié)點(diǎn)位置的指針被添加到從其得出新節(jié)點(diǎn)的節(jié)點(diǎn)的鏈接表、asCase和asResult表。指針可被加到列表的末端,列表的始端,或可被插入在列表內(nèi)的某個(gè)地方。另外,可以保持多個(gè)排序的列表。例如,節(jié)點(diǎn)的asCase表可包括順序表,其中除了排序的列表以外,指針還被加到鏈接表的末端,在排序的表中,指針以訪問頻率的順序被保持。可以理解,雖然給出實(shí)例闡述一個(gè)排序的列表和一個(gè)順序表,但本發(fā)明并不限于此,任何數(shù)目的列表和其任何組合都在本發(fā)明的范圍內(nèi)。排序的列表可以按最后的更新、最后的訪問、或更新或訪問的頻率、或通過任何其它適當(dāng)?shù)呐判蚍椒ū慌判?。關(guān)于此結(jié)構(gòu)的信息也可能需要和元數(shù)據(jù)一起被保存,并且它也被認(rèn)為是KStore狀態(tài)變量信息。在本文所描述的新發(fā)明中,完全不需要保持這樣的列表,正如在本說明書的其余部分所述,但如果需要的話,可以在給定的情形下這樣做。但是如果不保持排序表的順序,失去了順序,所以可能出現(xiàn)想要保持順序和使用舊方法而不是本發(fā)明的環(huán)境。作為替代,可以基于一定的基礎(chǔ)恢復(fù)列表順序,例如基于頻率的列表。
在KStore數(shù)據(jù)結(jié)構(gòu)的最優(yōu)選實(shí)施例中,代表較高級(jí)別的根節(jié)點(diǎn)的節(jié)點(diǎn)不包含數(shù)據(jù)或者數(shù)據(jù)或概念的表示;即較高級(jí)別的根節(jié)點(diǎn)只包含指向較低級(jí)別的節(jié)點(diǎn)的指針。不同級(jí)別的根節(jié)點(diǎn)的信息是另一種可被保存的元數(shù)據(jù)。
可以生成任何適當(dāng)數(shù)量的級(jí)別。例如,在文本世界中,級(jí)別可以代表字母、單詞、句子、段落、章節(jié)、書、圖書館等等。可以理解,雖然在示意圖上顯示兩個(gè)級(jí)別的互鎖樹數(shù)據(jù)庫,但本發(fā)明的KStore不局限于此??梢詷?gòu)建任何數(shù)量的級(jí)別的互鎖樹數(shù)據(jù)庫。因?yàn)楸纠恼w是文本,即來自單詞的字母組合(一種級(jí)別的最終產(chǎn)品),本發(fā)明的該實(shí)施例中單詞組合的結(jié)果是詞組或句子(另一種級(jí)別的最終產(chǎn)品)。句子可被組合形成段落,段落可被組合形成章或節(jié)等等。
基本根節(jié)點(diǎn)(傳感器)和與基本根節(jié)點(diǎn)有關(guān)的特定數(shù)值需要被存儲(chǔ),以便正確地恢復(fù)KStore。如果在創(chuàng)建KStore結(jié)構(gòu)的通常過程中,傳感器數(shù)值與節(jié)點(diǎn)無關(guān)地被保存,則返回到基本根節(jié)點(diǎn)的數(shù)值和指針的這些文件可以簡單地被保存(對(duì)于所述指針地址,適合于指針的地址變化)。在傳感器數(shù)值實(shí)際上被存儲(chǔ)在節(jié)點(diǎn)的Kstore中,當(dāng)在保存操作期間保存節(jié)點(diǎn)時(shí),數(shù)值與其它基本根節(jié)點(diǎn)信息一起被保存。因此,很明顯,保存過程適合于被保存的KStore。
此外可以看到,根據(jù)輸入整體,最終產(chǎn)品節(jié)點(diǎn)可以代表除了單詞、詞組、句子等等以外的其它實(shí)體。舉例來說,如果輸入是包括染色體的氨基酸的序列,一個(gè)最終產(chǎn)品可以代表基因或?qū)ε蓟?。在另一個(gè)例子中,像素序列可以具有直線、圓或其它形狀物體的最終產(chǎn)品。
搜索KStore結(jié)構(gòu)是相對(duì)直接的,正如前述專利申請(qǐng)所述,對(duì)于了解如何保存和恢復(fù)簡稱為KStore的互鎖樹數(shù)據(jù)庫,并不需要完全了解如何搜索KStore結(jié)構(gòu)。無論如何,為了便于參考,還是包括了概略說明。
現(xiàn)在考慮圖11的輸入包括例如以下內(nèi)容的數(shù)據(jù)記錄Bill星期二40銷售PABill星期一103 銷售NJBill星期一100 試算PATom 星期一80試算PATom 星期一13試算NJ在本發(fā)明的一個(gè)實(shí)施例中,數(shù)據(jù)組單元由通過分界符,例如但不限于空白字符而分開的信息字段組成。在一個(gè)實(shí)施例中,數(shù)據(jù)組單元從輸入獲得,盡管可以理解,本發(fā)明并不限于如上所述。在輸入數(shù)據(jù)中至今遇到的變量是銷售員姓名(Bill和Tom)、星期幾(星期一,星期二)、物品數(shù)量(40,103,100,80,13)、狀態(tài)(銷售,試算)和州(PA,NJ)。在本發(fā)明的一個(gè)實(shí)施例中,圖11的互鎖樹數(shù)據(jù)庫1000是從此輸入得出的。圖11中,由于空間的原因,節(jié)點(diǎn)的第一部分未示出。例如,雖然節(jié)點(diǎn)1002被標(biāo)記為“Bill”,但節(jié)點(diǎn)1002實(shí)際上代表“BOT-Bill”。雖然節(jié)點(diǎn)1002被標(biāo)記為“Tuesday(星期二)”,但節(jié)點(diǎn)1004實(shí)際上代表“BOT-Bill-Tuesday”,等等。
例如,在本發(fā)明的一個(gè)實(shí)施例中,包括所需序列的路徑的子部件節(jié)點(diǎn)和最終產(chǎn)品節(jié)點(diǎn)可以通過跟隨表示所需序列的特定根節(jié)點(diǎn)的asResult列表中的指針而確定。根節(jié)點(diǎn)的asResult表被訪問,以及在列表中的每個(gè)指針被引導(dǎo)到與該根節(jié)點(diǎn)有關(guān)的子部件節(jié)點(diǎn)。如果最終產(chǎn)品是所需的,則asCase分支樹被引導(dǎo)到分支的葉節(jié)點(diǎn)。
在本發(fā)明的一個(gè)實(shí)施例中,信息請(qǐng)求具有規(guī)定的約束形式(它可被看作為“上下文”或“焦點(diǎn)”,這取決于透視圖)。例如,信息請(qǐng)求可以具有約束條件的列表形式。約束條件的列表可以是網(wǎng)狀的或獨(dú)立的。在本發(fā)明的一個(gè)實(shí)施例中,找到每個(gè)列出的約束條件的最終產(chǎn)品節(jié)點(diǎn)的asResult表,找到對(duì)于每個(gè)約束條件的每個(gè)asResult表內(nèi)的每個(gè)節(jié)點(diǎn)路徑,這些路徑跟隨到它們的最終產(chǎn)品,以及選擇對(duì)于每個(gè)約束條件的每個(gè)asResult表內(nèi)的每個(gè)路徑的最終產(chǎn)品的交叉點(diǎn)。通過首先約束數(shù)據(jù)庫,獲取一組數(shù)據(jù),然后該數(shù)據(jù)組被用作為進(jìn)一步被約束的數(shù)據(jù)組等等而找到網(wǎng)狀約束條件。
邏輯運(yùn)算符可被用于規(guī)定約束條件??梢哉f,人們正在查找表示個(gè)人、地點(diǎn)與(AND)事物的節(jié)點(diǎn),其中AND是表示所有的個(gè)人、地點(diǎn)和事物的組的聯(lián)合體的邏輯運(yùn)算符,即所有的節(jié)點(diǎn)是通過稱為“個(gè)人”、“地點(diǎn)”和“事物”的基本節(jié)點(diǎn)或根節(jié)點(diǎn)來標(biāo)識(shí)的?;ヂ?lián)樹結(jié)構(gòu)給出查詢,由所有的“個(gè)人”AND“地點(diǎn)”是作為(ARE)(另一個(gè)邏輯算子)被約束為如何識(shí)別項(xiàng)目“事物”而進(jìn)行回答的“事物”。如果在構(gòu)建結(jié)構(gòu)時(shí),事物決不指向地點(diǎn),則查詢中不會(huì)發(fā)現(xiàn)所有其它的“事物”,但可以在互鎖樹結(jié)構(gòu)中知道所有的地點(diǎn)。如果人們考慮當(dāng)被合并到結(jié)構(gòu)中的事物,則也會(huì)在查詢中發(fā)現(xiàn)它們。
邏輯運(yùn)算符可以采用許多形式,例如AND,OR,NOT,大于,XNOR,等于,等等,而且它們可以被組合。所有的這樣的邏輯運(yùn)算符和其組合在本發(fā)明中是有用的。比較數(shù)學(xué)表達(dá)式也是可使用的,當(dāng)然這取決于上下文。例如找到已銷售大于100輛汽車的所有銷售員,可以是一個(gè)基于比較數(shù)學(xué)表達(dá)式的查詢,其中該表達(dá)式可以是銷售員銷售的汽車數(shù)>100。
本發(fā)明的一個(gè)實(shí)施例中,聚焦點(diǎn)可被使用來確定被保存的信息。例如,在其中傳感器是字母的二級(jí)數(shù)據(jù)庫的情況下(可能必須參考我們的CATS-ARE-Furry圖,圖12),級(jí)別1的最終產(chǎn)品包括單詞,以及級(jí)別2的最終產(chǎn)品包括句子。如果我們只想要保存其中具有字母A的句子,則我們把K約束限制到與“A”的根節(jié)點(diǎn)有連接的那些節(jié)點(diǎn)。然后必須從A通過其Case鏈路遍歷這些單詞,找出最終產(chǎn)品單詞節(jié)點(diǎn),并為此需要檢驗(yàn)每個(gè)單詞的asResult表。然后,我們遍歷從句子指向的Case鏈路,找出它們可能處在的句子的最終產(chǎn)品,以便找出其中具有字母A的句子。圖12中,對(duì)于A,我們進(jìn)到節(jié)點(diǎn)951和952,分別跟隨Case鏈路連接到這些單詞節(jié)點(diǎn)953和916的末端。這些節(jié)點(diǎn)906和908分別具有指向節(jié)點(diǎn)953和916的asResult指針。從這些節(jié)點(diǎn)的任一項(xiàng)跟隨Case鏈路導(dǎo)致EOS節(jié)點(diǎn)902。因此,對(duì)于本例,我們保存圖12上的所有節(jié)點(diǎn),但明顯地,如果我們具有其它的字母和沒有其中有A的單詞,則這些單詞在這類局部保存中將被丟失。
在一個(gè)實(shí)施例中,通過跟隨具有級(jí)別開始指示符作為其根節(jié)點(diǎn)的樹,可以找到從約束條件開始的所有最終產(chǎn)品(例如,可以找到從特定字母開始的所有單詞)。同樣地,可以找到具有規(guī)定的約束條件,或在特定位置處的特定約束條件的所有最終產(chǎn)品,(例如,在其中具有特定字母的所有單詞,或在特定的列中具有特定字母的所有單詞)。同樣地,通過跟隨具有級(jí)別結(jié)束指示符作為其根節(jié)點(diǎn)的樹,可以找到以特定的約束條件結(jié)束的所有最終產(chǎn)品(例如,在以特定字母結(jié)束的所有單詞)。可以規(guī)定多個(gè)約束條件和/或聚焦點(diǎn)。
對(duì)于局部保存,可能需要保存任何約束條件來表示局部保存的限制。因此,參看圖10的KStore,把“來自星期一的所有的信息”放置在信息頭中表示所保存的KStore只包含來自星期一的信息。
現(xiàn)在參照?qǐng)D11,假設(shè)需要對(duì)于“在星期二銷售物品的總數(shù)是多少”的問題的答案。本領(lǐng)域技術(shù)人員將會(huì)看到,在本發(fā)明的一個(gè)實(shí)施例中,不用遍歷在整個(gè)數(shù)據(jù)庫中的所有節(jié)點(diǎn),恢復(fù)此信息只需要恢復(fù)根節(jié)點(diǎn)1054和1055的asResult表。連接到最終產(chǎn)品節(jié)點(diǎn)1030的路徑5被遍歷,因?yàn)橛纱硇瞧诙母?jié)點(diǎn)1054指向節(jié)點(diǎn)1004。連接到最終產(chǎn)品節(jié)點(diǎn)1040的路徑4被遍歷,因?yàn)橛纱礓N售的根節(jié)點(diǎn)1055指向節(jié)點(diǎn)1028。路徑5也被遍歷,因?yàn)橛筛?jié)點(diǎn)1055銷售還指向節(jié)點(diǎn)1026。路徑1 1080,2 1070和3 1060不必被遍歷。沿著根節(jié)點(diǎn)1054和1055指向的路徑返回的最終產(chǎn)品組的交叉點(diǎn)包括表示“Bill 星期二 40 銷售 PA”的節(jié)點(diǎn)1030。
通過首先約束數(shù)據(jù)庫恢復(fù)一個(gè)數(shù)據(jù)組,然后該數(shù)據(jù)組被用作為進(jìn)一步被約束的數(shù)據(jù)組等等,來找到網(wǎng)狀的約束條件。為了進(jìn)行網(wǎng)狀搜索,從來自根節(jié)點(diǎn)1065的一個(gè)約束條件,例如SOLD開始。從兩個(gè)標(biāo)識(shí)的最終產(chǎn)品節(jié)點(diǎn)1030和1040往回追蹤,從節(jié)點(diǎn)1030的Case路徑僅僅到達(dá)具有節(jié)點(diǎn)星期二,1004的一個(gè)最終產(chǎn)品。因此,我們通過這個(gè)替換過程得到相同的結(jié)果。
現(xiàn)在參考圖3,其中按照本發(fā)明的實(shí)施例所述,包含需要存儲(chǔ)來自節(jié)點(diǎn)信息的字段的節(jié)點(diǎn)包。類型2節(jié)點(diǎn)包220的第一字段是包長度字段211。這個(gè)字段不是絕對(duì)需要的,但對(duì)于在把包恢復(fù)到節(jié)點(diǎn)時(shí)必須進(jìn)行的過程是有用的,其給出下一個(gè)包將從哪里開始的指示。我們將顯示在所有類型的包中的該字段,雖然在大多數(shù)情況下,對(duì)于包的每個(gè)字段,包尺寸將被固定到一個(gè)存儲(chǔ)器地址。下一個(gè)字段是Case指針字段212,它當(dāng)然涉及到指向Case節(jié)點(diǎn),如圖9中節(jié)點(diǎn)30的指針。下一個(gè)字段是包含從圖9的節(jié)點(diǎn)指向Result節(jié)點(diǎn)的指針的Result指針213。附加字段214在這里為了簡化起見被縮略,其可包括任何附加字段以及圖9中節(jié)點(diǎn)30的數(shù)值字段。字段215包含舊節(jié)點(diǎn)地址。
類型1節(jié)點(diǎn)包200如圖4所示。其具有相應(yīng)的字段,用于包長度201、Case指針202、Result指針203、附加字段204和舊節(jié)點(diǎn)地址207。其還具有用于asCase和asResult指針表計(jì)數(shù)值205和206的字段。這些計(jì)數(shù)值可被用于幫助確定在進(jìn)行恢復(fù)時(shí)需要分配的存儲(chǔ)器的總尺寸。如前所述,BOT和子部件節(jié)點(diǎn)具有asCase指針表,只有根節(jié)點(diǎn)具有asResult表,這樣實(shí)際上只需要字段205和206的一個(gè)計(jì)數(shù)值,但是如果使用類型1節(jié)點(diǎn),則具有把節(jié)點(diǎn)處理成包的更簡單算法。為了清晰起見,規(guī)定根節(jié)點(diǎn)為基本根節(jié)點(diǎn)(但不是作為一種基本根節(jié)點(diǎn)類型的BOT)或最終產(chǎn)品節(jié)點(diǎn)。
然而,在可以使用類型1節(jié)點(diǎn)包的任何情況下,也可以用類型3節(jié)點(diǎn)包來替代它們,類型3節(jié)點(diǎn)包具有單個(gè)字段“指針表計(jì)數(shù)值”表計(jì)數(shù)值,來保持asResult或asCase表指針的計(jì)數(shù)值。因此,圖5中,由任何節(jié)點(diǎn)組成的包可以類似于包230,其具有包長度字段231、Case指針字段232、Result指針字段233、附加字段234、指針表計(jì)數(shù)字段235和節(jié)點(diǎn)地址字段237。
正如專利申請(qǐng)No.10/385,421和No.10/666,382的互鎖樹數(shù)據(jù)庫的優(yōu)選實(shí)施例中所述,asCase指針表以及asResult指針表本身沒有直接存儲(chǔ)在節(jié)點(diǎn),在節(jié)點(diǎn)中的指針表示節(jié)點(diǎn)中存儲(chǔ)列表的區(qū)域。然而,在美國專利申請(qǐng)No.10/759,466中描述的第一個(gè)保存和恢復(fù)的發(fā)明中,優(yōu)選保存具有其地址的節(jié)點(diǎn)的asCase指針表。在使用優(yōu)選實(shí)施例來保存每個(gè)節(jié)點(diǎn)以便能夠恢復(fù)互鎖樹數(shù)據(jù)庫結(jié)構(gòu)時(shí),本發(fā)明中沒有保存asCase和asResul表。反過來,恢復(fù)過程的優(yōu)選實(shí)施例不必依賴于保存的asCase和asResult指針表而進(jìn)行恢復(fù)。
當(dāng)前發(fā)明也可以利用三種不同類型的節(jié)點(diǎn)包。第一種類型,類型1節(jié)點(diǎn)包,包含asCase指針表計(jì)數(shù)值和asResult指針表計(jì)數(shù)值。類型1的變量,被稱為類型3,包含一個(gè)指針表計(jì)數(shù)值,而不是兩個(gè)指針表計(jì)數(shù)值(因?yàn)槠渲幸粋€(gè)是零值)。最后一種類型,類型2,根本沒有任何指針表計(jì)數(shù)值。因此,形成類型1和3的包的節(jié)點(diǎn)將具有asCase和/或asResul表,而形成類型2的節(jié)點(diǎn)則沒有。為了得到這些計(jì)數(shù)值,必須進(jìn)到存儲(chǔ)指針表的任何地方,如果在鏈接的明細(xì)表中,通過跟隨鏈路,或通過在鏈接表中某些頭信息獲得該表中的指針計(jì)數(shù)值。因此,由于它減少了一個(gè)或更多的處理步驟,通常優(yōu)選使用不需要使用任何指針表的類型2包。另外,如果類型1節(jié)點(diǎn)包被構(gòu)建,則將獲得具有asCase或asResult指針表的計(jì)數(shù)值,或者兩個(gè)都沒有。因此,我們也允許使用類型3節(jié)點(diǎn)包,它把無論哪種類型的非零計(jì)數(shù)值放置在被稱為指針表計(jì)數(shù)值的字段中。另外,雖然可以看到,任一個(gè)節(jié)點(diǎn)包類型可被交換地利用,但asCase和asResul表的類型和尺寸會(huì)出現(xiàn)一種情況,其中一種節(jié)點(diǎn)包類型方案比起其它包類型是更有效的。如果asCase和asResult指針表通過數(shù)組實(shí)施,由實(shí)驗(yàn)確定是相對(duì)較大,或由靜態(tài)數(shù)據(jù)庫構(gòu)建,則應(yīng)當(dāng)使用包含包長度、任何附加字段、Case指針、Result指針,和指針表計(jì)數(shù)值或asCase和asResult指針表計(jì)數(shù)值以及舊節(jié)點(diǎn)地址的類型1或類型3節(jié)點(diǎn)包。如果asCase和asResult指針表使用短的鏈接表,由實(shí)驗(yàn)確定是相對(duì)較小,或由動(dòng)態(tài)數(shù)據(jù)庫構(gòu)建,則可以使用包含包長度、任何附加字段、Case指針、Result指針、和舊節(jié)點(diǎn)地址的類型2節(jié)點(diǎn)包。
應(yīng)當(dāng)指出,節(jié)點(diǎn)的類型(因此,即指針表計(jì)數(shù)值是asCase還是asResult)當(dāng)然可以通過它被鏈接到的內(nèi)容和鏈接到它的內(nèi)容而確定。
當(dāng)為恢復(fù)的K分配所需存儲(chǔ)器時(shí),使用與初始創(chuàng)建K時(shí)所進(jìn)行的過程相同的過程。當(dāng)我們需要時(shí),為鏈接表分配用于新鏈路的存儲(chǔ)器。對(duì)于數(shù)組,從初始大小開始,然后如有必要,重新增加尺寸。
也可能具有保存子程序,其創(chuàng)建兩種類型的包,類型1和類型2或類型3和類型2,其中對(duì)于子部件節(jié)點(diǎn)使用類型2,對(duì)于具有asCase或asResult表指針的節(jié)點(diǎn)使用類型1或3??梢詢H僅具有算法,建立包檢驗(yàn),以便根據(jù)節(jié)點(diǎn)的讀出查明哪種類型的包是最佳的。為了清楚起見,在任何需要有組合的情形下最好不組合使用類型1與類型3包,但我們應(yīng)當(dāng)指出,由于前述原因,最好不在單個(gè)保存的K中組合兩種類型的節(jié)點(diǎn)包。子部件節(jié)點(diǎn)具有asCase表,然而,這些表更可能比基本節(jié)點(diǎn)或最終產(chǎn)品節(jié)點(diǎn)的表更小。所以,類型2可能更適用于大多數(shù)情況下的節(jié)點(diǎn)。
在熟悉待保存單元的基本結(jié)構(gòu)后,現(xiàn)在說明進(jìn)行保存的過程。
現(xiàn)在參考圖6,其中流程圖70示出了本發(fā)明的保存部分的優(yōu)選實(shí)施例。當(dāng)用戶或系統(tǒng)決定初始化保存時(shí),從步驟71開始。作出決定或表示在查詢73中期望局部保存還是全部保存。在構(gòu)建KStore時(shí),可以創(chuàng)建一組元數(shù)據(jù)72,描述所考慮的特定KStore事例。假設(shè)選擇局部保存,根據(jù)所需尺寸、根節(jié)點(diǎn)的具體部分和保存所需的KStore部分的其它方面的用戶輸入74(如果它來自自動(dòng)系統(tǒng),則也可以被認(rèn)為是用戶輸入)可以用于該過程。
在步驟75中,選擇至少三種方法中的一種方法,從而能夠保存KStore數(shù)據(jù)結(jié)構(gòu)。如果不是局部保存,則而不用關(guān)于KStore數(shù)據(jù)結(jié)構(gòu)的約束條件的任何用戶輸入就可選擇方法。用戶可以根據(jù)KStore的已知參數(shù)進(jìn)行選擇或者為用戶選擇。例如,如果知道K具有非常大的asCase表,則優(yōu)選的保存方法是允許在恢復(fù)過程中重建這些表,因此使得對(duì)于所有的節(jié)點(diǎn)選擇類型2節(jié)點(diǎn)包,而不需要跟蹤這些表。用戶可以選擇更復(fù)雜的保存算法,它檢驗(yàn)每個(gè)節(jié)點(diǎn),查看該節(jié)點(diǎn)是否asCase表指針或?qū)τ赼sResult指針具有非零值,并選擇在數(shù)值是非零值的節(jié)點(diǎn)構(gòu)建類型1或類型3節(jié)點(diǎn)包,但在數(shù)值是零值的地方對(duì)于這些節(jié)點(diǎn)構(gòu)建類型2節(jié)點(diǎn)包?;蛘咴摲椒梢赃x擇只使用類型1或類型3節(jié)點(diǎn)包,并在所檢查的節(jié)點(diǎn)中沒有asCase或asResul表指針的地方存儲(chǔ)零值。方法選擇的另一個(gè)主要方面是確定遍歷K的次序,找出待形成包的每個(gè)節(jié)點(diǎn)。
雖然在本發(fā)明的優(yōu)選形式中可能在稍后這樣做(例如在步驟84,或這個(gè)步驟附近),但包括元數(shù)據(jù)的各種方面的支持結(jié)構(gòu)首先應(yīng)當(dāng)在步驟76被保存。在這個(gè)步驟中,可以把包格式的信息保存在如圖13所述的包內(nèi),或者可以用本領(lǐng)域技術(shù)人員認(rèn)為比較便利的另一種方式保存該信息。如果確實(shí)使用包技術(shù)內(nèi)的包,或如果保存在上述層中,或如果做到上述兩項(xiàng),則對(duì)于每層進(jìn)行以下的步驟,然后返回到步驟76開始保存下一層。在保存下一層時(shí),我們?cè)俅伪4嬗嘘P(guān)該下一層中所有節(jié)點(diǎn)的任何信息,之后再次移動(dòng)到步驟77,進(jìn)行保存這個(gè)層中的所有節(jié)點(diǎn)的迭代過程(或至少屬于包的種類的所有節(jié)點(diǎn),然后是可以從這個(gè)層構(gòu)建的其它包中的節(jié)點(diǎn))。在步驟77,保存KStore數(shù)據(jù)結(jié)構(gòu)的節(jié)點(diǎn)和塊。如果選擇當(dāng)前非優(yōu)選的方法來保存KStore結(jié)構(gòu),則有可能在一個(gè)步驟內(nèi)完成步驟77;如果存儲(chǔ)器圖像可以用所有的存儲(chǔ)器地址不受損傷地保存,并被恢復(fù)到相同的位置,則步驟77可以作為單個(gè)步驟完成。但是,這在部分保存的情形下多半是不可能的,而且在KStore結(jié)構(gòu)從一個(gè)計(jì)算機(jī)移動(dòng)到另一個(gè)計(jì)算機(jī)或其中對(duì)于所保存的結(jié)構(gòu)可被恢復(fù)到主存儲(chǔ)器內(nèi)精確的位置缺乏控制的情形下也是不可能的。在步驟77,第一步驟從由所選擇的方法建議的第一節(jié)點(diǎn)開始,并在步驟78從該節(jié)點(diǎn)的主存儲(chǔ)器找出舊地址,然后在步驟79,連同節(jié)點(diǎn)的特定字段一起保存該舊地址,這取決于所利用的節(jié)點(diǎn)包類型。如果使用類型1節(jié)點(diǎn),則可以把Case指針、Result指針、附加字段、asCase指針表計(jì)數(shù)值、asResult指針表計(jì)數(shù)值和舊地址保存到類型1包。如果使用類型2節(jié)點(diǎn)包,則可以保存Case指針、Result指針、附加字段和舊地址。在優(yōu)選實(shí)施例中,asCase和asResult表不被保存,但在下述優(yōu)選恢復(fù)過程中被重建。如果使用類型3節(jié)點(diǎn),則可以保存Case指針、Result指針、附加字段、Pointer List Count指針表計(jì)數(shù)值和舊地址。在此時(shí)確定對(duì)于該節(jié)點(diǎn)保存的包的優(yōu)選尺寸,以使得所存儲(chǔ)的數(shù)據(jù)結(jié)構(gòu)的最終尺寸將包含信息頭,其元數(shù)據(jù)資源,及以串行方式或其它類似的結(jié)構(gòu)跟隨在后面的數(shù)據(jù)包。因此,對(duì)于每個(gè)包完成步驟81,當(dāng)它們準(zhǔn)備好時(shí),通過簡單地相加每個(gè)包的尺寸,可以立即找到包的所有尺寸的總和。
如果KStore是使用計(jì)算機(jī)系統(tǒng)的唯一應(yīng)用程序的情況下,可以了解沒有任何中間I/O功能,和以原子方式完成保存。然而,這通常不是當(dāng)今的計(jì)算機(jī)系統(tǒng)環(huán)境。因此,圖3-5顯示KStore包的中間數(shù)據(jù)結(jié)構(gòu),且類型1-3的信息頭顯示類型2的KStore包的中間數(shù)據(jù)結(jié)構(gòu),以及準(zhǔn)備好以原子方式(一次一個(gè)包)保存到盤驅(qū)動(dòng)或其它永久數(shù)據(jù)存儲(chǔ)裝置的信息頭。
在步驟79和81中準(zhǔn)備好節(jié)點(diǎn)包和確定節(jié)點(diǎn)包的尺寸后,必須回答是否還有另外的節(jié)點(diǎn)按照所選擇的方法和/或在步驟74選擇的約束條件內(nèi)保存到KStore內(nèi)的問題。假設(shè)回答是“yes(是)”,步驟82按照保存算法的方法,移動(dòng)到下一個(gè)節(jié)點(diǎn)。稍后描述這個(gè)方法。
如果沒有節(jié)點(diǎn)要保存,則需要被恢復(fù)的KStore結(jié)構(gòu)的總尺寸可以在步驟84被確定,接著KStore結(jié)構(gòu)準(zhǔn)備好被保存,并可以被保存。如果使用計(jì)數(shù)器的話,這個(gè)步驟可以在每次創(chuàng)建節(jié)點(diǎn)包時(shí)以局部的方式進(jìn)行,在這種情況下,此步驟可以僅讀出計(jì)數(shù)器中的總和。為了編程容易,可以給所有的根節(jié)點(diǎn)和EOT與BOT節(jié)點(diǎn)加索引號(hào)或標(biāo)簽,由此可以在恢復(fù)過程中首先找到這些節(jié)點(diǎn),能夠首先恢復(fù)具有asCase和asResult表的節(jié)點(diǎn),因此簡化了恢復(fù)過程。
正如以上參照步驟75的概述,可以有幾種方式進(jìn)行保存過程。所選擇的方法可以被適當(dāng)?shù)剡x擇。假設(shè)我們不使用整個(gè)存儲(chǔ)器交換過程,而是常規(guī)保存,處理過程在把一個(gè)節(jié)點(diǎn)包或在一組包寫入到永久存儲(chǔ)裝置之前將具有至少三個(gè)步驟。將保存支持結(jié)構(gòu),這可以是自動(dòng)的或用戶輔助的過程。將必須有遍歷步驟,其中處理過程訪問每個(gè)相關(guān)的節(jié)點(diǎn)(某些節(jié)點(diǎn)可被排除在部分保存之外,否則基本上所有節(jié)點(diǎn)將被訪問)。然后來自每個(gè)節(jié)點(diǎn)的信息必須被變換成包用于保存。然后,可以進(jìn)行保存過程,利用由硬件和軟件在這個(gè)結(jié)構(gòu)運(yùn)行要求時(shí)可能需要利用的任何內(nèi)務(wù)整理系統(tǒng)。
應(yīng)當(dāng)指出,如果通過從一個(gè)級(jí)別開始,然后移到下一個(gè)較高的級(jí)別而進(jìn)行保存,則恢復(fù)過程可以在一次通過中執(zhí)行,而如果使用不保存指向asCase和asResult節(jié)點(diǎn)(這是在本專利中描述的所有的節(jié)點(diǎn))的實(shí)際指針的任何節(jié)點(diǎn)包類型,不保存會(huì)使得不用迭代過程而很難重新組裝指針。
支持結(jié)構(gòu)的保存首先需要確定哪些信息結(jié)構(gòu)用互鎖樹數(shù)據(jù)庫保存。這可包括結(jié)構(gòu),例如但不限于;一個(gè)文件頭包含創(chuàng)建日期、KStore文件ID等、基本根節(jié)點(diǎn)的列表,(或傳感器),表示BOT-EOT單一體的字符串表,或者或許僅僅被包含在互聯(lián)樹數(shù)據(jù)結(jié)構(gòu)中的目標(biāo)節(jié)點(diǎn)(單一體)的結(jié)尾表,例如可能描述其所處的基礎(chǔ)OS或計(jì)算機(jī)系統(tǒng)的數(shù)據(jù)結(jié)構(gòu)的元數(shù)據(jù),如果有的話,密碼保護(hù),指針表在節(jié)點(diǎn)中如何排序、以及如果需要恢復(fù)結(jié)構(gòu)或確定待保存結(jié)構(gòu)中的信息地址的任何特性信息。另外,信息頭可保存K狀態(tài)變量(例如在節(jié)點(diǎn)中支持多少附加字段,正在進(jìn)行哪種查詢,如何構(gòu)建asCase和asResult表,數(shù)據(jù)源,交換開關(guān)和數(shù)據(jù)流)和/或數(shù)據(jù)源描述符,例如表示哪些源接受查詢和/或從哪些源得到信息等等的鉤。當(dāng)然,所有的這種數(shù)據(jù)應(yīng)當(dāng)被格式化,用于OS所需的寫入和獲取,以及當(dāng)前使用的計(jì)算機(jī)系統(tǒng)的其它特性。另外,如果KStore具有XML格式或訪問,則該類型信息也應(yīng)當(dāng)被存儲(chǔ),因?yàn)镵Store本身(可能)不知道該信息本身。
因此,為了列出可能在信息頭中發(fā)現(xiàn)的項(xiàng)目,信息頭記錄可能包含創(chuàng)建日期創(chuàng)建保存文件的保存程序的版本/周期硬件配置(CPU類型,等等)OS--操作系統(tǒng)基礎(chǔ)結(jié)構(gòu)信息(字段的尺寸)
簽名結(jié)構(gòu)信息,如果沒有保存“其他”結(jié)構(gòu)信息傳感器級(jí)別和相關(guān)的界定符元數(shù)據(jù)-字段類型(包括用戶規(guī)定的類型)、列描述、許可證等等KState變量-交換開關(guān)、數(shù)據(jù)流、簽名結(jié)構(gòu)信息(例如對(duì)于asCase表的特殊順序)數(shù)據(jù)源(類型、位置、附屬數(shù)據(jù)流)--用于學(xué)習(xí)新知識(shí)安全(管理員&用戶密碼、許可證、保存的查詢位置、觸發(fā)器)現(xiàn)在將描述用于保存KStore互鎖樹數(shù)據(jù)庫結(jié)構(gòu)的遍歷的替換方法。
遍歷互鎖樹數(shù)據(jù)庫訪問每個(gè)節(jié)點(diǎn)從初始節(jié)點(diǎn)開始,使用一個(gè)沿著每個(gè)初級(jí)根節(jié)點(diǎn)的asCase路徑的順序樹。例如,如果從圖11的初級(jí)根節(jié)點(diǎn)BOT 1050開始,則首先進(jìn)到Bill,得到他的所有到達(dá)EOT節(jié)點(diǎn)1030,1040和1060的路徑,然后進(jìn)到Tom和他的EOT節(jié)點(diǎn),直至到達(dá)EOT節(jié)點(diǎn)1061的所有鏈路為止。這時(shí),除了基本根節(jié)點(diǎn)以外的所有節(jié)點(diǎn)都已被訪問??紤]具有基本根節(jié)點(diǎn)數(shù)值和指針的文件,可以用該方式訪問。圖12中可以看到一個(gè)更好的例子。在該圖的優(yōu)選實(shí)施例中,從第一級(jí)別901開始,首先保存?zhèn)鞲衅?基本根節(jié)點(diǎn)),然后第一級(jí)別(單詞),然后下一個(gè)級(jí)別(句子),等等。保存?zhèn)鞲衅鰿,A,T,S,R,E,F(xiàn),U,Y以及BOT 901和EOT 903。這些具有所有的asCase和asResult指針,因此如果它在保存期間被構(gòu)建的話,KStore的所有舊地址將被輸入到舊地址列表。接著,我們保存對(duì)于單詞CATS,ARE和FURRY的節(jié)點(diǎn),其包括所有的子部件節(jié)點(diǎn)。接下來我們保存來自第二級(jí)別912的BOS和EOS根節(jié)點(diǎn)。本文中,我們保存904與905之間的新節(jié)點(diǎn),最后是句子層912的最終產(chǎn)品節(jié)點(diǎn),節(jié)點(diǎn)902。
遍歷互鎖樹數(shù)據(jù)庫以便從最終產(chǎn)品節(jié)點(diǎn)訪問每個(gè)節(jié)點(diǎn)是第二個(gè)方法。它們都是通過EOT節(jié)點(diǎn)1061可訪問的。因此,通過最終產(chǎn)品節(jié)點(diǎn)的所需約束條件表,通過遍歷KStore進(jìn)行部分保存。
遍歷互鎖樹數(shù)據(jù)庫以便從根節(jié)點(diǎn)訪問每個(gè)節(jié)點(diǎn)是遍歷互鎖樹數(shù)據(jù)庫結(jié)構(gòu)的第三個(gè)方法。因此,可以通過根節(jié)點(diǎn)的所需約束條件表,遍歷KStore,接著通過來自所需約束條件中的每個(gè)根節(jié)點(diǎn)的所有asCase鏈路,而進(jìn)行部分保存。
恢復(fù)過程流程圖7顯示恢復(fù)過程320的優(yōu)選實(shí)施例,直至過程完成為止。如果需要,其可被嚴(yán)密地嵌入到某些其它處理過程。在恢復(fù)過程的優(yōu)選實(shí)施例中,在恢復(fù)互鎖樹數(shù)據(jù)庫(這里縮寫為K)之前首先讀出所需要的支持結(jié)構(gòu)321。這可包括例如哪些粒子對(duì)于這個(gè)K是已知的(有時(shí)稱為基本根節(jié)點(diǎn)或傳感器或傳感器列表),對(duì)于K,需要在存儲(chǔ)器中分配什么尺寸,是否有可為K定址的Kengine可處理的內(nèi)部觸發(fā)器和其它功能等等之類信息。如果用戶總是將相同的支持結(jié)構(gòu)恢復(fù)到相同種類的KStore,則這個(gè)步驟可能是多余的,假設(shè)每次用相同的支持結(jié)構(gòu)被恢復(fù)。假定KStore當(dāng)前沒有廣泛的使用,優(yōu)選使用處理過程321作為標(biāo)準(zhǔn),除非和直至這時(shí)間或?qū)τ谠擃惌h(huán)境不再是有用的。為了恢復(fù)互鎖樹數(shù)據(jù)庫,必須恢復(fù)所有的節(jié)點(diǎn)包,因?yàn)樗鼈儽豁樞虻卮鎯?chǔ),最容易的恢復(fù)方式是以與它們?cè)诒4鏁r(shí)被創(chuàng)建次序相同的次序的串行恢復(fù)。優(yōu)選從具有早已恢復(fù)的asCase或asResult表參考節(jié)點(diǎn)的這些節(jié)點(diǎn)開始,通過避免在恢復(fù)期間用于從在指向舊存儲(chǔ)器位置的指針中的以前的地址改變到新的存儲(chǔ)器位置的迭代搜索而加速恢復(fù)過程。編程領(lǐng)域技術(shù)人員能夠理解所述幾種恢復(fù)操作的方式,而不依靠不適當(dāng)?shù)膶?shí)驗(yàn)來創(chuàng)建執(zhí)行這些方式所需要的代碼,特別是一起閱讀以下的幾個(gè)段落時(shí)。
因此,首先讀取第一包節(jié)點(diǎn)322,并使用所工作的計(jì)算機(jī)的操作系統(tǒng),在步驟323為此新節(jié)點(diǎn)分配存儲(chǔ)器。當(dāng)為節(jié)點(diǎn)323分配存儲(chǔ)器之后,創(chuàng)建或開始創(chuàng)建324轉(zhuǎn)換表,該節(jié)點(diǎn)的轉(zhuǎn)換表入口通過節(jié)點(diǎn)包存儲(chǔ)的舊存儲(chǔ)器地址和由操作系統(tǒng)或計(jì)算機(jī)系統(tǒng)剛分配給這個(gè)節(jié)點(diǎn)的新存儲(chǔ)器地址(見圖7)。
另一方面,應(yīng)當(dāng)看到,對(duì)于可以透明地和可靠地移動(dòng)整塊存儲(chǔ)器的機(jī)器和操作系統(tǒng),數(shù)據(jù)庫的尺寸作為分配給相同存儲(chǔ)器地址的一個(gè)單元,在該類系統(tǒng)中,不需要具體保存和恢復(fù)過程,盡管其對(duì)于部分保存和減小整塊保存所需的存儲(chǔ)裝置的尺寸是很有用的。但是,目前有一些已經(jīng)被討論但沒有完全實(shí)施的存儲(chǔ)器文件類型,因此,需要求助于更復(fù)雜的保存和恢復(fù)機(jī)制,例如本發(fā)明所述。
一旦包含節(jié)點(diǎn)的舊地址和新地址的節(jié)點(diǎn)表入目被創(chuàng)建和輸入到轉(zhuǎn)換表324,就進(jìn)到步驟325,其中轉(zhuǎn)換Case和Result指針,并把轉(zhuǎn)換后的Case和Result指針連同任何附加字段一起存儲(chǔ)在新節(jié)點(diǎn)。對(duì)于這個(gè)恢復(fù)版本,立即查找Case和Result指針的舊地址。傾向以這樣的次序保存它們,由此在需要它們之前出現(xiàn)在轉(zhuǎn)換地址表中。
如上所述,本發(fā)明的優(yōu)選實(shí)施例不保存asCase表和asResult表,而是或者不保存與它們有關(guān)的任何東西,或者作為替代,把指針計(jì)數(shù)值保存在列表中。為了重建asCase表和asResult表,及其各個(gè)指針,恢復(fù)過程進(jìn)到步驟326。步驟326中,恢復(fù)過程把新節(jié)點(diǎn)地址存儲(chǔ)在Case節(jié)點(diǎn)的asCase表,并把新節(jié)點(diǎn)地址存儲(chǔ)在被恢復(fù)的節(jié)點(diǎn)的Result節(jié)點(diǎn)的asResult表中。待恢復(fù)的第一節(jié)點(diǎn)的新地址,即EOT節(jié)點(diǎn)和其它類型的基本根節(jié)點(diǎn),優(yōu)選地在步驟321的一部分被建立,由此當(dāng)從節(jié)點(diǎn)包建立新的節(jié)點(diǎn)時(shí),可以直接指向這些EOT節(jié)點(diǎn)和基本根節(jié)點(diǎn)的新地址,而不需要第二迭代過程,雖然這樣的處理過程并不超出本發(fā)明的范圍,只是不是優(yōu)選過程。
一旦新節(jié)點(diǎn)地址被存儲(chǔ)在asCase和asResult表中,恢復(fù)過程的優(yōu)選方法就進(jìn)到步驟327,由此確定所討論的節(jié)點(diǎn)包是否為待恢復(fù)的最后的節(jié)點(diǎn)包。如果節(jié)點(diǎn)包不是待恢復(fù)的最后節(jié)點(diǎn)包,則過程在步驟322繼續(xù)進(jìn)行,并且處理新的節(jié)點(diǎn)包。如果最后的節(jié)點(diǎn)包已被處理,則可以在步驟327移動(dòng)到問題之外。這是一個(gè)迭代過程,其連續(xù)進(jìn)行直至問題327達(dá)到最后的節(jié)點(diǎn)包為止。這時(shí),互聯(lián)樹數(shù)據(jù)結(jié)構(gòu)應(yīng)當(dāng)被恢復(fù)到新的存儲(chǔ)器。
圖8示出了地址轉(zhuǎn)換表40。圖中示出了相應(yīng)于新存儲(chǔ)器地址表42的舊存儲(chǔ)器地址表41,由此例如舊存儲(chǔ)器地址1(41a)將對(duì)應(yīng)于新的存儲(chǔ)器地址1(42a)等等。因此,每次使用舊的存儲(chǔ)器地址時(shí),即被恢復(fù),被恢復(fù)的節(jié)點(diǎn)/包被裝載到的新地址被保持在存儲(chǔ)器地址轉(zhuǎn)換表40中,并鏈接到舊存儲(chǔ)器地址。優(yōu)選地在步驟328中完成這個(gè)表之后,建立了可能需要參考這個(gè)地址轉(zhuǎn)換表的任何附加支持結(jié)構(gòu)。此時(shí),已具有恢復(fù)的K,并且可以退出過程329。
另外,在重建KStore,即恢復(fù)它時(shí),可以首先恢復(fù)來自基本根節(jié)點(diǎn)的數(shù)據(jù),因此使得恢復(fù)過程更快速地執(zhí)行,因?yàn)榛靖?jié)點(diǎn)的建立將快速地建立大的鏈接網(wǎng)絡(luò)。
上述方法和系統(tǒng)可以以存儲(chǔ)在計(jì)算機(jī)可讀媒體上的程序代碼(即,指令)被實(shí)施,例如軟盤、CD-ROM、DVD-ROM、DVD-RAM、硬盤驅(qū)動(dòng)、或任何其它機(jī)器可讀的貯存媒體,包括還可得到的光學(xué)和納米技術(shù)貯存裝置等等,因?yàn)槊襟w既不能改變結(jié)構(gòu)的操作,也不能改變本文描述的方法。在所有的數(shù)據(jù)貯存裝置中,當(dāng)程序代碼被裝載在例如計(jì)算機(jī)的機(jī)器并被執(zhí)行時(shí),此機(jī)器變?yōu)橛糜趯?shí)踐本發(fā)明的方法的設(shè)備,并提供如這里描述的本發(fā)明的系統(tǒng)的形式。本發(fā)明也可以以程序代碼的形式被實(shí)施,該程序代碼通過RF或某些傳輸媒體,例如通過電線或電纜,通過光纖或透明光學(xué)裝置,通過包括因特網(wǎng)或內(nèi)聯(lián)網(wǎng)的網(wǎng)絡(luò),或經(jīng)由任何其它傳輸形式被傳送,其中當(dāng)程序代碼被接收和被裝載在例如計(jì)算機(jī)的機(jī)器,并且被執(zhí)行時(shí),機(jī)器變?yōu)橛糜趯?shí)踐本發(fā)明的方法的設(shè)備,并且提供如這里描述的本發(fā)明的系統(tǒng)的形式。當(dāng)在通用處理器上實(shí)施時(shí),程序代碼與處理器相組合,提供類似于特定邏輯電路操作的專用設(shè)備,這些邏輯電路本身可被用于本發(fā)明。程序代碼可以用高級(jí)別編程語言,例如C,C++,或Java實(shí)施。作為替代,程序代碼可以用匯編或機(jī)器語言實(shí)施。在任何情況下,語言可以是匯編的或釋譯的語言。
應(yīng)當(dāng)指出,上述的例子僅僅起到說明的作用,而決不能看作為本發(fā)明的限制。例如,KStore互鎖樹數(shù)據(jù)庫可以通過使用面向?qū)ο蠹夹g(shù)、程序過程技術(shù),其混合技術(shù),或任何其它適當(dāng)?shù)姆椒▉韺?shí)施。而且,盡管所示例子顯示出被存儲(chǔ)在計(jì)算機(jī)系統(tǒng)的存儲(chǔ)器的數(shù)據(jù)組單元,但本領(lǐng)域技術(shù)人員可以理解,此功能可以用許多不同的方式實(shí)施,以及可被用于專用設(shè)備和通用計(jì)算機(jī)系統(tǒng)。對(duì)于設(shè)想的許多不同的實(shí)施例,本發(fā)明打算使用被存儲(chǔ)在多個(gè)遠(yuǎn)程機(jī)器上的許多不同整體的許多不同數(shù)據(jù)單元組。
權(quán)利要求
1.一種用存儲(chǔ)器保存互鎖樹數(shù)據(jù)庫的方法,其中所述互鎖樹數(shù)據(jù)庫具有至少一個(gè)BOT節(jié)點(diǎn)、至少一個(gè)子部件節(jié)點(diǎn)和至少多個(gè)根節(jié)點(diǎn),其中所述BOT節(jié)點(diǎn)具有指向子部件節(jié)點(diǎn)的asCase指針表,其中所述子部件節(jié)點(diǎn)具有指向其它子部件節(jié)點(diǎn)的asCase指針表,以及其中所述根節(jié)點(diǎn)具有指向依賴于所述BOT節(jié)點(diǎn)的子部件節(jié)點(diǎn)的asResult指針表,其中所述方法包括遍歷互鎖樹數(shù)據(jù)庫以訪問每個(gè)節(jié)點(diǎn),創(chuàng)建對(duì)于每個(gè)節(jié)點(diǎn)的節(jié)點(diǎn)包,其中所述節(jié)點(diǎn)包創(chuàng)建過程包括至少獲取每個(gè)節(jié)點(diǎn)的Case指針和Result指針,但不從所述asCase表獲取指針,并且不從所述asResult表獲取指針,以及把節(jié)點(diǎn)包寫入到另一個(gè)存儲(chǔ)器。
2.如權(quán)利要求1所述的方法,其中所述從一個(gè)存儲(chǔ)器寫入到另一個(gè)存儲(chǔ)器是通過使用主存儲(chǔ)器作為所述一個(gè)存儲(chǔ)器完成的。
3.如權(quán)利要求1所述的方法,其中所述寫入是寫入到至少一個(gè)下列類型存儲(chǔ)器,包括相對(duì)永久的并可由計(jì)算機(jī)獲得的一種類型,安放所述一個(gè)存儲(chǔ)器的機(jī)器的本地存儲(chǔ)器、通過網(wǎng)絡(luò)可訪問的一個(gè)系統(tǒng)中的遠(yuǎn)端存儲(chǔ)器、在可分區(qū)的機(jī)器中的分區(qū)存儲(chǔ)器、所述一個(gè)存儲(chǔ)器的另一個(gè)部分。
4.如權(quán)利要求1所述的方法,還包括把所述節(jié)點(diǎn)包恢復(fù)到一個(gè)有效存儲(chǔ)器的步驟。
5.如權(quán)利要求1所述的方法,其中至少某些所述節(jié)點(diǎn)包被保存在更大的包內(nèi),以及當(dāng)所述更大的包被寫入到另一個(gè)存儲(chǔ)器時(shí),所述更大的包被寫入有關(guān)所述節(jié)點(diǎn)的元數(shù)據(jù)。
6.如權(quán)利要求1所述的方法,其中所述創(chuàng)建節(jié)點(diǎn)包的過程還包括從具有asCase指針表和asResult指針表的任何節(jié)點(diǎn)獲取所述指針表中的指針計(jì)數(shù)值。
7.如權(quán)利要求6所述的方法,其中所述獲取包括對(duì)列表上的指針進(jìn)行計(jì)數(shù),以確定計(jì)數(shù)值。
8.如權(quán)利要求1所述的方法,還包括選擇節(jié)點(diǎn)包類型,在所述創(chuàng)建節(jié)點(diǎn)包過程中來自所述節(jié)點(diǎn)的信息將被存儲(chǔ)為該類型。
9.如權(quán)利要求8所述的方法,其中所述選擇過程提供多達(dá)三種類型的節(jié)點(diǎn)包以供選擇,所述三種類型包括第二類型,其不具有關(guān)于asCase指針表的信息,也不具有關(guān)于asResult指針表的信息;第一類型,具有保持在asCase指針表中的指針計(jì)數(shù)值字段和具有保持在asResult指針表中的指針計(jì)數(shù)值字段;以及第三類型,具有保持在asCase指針表中的指針或在asResult指針表中的指針計(jì)數(shù)值字段,但不同時(shí)保持二者。
10.如權(quán)利要求9所述的方法,其中所述第三種類型的節(jié)點(diǎn)包把所述保持的指針表計(jì)數(shù)值存儲(chǔ)在被稱為Point List Count(指針表計(jì)數(shù)值)的字段。
11.如權(quán)利要求9所述的方法,其中供選擇的至少一個(gè)類型是不具有關(guān)于asCase指針表的信息,也不具有關(guān)于asResult指針表的信息的節(jié)點(diǎn)包。
12.如權(quán)利要求9所述的方法,其中供選擇的至少一個(gè)類型是具有保持在asCase指針表中的指針計(jì)數(shù)值字段和具有保持在asResult指針表中的指針計(jì)數(shù)值字段的包。
13.如權(quán)利要求9所述的方法,其中供選擇的至少一個(gè)類型是具有保持在asCase指針表中的指針計(jì)數(shù)值字段或具有保持在asResult指針表中的指針計(jì)數(shù)值字段,但不同時(shí)具有二者數(shù)值的包。
14.如權(quán)利要求1所述的方法,還包括保存支持結(jié)構(gòu)。
15.如權(quán)利要求14所述的方法,其中所述保存支持結(jié)構(gòu)是在兩個(gè)步驟中完成的,第一步驟是在恢復(fù)過程期間構(gòu)建地址轉(zhuǎn)換表之前保存可被恢復(fù)的任何支持結(jié)構(gòu),以及第二步驟是在所有的其余節(jié)點(diǎn)包被恢復(fù)和地址轉(zhuǎn)換表完成之后保存可使用的任何支持結(jié)構(gòu)。
16.如權(quán)利要求14所述的方法,其中也被保存的所述支持結(jié)構(gòu)包括至少一個(gè)下列支持結(jié)構(gòu)文件頭,包含文件類型和創(chuàng)建日期,文件ID,對(duì)于基本根節(jié)點(diǎn)的數(shù)值和指向其數(shù)值的地址表,代表互鎖樹數(shù)據(jù)庫的最終產(chǎn)品節(jié)點(diǎn)的字符串表,描述它所處的基本OS或計(jì)算機(jī)系統(tǒng)的數(shù)據(jù)結(jié)構(gòu)的元數(shù)據(jù),用于文件本身的密碼保護(hù),表示指針表在節(jié)點(diǎn)中如何排序的代碼,對(duì)于在特定的環(huán)境下恢復(fù)結(jié)構(gòu)所需要的特性信息,創(chuàng)建保存文件的保存程序的版本和周期,OS基本結(jié)構(gòu)信息,至少包括所使用字段的尺寸信息,基本根節(jié)點(diǎn)數(shù)值或指向其數(shù)值的指針和任何相關(guān)的界定符,元數(shù)據(jù),包括字段類型,例如用戶規(guī)定的類型,列描述和許可證,KState變量,包括交換開關(guān)、數(shù)據(jù)流、節(jié)點(diǎn)結(jié)構(gòu),數(shù)據(jù)源,包括類型位置和附屬數(shù)據(jù)流的ID信息,安全性,包括管理密碼、許可證、保存的查詢位置和觸發(fā)器,以及與元數(shù)據(jù)有關(guān)的XML。
17.如權(quán)利要求1所述的方法,其中在所述創(chuàng)建節(jié)點(diǎn)包過程中對(duì)于每個(gè)節(jié)點(diǎn)包保存至少下列信息,Result指針,Case指針,任何附加字段數(shù)據(jù),舊存儲(chǔ)器地址,以及任何計(jì)數(shù)字段數(shù)據(jù)。
18.如權(quán)利要求17所述的方法,其中在所述創(chuàng)建節(jié)點(diǎn)包過程中與包尺寸有關(guān)的數(shù)值也保存在所述節(jié)點(diǎn)包中。
19.如權(quán)利要求14所述的方法,其中所述寫入支持結(jié)構(gòu)過程把所述支持結(jié)構(gòu)保存到文件頭,用于由所述方法創(chuàng)建的、保存的互鎖樹數(shù)據(jù)庫數(shù)據(jù)文件。
20.如權(quán)利要求17所述的方法,其中所述節(jié)點(diǎn)包被保存在包含一組所述節(jié)點(diǎn)包的大包中。
21.如權(quán)利要求20所述的方法,其中被保存在所述大包中的,在所述一組節(jié)點(diǎn)中的每個(gè)節(jié)點(diǎn)包共享至少一個(gè)特性,以及其中所述特性的指示被存儲(chǔ)在所述大包的頭區(qū)域。
22.如權(quán)利要求21所述的方法,還包括保存多個(gè)大包,每個(gè)具有一組節(jié)點(diǎn)包,至少一個(gè)特性方面與其它的大包的節(jié)點(diǎn)包不同。
23.如權(quán)利要求1所述的方法,其中所述保存互鎖樹數(shù)據(jù)庫從一個(gè)存儲(chǔ)器到另一個(gè)存儲(chǔ)器還包括以下步驟保存支持結(jié)構(gòu)到所述另一個(gè)存儲(chǔ)器。
24.一種機(jī)器可讀的信號(hào)媒體,包含具有在權(quán)利要求1的處理過程中創(chuàng)建的一組節(jié)點(diǎn)包的數(shù)據(jù)文件。
25.如權(quán)利要求24所述的機(jī)器可讀的信號(hào)媒體,其中所述媒體是磁盤。
26.一種機(jī)器可讀的數(shù)據(jù)媒體,在其中包括一組指令,該組指令在被裝載到計(jì)算機(jī)和允許執(zhí)行時(shí),使得所述計(jì)算機(jī)執(zhí)行權(quán)利要求1的方法。
27.一種從保存的互鎖樹數(shù)據(jù)庫數(shù)據(jù)文件恢復(fù)互鎖樹數(shù)據(jù)庫的方法,其中所述互鎖樹數(shù)據(jù)庫在按照所述方法被恢復(fù)后將具有至少一個(gè)BOT節(jié)點(diǎn)、至少一個(gè)子部件節(jié)點(diǎn)和至少多個(gè)根節(jié)點(diǎn),其中所述BOT節(jié)點(diǎn)具有指向子部件節(jié)點(diǎn)的asCase指針表,其中所述子部件節(jié)點(diǎn)具有指向其它子部件節(jié)點(diǎn)的asCase指針表,以及其中所述根節(jié)點(diǎn)將具有指向依賴于所述BOT節(jié)點(diǎn)的子部件節(jié)點(diǎn)的asResult指針表,其中所述恢復(fù)的方法包括從所述保存的互鎖樹數(shù)據(jù)庫數(shù)據(jù)文件,獲得支持信息,根據(jù)至少一部分所述支持信息確定存儲(chǔ)器中的區(qū)域,對(duì)于讀取的每個(gè)節(jié)點(diǎn)包,從所述數(shù)據(jù)文件迭代地讀節(jié)點(diǎn)包直至所有的節(jié)點(diǎn)包被讀過為止分配存儲(chǔ)器,并把對(duì)于從在主存儲(chǔ)器上所述讀出的節(jié)點(diǎn)包所創(chuàng)建的新節(jié)點(diǎn)分配的新存儲(chǔ)器地址存儲(chǔ)在計(jì)算機(jī)系統(tǒng),創(chuàng)建用于每個(gè)讀過的節(jié)點(diǎn)包的地址轉(zhuǎn)換表,并把包括所述讀過的節(jié)點(diǎn)包的至少舊地址的信息增加到所述轉(zhuǎn)換表,所述轉(zhuǎn)換表具有來自分配步驟的、對(duì)于每個(gè)節(jié)點(diǎn)包的所述新存儲(chǔ)器地址與對(duì)于所述讀過的節(jié)點(diǎn)包的所述舊存儲(chǔ)器地址之間的對(duì)應(yīng)關(guān)系。
28.如權(quán)利要求27所述的方法,還包括使用所述地址轉(zhuǎn)換表從舊存儲(chǔ)器地址找出對(duì)于從以前已讀出的、任何所述讀過的節(jié)點(diǎn)包創(chuàng)建的節(jié)點(diǎn)的新存儲(chǔ)器地址。
29.如權(quán)利要求27所述的方法,其中所述迭代讀取節(jié)點(diǎn)包的步驟是在執(zhí)行子部件節(jié)點(diǎn)和最終產(chǎn)品節(jié)點(diǎn)之前,首先執(zhí)行BOT和基本根節(jié)點(diǎn)。
30.如權(quán)利要求27所述的方法,還包括當(dāng)從所述數(shù)據(jù)文件讀出最后的節(jié)點(diǎn)包之后,從所述數(shù)據(jù)文件讀出最后的支持結(jié)構(gòu)信息,其中所述最后的支持結(jié)構(gòu)信息具有依賴于以前確定的節(jié)點(diǎn)地址的特性。
31.如權(quán)利要求27所述的方法,其中在所述數(shù)據(jù)文件中的所述節(jié)點(diǎn)包在所述方法之前的保存操作期間被設(shè)置成包含頭信息,所述頭信息包括關(guān)于所述數(shù)據(jù)文件的元數(shù)據(jù),所述元數(shù)據(jù)提供識(shí)別信息,以易于實(shí)行所述讀出步驟,由此,所述讀出步驟首先讀出所述識(shí)別信息,以便決定數(shù)據(jù)文件中的所有包的節(jié)點(diǎn)包的讀出次序。
32.如權(quán)利要求27所述的方法,其中在所述數(shù)據(jù)文件中的所述節(jié)點(diǎn)包在所述方法之前的保存操作期間被安排在大包中,所述大包包含頭信息,所述頭信息包括所述大包中的所有節(jié)點(diǎn)包的元數(shù)據(jù)。
33.如權(quán)利要求32所述的方法,其中數(shù)據(jù)文件中的幾個(gè)大的包按次序被讀出,由此,首先讀出包含最低級(jí)別BOT節(jié)點(diǎn)包的大包,以及首先讀出在每個(gè)所述大的包內(nèi)的BOT節(jié)點(diǎn)包和基本根節(jié)點(diǎn)包,然后在讀出下一個(gè)大包的節(jié)點(diǎn)包之前讀出包含其它節(jié)點(diǎn)包的大包,以及在讀出具有在所述一個(gè)級(jí)別以上的級(jí)別上的節(jié)點(diǎn)包的任何大的包之前,讀出一個(gè)級(jí)別上的所有的大包。
34.如權(quán)利要求32所述的方法,其中在所述讀出步驟之前,確定正在讀出哪種類型的節(jié)點(diǎn)包,以及所述確定是根據(jù)讀出關(guān)于節(jié)點(diǎn)包的支持信息作出的。
35.如權(quán)利要求27所述的方法,其中在所述讀出步驟之前,確定正在讀出哪種類型的節(jié)點(diǎn)包,以及所述確定是根據(jù)檢查大包的第一包作出的,所述包包含所述大包中的所有節(jié)點(diǎn)包的元數(shù)據(jù)。
36.一組編碼的計(jì)算機(jī)指令,該組指令在被裝載到計(jì)算機(jī)和在所述計(jì)算機(jī)中執(zhí)行時(shí),使得所述計(jì)算機(jī)執(zhí)行權(quán)利要求27的方法。
37.一種計(jì)算機(jī)可讀的媒體,用于計(jì)算機(jī)指令和包含權(quán)利要求36的一組編碼計(jì)算機(jī)指令的數(shù)據(jù)。
38.一種計(jì)算機(jī)系統(tǒng),運(yùn)行編碼的指令組,以執(zhí)行權(quán)利要求27的方法。
39.一種用存儲(chǔ)器保存互鎖樹數(shù)據(jù)庫的方法,其中所述互鎖樹數(shù)據(jù)庫具有至少一個(gè)BOT節(jié)點(diǎn)、至少一個(gè)子部件節(jié)點(diǎn)和至少多個(gè)根節(jié)點(diǎn),其中所述BOT節(jié)點(diǎn)具有指向子部件節(jié)點(diǎn)的asCase指針表,其中所述子部件節(jié)點(diǎn)具有指向其它子部件節(jié)點(diǎn)的asCase指針表,以及其中所述根節(jié)點(diǎn)具有指向依賴于所述BOT節(jié)點(diǎn)的子部件節(jié)點(diǎn)的asResult指針表,其中所述方法包括遍歷互鎖樹數(shù)據(jù)庫以訪問每個(gè)節(jié)點(diǎn),創(chuàng)建對(duì)于每個(gè)節(jié)點(diǎn)的節(jié)點(diǎn)包,其中所述節(jié)點(diǎn)包創(chuàng)建過程包括至少獲取每個(gè)節(jié)點(diǎn)的case指針和result指針,但不從所述asCase表獲取指針,以及不從所述asResult表獲取指針,以及把節(jié)點(diǎn)包寫入到所述存儲(chǔ)器。
40.如權(quán)利要求13的方法,其中把附加字段加到節(jié)點(diǎn)包,以區(qū)分由在指針表計(jì)數(shù)值中的計(jì)數(shù)值表示的指針表類型。
全文摘要
一種基于樹的數(shù)據(jù)庫,其包括可以被生成和/或訪問的互鎖樹的樹林,可能需要專用的保存和恢復(fù)過程,以保證所有的鏈路被適當(dāng)?shù)乇3?,不管是全部還是局部被恢復(fù)。以前的過程對(duì)基于樹的數(shù)據(jù)庫的已知特性起作用,生成一個(gè)元數(shù)據(jù)文件,并且把結(jié)構(gòu)的每個(gè)節(jié)點(diǎn)包化,用所考慮的舊存儲(chǔ)器地址精確的保存鏈路和鏈路表。這顯示不是通過保存所有的鏈路來構(gòu)建一個(gè)保存文件,而是使用新的恢復(fù)過程來恢復(fù)鏈路。
文檔編號(hào)G06F17/30GK101091181SQ200580038950
公開日2007年12月19日 申請(qǐng)日期2005年9月29日 優(yōu)先權(quán)日2004年10月5日
發(fā)明者簡·卡馬貝爾·瑪澤加特, 簡·萬-庫侖·克萊爾 申請(qǐng)人:尤尼西斯公司