欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

數(shù)據(jù)庫設(shè)備的制作方法

文檔序號:6418854閱讀:405來源:國知局
專利名稱:數(shù)據(jù)庫設(shè)備的制作方法
技術(shù)領(lǐng)域
本發(fā)明涉及數(shù)據(jù)庫和數(shù)據(jù)庫管理系統(tǒng)。
眾所周知,數(shù)據(jù)庫系統(tǒng)是相互有關(guān)的數(shù)據(jù)文件、索引和程序的集合,其中這些程序允許一個或多個用戶增添數(shù)據(jù)檢索和修改這些文件中存儲的數(shù)據(jù)。數(shù)據(jù)庫系統(tǒng)的基本概念是向用戶提供所謂的數(shù)據(jù)的“抽象”的和簡化的概觀(也稱為數(shù)據(jù)模型或概念結(jié)構(gòu)),這種概觀使普通用戶不必處理細(xì)節(jié),例如數(shù)據(jù)在物理上是如何組織和存取的。
現(xiàn)簡單回顧一些周知的數(shù)據(jù)模型,即“分層模型”、“網(wǎng)絡(luò)模型”、“關(guān)系模型”和“對象關(guān)系模型”。更詳細(xì)的討論例如可在Henry F.Korth,Abraham Silberschatz,"Database System Concepts",McGRAW-HillInternational Editions,1986(or the 3rdedition(1997)),Chapters 3-5,pp.45-172。
概言之,下面討論的所有模型具有一個共有特征,即它們用具有一個或多個“字段”的一個“記錄”代表各個“實體”,每個“字段”代表該實體的某給定屬性(例如某本書的記錄可包括下述字段“BOOKID”,“BOOK NAME”,“TITLE”)。通過一個或多個屬性構(gòu)成一個“關(guān)鍵字”,即,它標(biāo)識該記錄。在上面的例子中“BOOKID”充當(dāng)關(guān)鍵字。各種模型彼此不同,尤其在把這些記錄組織成更為復(fù)雜的結(jié)構(gòu)上。
關(guān)系模型-由Codd引入的關(guān)系模型是數(shù)據(jù)庫發(fā)展歷史上的一個里程碑。關(guān)系數(shù)據(jù)庫中引入一個抽象概念,根據(jù)該抽象概念數(shù)據(jù)用表(稱為“關(guān)系”)代表,其中各列代表各字段,各行代表各記錄。
各表之間的關(guān)聯(lián)只是概念上的。它不是數(shù)據(jù)庫定義中的一部分。二個表可以借助它們具有一個或多個其中的值是從相同的一組值(稱為“域”)的列的事實而隱式相關(guān)。
由關(guān)系模型引入的其它概念是高級操作員和綜合數(shù)據(jù)語言(現(xiàn)稱為第四代語言),高級操作員在表上操作(即,他們的參數(shù)和結(jié)果都是表),而在綜合數(shù)據(jù)語言中人們規(guī)定所要求的結(jié)果是什么而不是如何去生成這些結(jié)果。這種非過程語言(SQL-結(jié)構(gòu)查詢語言)已變成一種工業(yè)標(biāo)準(zhǔn)。此外,關(guān)系模型提供很高的數(shù)據(jù)無關(guān)性。數(shù)據(jù)被組織、存儲、索引和排序方式中的改變不應(yīng)影響到在這些語言下寫出的程序。關(guān)系模型已變成數(shù)據(jù)分析中的實際標(biāo)準(zhǔn)。
網(wǎng)絡(luò)模型-在關(guān)系模型中,數(shù)據(jù)(以及數(shù)據(jù)間的關(guān)系)被認(rèn)為是表的集合。和此不同在網(wǎng)絡(luò)模型中數(shù)據(jù)是用記錄的集合表示的,從而記錄(數(shù)據(jù))之間的關(guān)系用鏈接(link)表示。
在它是各保持一種類型的數(shù)據(jù)的多個字段的集合的意義上,網(wǎng)絡(luò)模型中的記錄類似于“實體”。最好(但非必須)可把鏈接實際上看成是指針。記錄的集合以及它們之間的關(guān)系構(gòu)成圖的集合。分層模型-在按記錄和鏈接處理數(shù)據(jù)以及數(shù)據(jù)之間的關(guān)系的方式上,分層模型類似于網(wǎng)絡(luò)模型。然而,和網(wǎng)絡(luò)模型的不同在于,各記錄以及它們之間的關(guān)系構(gòu)成樹的集合而不是任意圖的集合。在需要組織到數(shù)據(jù)庫中的數(shù)據(jù)固有地為分層特征的情況下,分層模型的結(jié)構(gòu)是特別簡單和直接的。分層模型具有某種固有的不足,例如,在許多現(xiàn)實生活情況中不能容易地按分層方式排列數(shù)據(jù)。另外,即使可以以分層方式組織數(shù)據(jù),和其它數(shù)據(jù)庫模型相比,它可能需要更大的容積。
設(shè)想一個以“雇員”為基本實體的例子,其帶有下述從屬屬性“雇員-工資”和“雇員-出勤”。后者還可具有從屬屬性,例如“雇員-進入”和“雇員-離去”。在該情況下,數(shù)據(jù)固有地為分層特性,從而最好在分層模型下組織,設(shè)想例如把“雇員”分配到幾個“項目”的情況,而他/她在每個項目上花費的時間(“時間-花費”)是二個實體“雇員”和“項目”中都包含的一個屬性。數(shù)據(jù)的這種布局不容易組織成分層模型,而一種可能的解決辦法是使條目“時間-花費”成為雙份并在“雇員”分層中和“項目”分層中獨立保存。在需要永遠(yuǎn)確保這兩個“時間-花費”是完全相同的意義上,這種方法是麻煩的和容易出錯的。面向?qū)ο蟮哪P?在“Object Oriented Modeling and Design”,JamesRumbaugh,Michael Blaha,William Premerlani,F(xiàn)redrick Eddi和William Lorensen中可得到全面說明。
面向?qū)ο蟮姆椒ò阉袑嶓w都看成是對象。每個對象屬于某個類,多個類關(guān)聯(lián)著一些方法和一些字段。為了能把某些字段封裝成是“專用的”,其只能由該類的方法訪問,而其它字段可由所有方法公用訪問。從而,“Joe Smith”屬于類“人員”。對于該類,可以定義專用字段“年令”。向?qū)ο驤oe施以類方法“更新-年令0”可改變他的年令。這方法允許定義繼承著總類(super-class)的所有方法和字段的子類。這樣,例如,可把“雇員”類定義成“人員”類的子類。此外還可對子類定義其它字段和方法。這樣,類“雇員”可支持字段“工資”和方法“得到-提高0”。
對象關(guān)系模型允許以按關(guān)系組織的數(shù)據(jù)觀察對象。從而,可以按它是組織成對象那樣的操作數(shù)據(jù),同時支持關(guān)系方法。
如上面所述,數(shù)據(jù)模型處理數(shù)據(jù)表達(dá)的概念級或邏輯級,并且“掩蔽”諸如物理上數(shù)據(jù)是如何排列和被存取的細(xì)節(jié)。通常通過所謂的數(shù)據(jù)庫文件管理系統(tǒng)來處理后者。
數(shù)據(jù)庫文件管理系統(tǒng)把邏輯結(jié)構(gòu)(即數(shù)據(jù)庫模型)變換成數(shù)據(jù)結(jié)構(gòu)、適當(dāng)?shù)牟僮鞑⒖赡苁瞧渌鼣?shù)據(jù)。數(shù)據(jù)結(jié)構(gòu)包括索引和數(shù)據(jù)記錄。索引使得能通過關(guān)鍵字訪問或更新數(shù)據(jù)。在搜索環(huán)境中,使用術(shù)語“搜索關(guān)鍵字”。數(shù)據(jù)庫文件管理系統(tǒng)最好在數(shù)據(jù)記錄上運行,從而達(dá)到時間上(即從用戶觀點上的數(shù)據(jù)庫的快速響應(yīng)時間)和空間上(即使分配給數(shù)據(jù)庫文件的存儲量為最小)的性能提高。如技術(shù)上所周知,通常存在時間要求和空間要求之間的一種折衷。數(shù)據(jù)庫的性能取決于用來代表數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu)的效率以及系統(tǒng)對這些數(shù)據(jù)的操作效率如何。例如在上面列出的“DatabaseSystem Concepts”的第7章(系統(tǒng)結(jié)構(gòu))和第8章(編索引)中詳細(xì)討論了常規(guī)的文件和管理系統(tǒng)。
已知的數(shù)據(jù)庫文件管理系統(tǒng)典型地采用下述索引圖,它們集中在下述主要類別,包括多路樹狀索引以及其它。多路樹狀索引-這些技術(shù)可用來建立一條或多條通過同一數(shù)據(jù)記錄的訪問路徑(也稱為搜索路徑)。它的主要缺點是它需要空間(通常,指向該記錄的所有關(guān)鍵字加上一些指針)和維護(一旦出現(xiàn)更新事務(wù)(見后面的定義)即增加和/或刪除記錄需要增加和/或刪除關(guān)鍵字)。通常,該索引圖的特性以及各文件中保持的數(shù)據(jù)量決定了要找到或更新(更新包括插入、刪除或上改)某給定記錄所需的訪問次數(shù)。在所考慮的存儲介質(zhì)是外部存儲器的情況下,該訪問次數(shù)實際上是I/O訪問次數(shù)。如后面將解釋的那樣,每次訪問存儲介質(zhì)會把一個數(shù)據(jù)塊裝到該存儲器中。
已經(jīng)開發(fā)了各種類型的樹狀索引方法,但是,和專用的直接訪問索引技術(shù)相比,樹狀索引實現(xiàn)成本更高。另一方面,樹狀索引允許序貫和子區(qū)域處理。最廣泛使用的索引圖中的一種是B樹(在其下存在各種商業(yè)產(chǎn)品名和實施變型例如B+樹),其中各關(guān)鍵字保持在均衡式樹結(jié)構(gòu)中并且最低層指向數(shù)據(jù)本身。在上述的“Database System Concept”一書的275-282頁中可得到對B樹索引圖的詳細(xì)說明。I/O訪問次數(shù)服從對數(shù)表達(dá)式LogkN+1,其中K是一個和實現(xiàn)相關(guān)的常數(shù),而N是記錄的總數(shù)。這意味著隨著記錄數(shù)量的增加,性能對數(shù)式地下降。
當(dāng)然有可能采用上述和其它技術(shù)的組合,例如,根據(jù)上述技術(shù)中的兩種或更多種實現(xiàn)的索引圖。
上述常用B樹索引圖的重要缺點之一是,不僅要作為數(shù)據(jù)記錄的一部分還要作為索引的一部分保存各關(guān)鍵字。
當(dāng)采用大尺寸的索引時(即當(dāng)需要用相對多的位數(shù)表達(dá)關(guān)鍵字時),這當(dāng)然會造成不希望的索引尺寸的膨脹,而且該缺點更加惡化。
解決該問題的一種可能方法是線索索引方式(Trie indexingscheme)。后者的例子是在g.Wiederhold的“File organization forDatabase disign”,Mcgraw-Hill,1987,PP.272.273或在D.E.Knuth的“the Art of Computer Programming”,Addison-Wesley PublishingCompany,1973,pp.481-505,681-687中討論的。
簡言之,線索索引圖使能快速搜索同時避免例如B樹技術(shù)中出現(xiàn)的關(guān)鍵字復(fù)制。線索索引圖具有樹狀的總結(jié)構(gòu),但根據(jù)基于搜索關(guān)鍵字區(qū)段(例如搜索關(guān)鍵字?jǐn)?shù)字或位)的對搜索的分割進行搜索。這樣,例如線索索引文件中的每個節(jié)點代表對搜索關(guān)鍵字的偏移,面對其任一子女的鏈接代表所述偏移處的字符值。就所分配的存儲器空間而言,線索結(jié)構(gòu)提供有效的數(shù)據(jù)結(jié)構(gòu),因為和以前不同不再在中間節(jié)點里保持整個搜索關(guān)鍵字,從而避免了例如在B樹索引技術(shù)中出現(xiàn)的對關(guān)鍵字的復(fù)制。
為了達(dá)到對于響應(yīng)時間的性能提高,在例如上述“File organization forDatabase design”書中描述的線索的一種特殊變型下,應(yīng)該從搜索關(guān)鍵字中選擇數(shù)字組(或位組)建立線索索引文件,從而得到對搜索空間的最好可能的分割,或者換言之得到盡可能均衡的樹。然而,這需要對線索的數(shù)據(jù)記錄的先驗知識,并且是在獲得未加整理的數(shù)據(jù)的代價下得到,對于許多真實生活中的情況這是不能應(yīng)用的。值得注意的是,若整理過的數(shù)據(jù)是強制性的,即使對線索的數(shù)據(jù)記錄存在足夠的先驗知識,也不能保證均衡式結(jié)構(gòu),應(yīng)注意,特殊的線索不支持序貫子區(qū)域處理。
在考慮大量的數(shù)據(jù)時,特別重要的是保持所謂的樹狀索引的均衡式結(jié)構(gòu),以便避免從根節(jié)點到和所查找的數(shù)據(jù)記錄相關(guān)的葉節(jié)點的對某給定數(shù)據(jù)記錄的長訪問路徑。專用的B樹索引方式構(gòu)成固有的均衡式樹結(jié)構(gòu),甚至在樹受到更新事務(wù)之后仍如此。然而如前面解釋的那樣,這種固有的均衡(或大體均衡)式的結(jié)構(gòu)是在這樣的代價下得到的,即,樹中塊內(nèi)容的膨脹以及相應(yīng)地過分地增大保持索引的文件尺寸,尤其是過分增大保持大量數(shù)據(jù)記錄的大的樹的尺寸。在為了到達(dá)所查找的數(shù)據(jù)記錄而對存儲介質(zhì)進行訪問的次數(shù)上(以及相應(yīng)的訪問時間上),文件組的大體積有害地影響數(shù)據(jù)管理系統(tǒng)的性能,很明顯,這是不希望的。
現(xiàn)轉(zhuǎn)到“其它”類別的索引圖,其中例如包括所謂的跳躍表索引跳躍表是一種隨機化的數(shù)據(jù)結(jié)構(gòu),它由多個層構(gòu)成,最低層,層0,由按非遞減次序排列的所有記錄的一個表構(gòu)成。層i(i=0,…,h)的每個節(jié)點根據(jù)概率P選擇是否代表層i+1。層i的代表構(gòu)成層i+1的節(jié)點。這些代表也按一個有序的表組織。層h+1是第一個空層。
在討論了迄今已知的索引圖的主要缺點,即膨脹的數(shù)據(jù)量(例如,B樹和其變型)以及對不均衡式結(jié)構(gòu)的敏感性(例如,線索),下面討論與包括數(shù)據(jù)記錄的從屬特性和多維特性在內(nèi)的各種特性有關(guān)的其它方面。
從而,例如考慮代表二個實體(表),即“書”和“借書人”的二種類型的數(shù)據(jù)記錄,每個實體和其唯一關(guān)鍵字相關(guān),例如借書人由“借書人-ID”標(biāo)識,而書由“書-ID”標(biāo)識。在現(xiàn)實生活中,例如在一個公共圖書館中,比如對某給定借書人借出的所有書目感興趣。這項事務(wù)處理是數(shù)據(jù)記錄的從屬的一個例子,其中“書”從屬于“借書人”。為了解決該查詢,需要施以二個查詢,一個用于借書人信息,而另一個用于他借的書(根據(jù)復(fù)合關(guān)鍵字-書借書人)。
就B樹索引圖而論,為了支持所規(guī)定的方式下的數(shù)據(jù)從屬,需要如下幾個獨立的索引文件·書索引文件,可通過“書-Id”關(guān)鍵字訪問·借書人索引文件,可通過“借書人-Id”關(guān)鍵字訪問·通過借書人的事務(wù)處理,可通過復(fù)合關(guān)鍵字(“借書人-Id書-Id”)。
從而,該索引圖包括其中的三個索引文件。就數(shù)據(jù)量以及附加的整體性維護的檢查而論,這明顯地形成不希望的系統(tǒng)開銷。因此,例如,從書文件中去掉某給定書需要先檢查該書是否在借書人-書索引文件中存在。
在已對數(shù)據(jù)記錄的從屬討論了迄今已知技術(shù)的缺點上,其不方便的表達(dá)以及操作方式使得更值得考慮實現(xiàn)所謂的多維數(shù)據(jù)記錄。
現(xiàn)回到上一個例子,現(xiàn)把表“書”和表“借書人”看成是多維表,這可從幾個角度上得出。從而除了上述借書人→書視角(由借書人借出的書,這可通過借書人-書復(fù)合關(guān)鍵字上的索引達(dá)到)外,該數(shù)據(jù)庫應(yīng)支持借出某給定書(幾本書)的借書人的替代視角,這當(dāng)然需要使用替代的復(fù)合關(guān)鍵字(書-借書人)。
在B樹表達(dá)下,從而需要增加另一個可通過復(fù)合關(guān)鍵字(書-Id借書人-Id)訪問的索引文件,這造成總共四個索引文件。
有關(guān)缺點是自我說明的并且對于n維表(n>2)變得更壞。
從而技術(shù)上需要減少數(shù)據(jù)處理系統(tǒng)的缺點,以開拓迄今已知的數(shù)據(jù)庫文件管理系統(tǒng)。具體地,技術(shù)上需要提供一種通過使用有效的數(shù)據(jù)庫文件管理系統(tǒng)顯示數(shù)據(jù)庫性能的數(shù)據(jù)處理系統(tǒng)。
技術(shù)上還需要提供一種數(shù)據(jù)庫文件管理系統(tǒng),該系統(tǒng)使用本質(zhì)上不對上述說明方式下的不均衡結(jié)構(gòu)敏感的索引。
技術(shù)上還需要提供一種索引,其固有地支持多種數(shù)據(jù)類型的表達(dá)、數(shù)據(jù)記錄的從屬和/或多維。
為了使解釋清晰,下面是本說明書和附屬權(quán)利要求書中頻繁使用的術(shù)語補充詞匯表,一些術(shù)語是常用的而另一些是造出的。塊-可由單次I/O操作存取的存儲單元。塊可含有以任何希望方式排列的數(shù)據(jù),例如按樹排列的節(jié)點并還可能和實際的數(shù)據(jù)記錄連接。塊可駐留在主(也稱為內(nèi)部)存儲器或輔助(也稱為外部)存儲器中。樹-一種數(shù)據(jù)結(jié)構(gòu),它或是空的或由一個通過d(d≥0)個指針(或鏈接)和d個被稱為根的子樹的不相交樹鏈接的根節(jié)點構(gòu)成。子樹的根稱為樹的根節(jié)點的子節(jié)點,并且子樹的節(jié)點是根的后繼節(jié)點。其子樹都為空的節(jié)點稱為葉節(jié)點。樹中不是葉的節(jié)點稱為內(nèi)部節(jié)點。
在本發(fā)明的情況下,葉節(jié)點還是和數(shù)據(jù)記錄關(guān)聯(lián)的節(jié)點。
應(yīng)在廣義下解釋節(jié)點和樹。從而,樹的定義還包括塊的樹,其中每個節(jié)點構(gòu)成一個塊。以同樣的方式,所述塊的后繼塊是該塊能訪問的所有塊。關(guān)于“樹”的詳細(xì)定義請參閱Cormen、Leiserson和Rivest的或Lewis和Deneberg的“Data structures and their algorithms”。
請注意葉節(jié)點和數(shù)據(jù)記錄之間的關(guān)聯(lián)(例如鏈接)包含任何能從葉節(jié)點訪問數(shù)據(jù)記錄的實現(xiàn)。從而,例如方式是,從葉節(jié)點可直接(即通過指針)訪問數(shù)據(jù)結(jié)果。作為另一種非限制性的例子,葉節(jié)點指向數(shù)據(jù)結(jié)構(gòu)(例如一個表),后者進而允許訪問數(shù)據(jù)記錄。其它變型當(dāng)然也是可行的。索引的深度-用從根塊到與某數(shù)據(jù)記錄相關(guān)的塊間的最多的塊數(shù)定義。均衡式索引-若存在一個常數(shù)C可使達(dá)到任何數(shù)據(jù)記錄所需的訪問次數(shù)最多為clogn,其中n為該結(jié)構(gòu)中的記錄數(shù)量,則索引是均衡式的。
獲得均衡式樹包括應(yīng)用均衡技術(shù),然后(在不均衡結(jié)構(gòu)上)產(chǎn)生均衡式結(jié)果,或者,若需要,在運行中應(yīng)用均衡技術(shù)以保持被均衡的均衡式結(jié)構(gòu)。
在索引中訪問應(yīng)被當(dāng)成一個過程,其中為了到達(dá)所查找的數(shù)據(jù)記錄通常在塊內(nèi)或者到另一個塊從一個節(jié)點移動到另一個節(jié)點(盡管不必非要如此。
導(dǎo)航通常被當(dāng)成對數(shù)據(jù)記錄組的訪問(雖然不必一定如此),以便通過它們的關(guān)鍵字以有序的方式收集這些數(shù)據(jù)記錄。
搜索方式意味著和索引關(guān)聯(lián)的用于通過關(guān)鍵字訪問某給定數(shù)據(jù)記錄的算法;塊內(nèi)搜索方式意味著塊內(nèi)使用的用來訪問某給定數(shù)據(jù)記錄或其它塊的算法。該數(shù)據(jù)記錄不必非要在所述塊之內(nèi)。
塊的公用關(guān)鍵字-塊的公用關(guān)鍵字是可以通過有關(guān)搜索方式從該塊訪問的各數(shù)據(jù)記錄的所有關(guān)鍵字的最長前綴。若需要,可在該塊中顯式保持公用關(guān)鍵字的一部分或全部。
更新事務(wù)處理-由插入新的數(shù)據(jù)記錄或刪除現(xiàn)有數(shù)據(jù)記錄或修改現(xiàn)有數(shù)據(jù)記錄或者其一部分中之一構(gòu)成的事務(wù)處理。
垂直取向的線索結(jié)構(gòu)-從根到葉的數(shù)字樹的常規(guī)取向。如后面舉例說明那樣,并不總是必須在垂直線索中保持節(jié)點間和/或塊間的所有鏈接。如后面更詳細(xì)解釋那樣,在本發(fā)明的索引中,對不均衡結(jié)構(gòu)敏感的線索構(gòu)成垂直的樹。如后面所說明那樣,在一些具體實施例中,在線索的數(shù)據(jù)記錄的各關(guān)鍵字上構(gòu)建索引構(gòu)成垂直取向的線索。
水平取向的線索結(jié)構(gòu)-具有h層垂直取向的線索結(jié)構(gòu),其中第一層代表最高層并且第h層代表通常和數(shù)據(jù)記錄相關(guān)聯(lián)的最低層(構(gòu)成對不均衡結(jié)構(gòu)敏感的線索),并允許根據(jù)塊的公用關(guān)鍵字值從第i層中的某個塊移到第i+1層中的某個塊。在本發(fā)明的各種實施例中,以及如后面更詳細(xì)地解釋的那樣,h個高層構(gòu)成最低層樹的各塊的公用關(guān)鍵字上的一個代表索引。存儲介質(zhì)-任何可用于存儲數(shù)據(jù)的介質(zhì),包括內(nèi)部存儲器和外部存儲器中之一或二者。外部存儲器可為下述中的一種或多種磁帶、磁盤、光盤、或任何其它用于存儲數(shù)據(jù)的物理介質(zhì)。內(nèi)部存儲器包括任何已知的主存儲器,包括高速緩存以及任何其它充當(dāng)內(nèi)部存儲器的物理存儲介質(zhì)。短鏈接-(也稱為近鏈接)從具有值r的節(jié)點a到同一塊中節(jié)點b之間的標(biāo)記成k的一個鏈接,從而在它們的訪問路徑上包括著節(jié)點b的各數(shù)據(jù)記錄的各關(guān)鍵字在關(guān)鍵字位置r上具有值k。長鏈接-(也稱為遠(yuǎn)鏈接)從層i的塊B中的節(jié)點V到層i-1的塊B′或到某數(shù)據(jù)記錄之間的鏈接。若V具有值r并且該鏈接的標(biāo)記為k,則塊B′的公用關(guān)鍵字的值或認(rèn)數(shù)據(jù)記錄的關(guān)鍵字的值在位置r上為k。
短鏈接或遠(yuǎn)鏈接的標(biāo)記也稱為鏈接的值或方向。分離(split)鏈接-若某塊溢出并進行分離處理,從而若節(jié)點a和節(jié)點b鏈接并且該分離節(jié)點b之后的后繼節(jié)點位于一個不同的塊-塊B-中,則節(jié)點a和節(jié)點b之間的鏈接為一個分離鏈接。在該分離后,該分離鏈接是節(jié)點a和塊B(包容納著節(jié)點b)之間的鏈接。分離鏈接是帶標(biāo)記的鏈接。
在諸如PAIF的幾種實施中,保持從節(jié)點a到塊B的分離鏈接,其中節(jié)點b的存在是任選的,因為可以通過該分層索引訪問塊B。直接鏈接-層i的塊B中的節(jié)點v到層i-1的塊B'的鏈接,它包括節(jié)點V′只要節(jié)點V和V′具有相同的值。若到帶有關(guān)鍵字k的數(shù)據(jù)記錄的某搜索路徑包括節(jié)點V但不包括它的任何近鏈接和遠(yuǎn)鏈接,則應(yīng)包含到塊B′的直接鏈接。直接鏈接不帶標(biāo)記。
下面的說明和塊分離過程中所使用的術(shù)語復(fù)制節(jié)點和拷貝節(jié)點有關(guān)。
若節(jié)點V′具有值k,從而則可從V′訪問的所有的數(shù)據(jù)記錄的關(guān)鍵字以及它的帶標(biāo)記的鏈接在位置0,…,k-1上一致。
若建立節(jié)點V使其具有的值和節(jié)點V′的值相等并且從V可訪問的所有數(shù)據(jù)記錄以及它的帶標(biāo)記的鏈接可從節(jié)點V′及其帶標(biāo)記的鏈接訪問,則認(rèn)為V是V′的復(fù)制節(jié)點。復(fù)制節(jié)點保持對包含節(jié)點V′的塊的直接鏈接。(復(fù)制節(jié)點也稱為拷貝節(jié)點)。
下面討論在本發(fā)明的情況下在說明書中和權(quán)利要求書中使用的種種其它術(shù)語和過程。
作為規(guī)則數(shù)據(jù)記錄由幾個字段構(gòu)成,一些字段稱為關(guān)鍵字。有時通過各關(guān)鍵字中一個稱為主關(guān)鍵字的關(guān)鍵字排列。數(shù)據(jù)記錄的關(guān)鍵字上的或者各代表關(guān)鍵字(其定義見后面)上的索引(或索引圖)是一種便利通過一個或多個密鍵字搜索的數(shù)據(jù)結(jié)構(gòu)。索引的例子是各種特定多路樹狀索引圖中的任何一種。依據(jù)本發(fā)明的索引可以通過使用多于一種的索引圖構(gòu)成。
可以在部分地或全部地駐留在內(nèi)部存儲器或外部存儲器的一個文件或多個文件中存儲索引。
依據(jù)本發(fā)明提供一種包括分割的索引-一種動態(tài)數(shù)據(jù)結(jié)構(gòu)-的索引,其允許通過關(guān)鍵字搜索并劃分到各塊中,每個塊含有一個代表關(guān)鍵字。代表關(guān)鍵字應(yīng)該足以找到與其關(guān)鍵字和搜索關(guān)鍵字相同的記錄(若存在)相關(guān)聯(lián)的塊。定位該塊后,容易檢索到該數(shù)據(jù)記錄。物理上不必必須把代表關(guān)鍵字存儲在塊中。分割的索引的例子是1.通過增加主關(guān)鍵字的關(guān)鍵字值排列的一個文件的塊序列。索引引導(dǎo)對包含著關(guān)鍵字的塊的搜索。為了允許通過一個不是主關(guān)鍵字的關(guān)鍵字進行搜索,構(gòu)造一個分割的索引,從而對于每個記錄該分割的索引包含其關(guān)鍵字和其鏈接。通過關(guān)鍵字的非遞減值排列這些對。該索引引導(dǎo)到含有所想要的記錄的地址的塊。
2.塊組中排列的線索。
3.其它類型的滿足分割的索引的規(guī)定的索引圖。
各數(shù)據(jù)記錄的各關(guān)鍵字上的分割索引稱為基本分割索引并用索引層I0表示。
該分割索引可能變成是不均衡的,從而產(chǎn)生一些長搜索路徑。
為了有效地搜索分割索引,在I0的各代表關(guān)鍵字上構(gòu)建一個附加的索引層(索引層也簡稱為索引)I1。若I1也是分割索引,則可在I1的各塊的代表關(guān)鍵字上構(gòu)建另一個索引I2。可以重復(fù)這種處理,直到建立一個最好全部包含在單個塊中的索引Ih(以下稱為根索引)。根索引Ih不必必須是分割索引。分層索引(它也構(gòu)成一個索引)是I0,…,Ih的集合。I1,…,Ih構(gòu)成所謂的代表索引。
為了通過關(guān)鍵字k搜索某記錄,在Ih中(以及在某些情況下在Ih-1至I1和數(shù)據(jù)記錄中)搜索后者,以便找Ih-1中導(dǎo)向k的塊B。重復(fù)該處理直到達(dá)到I0的和具有關(guān)鍵字k的記錄(若存在的話)相關(guān)聯(lián)的塊。
為了插入帶有關(guān)鍵字k的一個新記錄r,按如上進行搜索以找到塊B。找到I0中的B后,把r增添到B中。
若(I0中的)B溢出,把它分離成二個(或更多)的塊,并用各新塊的代表替代I1中B的代表。I1中塊B1的溢出引起B(yǎng)1的分離,并且用各新塊的代表替代I2中B1的代表。若Ih的塊溢出,則再建立一層Ih+1并增添到分層索引上。請注意,可根據(jù)具體應(yīng)用確定“溢出”狀態(tài),不必必須在出現(xiàn)滿時才觸發(fā)。這樣,做為一個例子,當(dāng)塊至少一半滿時一種實施例中出現(xiàn)溢出。
刪除類似于插入,并可能涉及合并-即和分離相反的處理。不必必須在實時下進行更新或分離,而是可延遲的(即,事后進行)。
請注意,構(gòu)建分層索引最好保持均衡式索引。
請注意,在一些實施例中均衡式索引是足夠的,而在分層索引(不帶有I0)的量相對小的情況下(例如,可在內(nèi)部存儲器中容納大部分或全部情況下)可免除“均衡式結(jié)構(gòu)”要求。
根據(jù)本發(fā)明的第一方面,已經(jīng)發(fā)現(xiàn)可以通過提供一種索引更具體地提供一種規(guī)定方式下的分層索引來解決對不均衡結(jié)構(gòu)敏感的基本分割索引(例如線索)的固有限制。
例如集中于分層索引和基本分割索引(例如線索)的比較,容易得出通過分層索引訪問選定的數(shù)據(jù)記錄要比通過所述線索訪問相同的數(shù)據(jù)記錄有效得多。
在本發(fā)明的環(huán)境下,“更有效”意味著為了在某數(shù)據(jù)記錄上進行更新事務(wù)處理(例如,插入、刪除或修改)或者為了訪問數(shù)據(jù)記錄通過分層索引對存儲介質(zhì)的訪問次數(shù)要比通過基本分割索引對存儲介質(zhì)的訪問次數(shù)少。訪問次數(shù)應(yīng)創(chuàng)立成在每次訪問中處理(例如裝入或處理)來自存儲介質(zhì)的一個塊。
可能存在不能應(yīng)用這種“更有效”規(guī)定的情況,例如在只具有少量塊的非常小的文件的情況下,其中通過基本分割索引訪問某數(shù)據(jù)記錄所需的操作可能等于或少于通過所述分層索引的操作。
為了實現(xiàn)象線索那樣的分割索引,從本身是線索的基本分割索引構(gòu)建一個分層索引需要一些其它考慮。
從而,每個關(guān)鍵字被看成是字符串或位串。此外,若單個塊不能容納下線索,則把它分割成多個塊,從而每個塊包含線索的單個子樹。該塊的代表關(guān)鍵字是和塊中的該線索的根節(jié)點相關(guān)的串,即從Ii的線索的根到該塊的線索的根的路徑的標(biāo)記序列。如一般的分層索引方式中那樣,Ii的代表關(guān)鍵字是Ii+1的關(guān)鍵字。為了搜索Ii+1中的關(guān)鍵字k,要搜索Ii+1的各塊中的最長前綴k,再由此移動到Ii的適當(dāng)塊。
記錄的插入需要把它的關(guān)鍵字添加到I0,即向I0的線索增加值。若造成塊溢出,分離該塊-典型地把它分割成二個(一些實施中更多的)塊,從而每個塊包含一個(相連接的)線索。為做到此割斷某節(jié)點u和其子v之間的鏈接,并把以V為根的子樹移到另一個塊。把新塊的代表關(guān)鍵字添加到I1。如一般的分層索引方式中那樣,對I1,…,Ih繼續(xù)這種處理。
若基本分割索引是象Patricia或PAIF的壓縮線索,只得留一部分關(guān)鍵字,這樣可節(jié)約索引空間。然而,這種節(jié)約影響進行搜索的方式。在這種壓縮線索中通常只保持階數(shù)大于或等于2的節(jié)點。若搜索關(guān)鍵字k不屬于壓縮線索,則可能在某記錄r處終止搜索,而且我們必須檢查k是否等于r的關(guān)鍵字。若二個關(guān)鍵字不同,則該線索不包含帶有關(guān)鍵字k的記錄。
該策略對分層索引圖的影響在于k的前綴可能不在該索引中出現(xiàn)。為了在這種情況下能夠搜索引入從Ii的各塊的節(jié)點到Ii-1的塊的直接鏈接。這些鏈接不具有方向,當(dāng)搜索關(guān)鍵字的適當(dāng)部分不和該節(jié)點的任一方向相符時使用直接鏈接。
假定搜索到達(dá)其代表ki-1不是k的前綴的Ii-1的塊Bi-1。(若ki-1未在Bi-1中顯式記錄,我們可到達(dá)能從Bi-1訪問的任何數(shù)據(jù)記錄r,并從r的關(guān)鍵字確定ki-1)。為了繼續(xù)搜索,比較k和ki-1以找到彼此不同的第一個字符的位置j,搜索塊Bi的線索,直到找到具有直接鏈接的和值小于或等于j的節(jié)點V。對由該直接鏈接指向的Ii-1的塊繼續(xù)搜索。(若不存在這樣的節(jié)點,則轉(zhuǎn)到索引Ii-1的第一個塊。)這樣,在不好的情況下,每層可能需要一次額外的訪問。盡管如此,如后面解釋的那樣,3個層足以對幾十億個記錄定址并且通??稍谟嬎銠C的內(nèi)部存儲器中保持2個層。這使得有可能為了訪問和某數(shù)據(jù)記錄相關(guān)的塊對外部存儲介質(zhì)的I/O訪問不超過二次。
分離處理還必須提供各直接鏈接。假定到Ii-1的塊Bi-1的訪問路徑包括層Ii的塊Bi,Bi-1溢出并分離為Bi-1和Bi-1′。塊Bi現(xiàn)在必須含有到Ii-1中的它的所有后繼塊的鏈接。通過下述非限定的技術(shù)可實現(xiàn)此令ki-1′是Bi-1′的代表關(guān)鍵字,把該關(guān)鍵字插入Ti-Bi的壓縮線索,從而對Bi-1′的子代的關(guān)鍵字的搜索到達(dá)Bi-1′以及從Bi-1的子代的搜索到達(dá)Bi- 1。
一種實現(xiàn)分離處理的非限定的方法如下1.在該塊中至少存在二個線索下在該塊中某節(jié)點(這里為分離節(jié)點)的各短鏈接中至少刪除一個短鏈接(這里為分離鏈接)。
2.把每個子樹移到一個獨立的塊中。
3.若不存在在Bi的塊,建立Bi并在Bi中建立該分離節(jié)點的拷貝節(jié)點。
4.若塊Bi存在但在Bi中不存在該分離節(jié)點的拷貝節(jié)點,則在Bi中建立該分離節(jié)點的拷貝節(jié)點并把它連接到Bi的線索,從而可以從包括Bi中的根節(jié)點和該復(fù)制節(jié)點以及它的依據(jù)Bi-1′的代表關(guān)鍵字的各帶標(biāo)記的鏈接的搜索路徑上訪問Bi-1′(分離處理結(jié)束后)。
5.若該拷貝節(jié)點不具有直接鏈接,增加從該拷貝節(jié)點到塊Bi-1的直接鏈接。
6.增加一個從該拷貝節(jié)點到塊Bi-1′的遠(yuǎn)鏈接,或者若該拷貝節(jié)點在該遠(yuǎn)鏈接的方向上具有至某子節(jié)點的短鏈接則可用從該子節(jié)點到塊Bi-1′的一條直接鏈接代替該遠(yuǎn)鏈接。
在上面的實現(xiàn)中,進行Ik(k>0)中的塊的分離,從而(Ik的)各分離塊是駐留在不同塊中的分離節(jié)點之間的鏈接。
相應(yīng)地,依據(jù)本發(fā)明的一個方面,為在數(shù)據(jù)處理系統(tǒng)上執(zhí)行的數(shù)據(jù)庫文件管理系統(tǒng)使用的存儲介質(zhì)提供一種數(shù)據(jù)結(jié)構(gòu),其包括在塊組中布置的分層索引;該分層索引包括一個和各數(shù)據(jù)記錄關(guān)聯(lián)的基本分割索引,該基本分割索引使得能夠通過關(guān)鍵字或關(guān)鍵字組訪問或更新數(shù)據(jù)記錄,而且它對塊組的不均衡結(jié)構(gòu)是敏感的;所述分層索引使得能夠通過關(guān)鍵字或多個關(guān)鍵字訪問或更新數(shù)據(jù)記錄并且構(gòu)建均衡式塊結(jié)構(gòu)。
本發(fā)明還在數(shù)據(jù)處理系統(tǒng)上執(zhí)行的數(shù)據(jù)庫文件管理系統(tǒng)使用的存儲介質(zhì)中提供一種數(shù)據(jù)結(jié)構(gòu),其包括一個布置在塊組中的并且是在數(shù)據(jù)記錄組的關(guān)鍵字組上構(gòu)建的索引;該索引包括一個和各數(shù)據(jù)記錄關(guān)聯(lián)的基本分割索引;該基本分割索引使得能夠通過關(guān)鍵字或多個關(guān)鍵字訪問或更新數(shù)據(jù)記錄,而且它對塊組的不均衡結(jié)構(gòu)是敏感的;所述索引使得能夠通過關(guān)鍵字或多個關(guān)鍵字訪問或更新數(shù)據(jù)記錄并構(gòu)建一衡式塊結(jié)構(gòu)。
此外,本發(fā)明還在數(shù)據(jù)處理系統(tǒng)上執(zhí)行的數(shù)據(jù)庫文件管理系統(tǒng)使用的存儲介質(zhì)中提供一種數(shù)據(jù)結(jié)構(gòu),其包括一個布置在塊組中的并且是在數(shù)據(jù)記錄組的關(guān)鍵字組上構(gòu)建的索引;該索引包括一個和各數(shù)據(jù)記錄關(guān)聯(lián)的線索;該線索使得能夠通過關(guān)鍵字或多個關(guān)鍵字訪問或更新數(shù)據(jù)記錄,而且它對塊組的不均衡結(jié)構(gòu)是敏感的;所述索引使得能夠通過關(guān)鍵字或多個關(guān)鍵字訪問或更新數(shù)據(jù)記錄并構(gòu)建均衡式塊結(jié)構(gòu)。
另外,本發(fā)明在用于訪問數(shù)據(jù)記錄和在數(shù)據(jù)處理系統(tǒng)上執(zhí)行的數(shù)據(jù)庫文件管理系統(tǒng)中提供一種方法;這些數(shù)據(jù)記錄和一個布置在塊組中并存儲在存儲介質(zhì)中的基本分割索引相關(guān)聯(lián);該基本分割索引使得能夠通過關(guān)鍵字或關(guān)鍵字組訪問數(shù)據(jù)記錄并且對塊組的不均衡結(jié)構(gòu)是敏感的;該方法用于構(gòu)建一個布置在塊組中的的分層索引并包括步驟(a)提供所述基本分割索引;
(b)在所述基本分割索引的代表關(guān)鍵字組上構(gòu)建一個代表索引;所述分層索引使得能夠通過關(guān)鍵字或多個關(guān)鍵字訪問或更新數(shù)據(jù)記錄并且構(gòu)成一個均衡式塊結(jié)構(gòu)。
本發(fā)明還在用于數(shù)據(jù)記錄和在數(shù)據(jù)處理系統(tǒng)上執(zhí)行的數(shù)據(jù)庫文件管理系統(tǒng)中提供一種方法;這些數(shù)據(jù)記錄和一個布置在塊組中并存儲在存儲介質(zhì)中的基本分割索引相關(guān)聯(lián);該基本分割索引使得能夠通過關(guān)鍵字或多個關(guān)鍵字訪問或更新數(shù)據(jù)記錄并且對塊組的不均衡結(jié)構(gòu)是敏感的;該方法用于構(gòu)建一個在各數(shù)據(jù)記錄的各關(guān)鍵字上的并布置在塊組中的索引,該方法包括步驟(a)提供所述基本分割索引;(b)在所述基本分割索引的代表關(guān)鍵字組上構(gòu)建一個索引,所述索引使得能夠通過關(guān)鍵字或多個關(guān)鍵字訪問或更新數(shù)據(jù)記錄并且構(gòu)成一個均衡式塊結(jié)構(gòu)。
依據(jù)本發(fā)明還在用于訪問數(shù)據(jù)記錄和在數(shù)據(jù)處理上執(zhí)行的數(shù)據(jù)庫文件管理系統(tǒng)中提供一種方法;這些數(shù)據(jù)記錄和一個布置在塊組中的并存儲在存儲介質(zhì)中的線索相關(guān)聯(lián);該線索使得能夠通過關(guān)鍵字或多個關(guān)鍵字訪問或更新數(shù)據(jù)記錄并且對于塊組的不均衡結(jié)構(gòu)是敏感的;該方法用于構(gòu)建一個在各數(shù)據(jù)記錄的各關(guān)鍵字上的并布置在塊組中的索引,該方法包括步驟(a)提供一個線索;(b)在所述線索的代表關(guān)鍵字組上構(gòu)建一個索引,所述索引使得能夠通過關(guān)鍵字或多個關(guān)鍵字訪問或更新數(shù)據(jù)記錄并且構(gòu)成一個均衡式塊結(jié)構(gòu)。
依據(jù)本發(fā)明,最好,盡管不必非如此,用規(guī)定的若干索引圖中選擇出的一個或多個編索引圖構(gòu)建該索引。典型地,但不排它地,多向樹狀索引的例子是B樹編索引圖。
通過一種實施例,所述基本分割搜索方法是利用美國專利5,495,609中公開的數(shù)字樹類型構(gòu)建的線索。
通過另一種實施例,所述線索是利用所謂的隨機訪問索引文件(PAIF)構(gòu)建的。
這樣,通過一個特殊實施例在由數(shù)據(jù)處理系統(tǒng)上執(zhí)行的數(shù)據(jù)庫文件管理系統(tǒng)使用的存儲介質(zhì)提供一種至少包括一個具有多個節(jié)點和多個鏈接的隨機訪問索引文件(PAIF)的數(shù)據(jù)結(jié)構(gòu);所述PAIF的葉節(jié)點各和至少一個可由所述用戶應(yīng)用程序訪問的數(shù)據(jù)記錄相關(guān)聯(lián),并且其中所述數(shù)據(jù)記錄的至少一部分組成至少一個搜索關(guān)鍵字;所述PIAF中選出的節(jié)點各代表所述嵌入搜索關(guān)鍵字內(nèi)的一個搜索關(guān)鍵字的某給定偏移;來自所述選定節(jié)點中的起源于各給定節(jié)點的鏈接各代表所述搜索關(guān)鍵字區(qū)段的一個唯一值;PIAF具有至少二個的各設(shè)置在一個塊內(nèi)的子PIAF;所述數(shù)據(jù)庫文件管理系統(tǒng)還能把所述塊組布置成均衡式塊結(jié)構(gòu)。
在PAIF環(huán)境下,應(yīng)注意,盡管所述選定的各節(jié)點最好只包括給定的偏移,但不必總是為這樣的情況。這樣,根據(jù)需要和適當(dāng),一個或多個所述節(jié)點可包括其它信息,諸如關(guān)鍵字的一部分和/或其它信息。
根據(jù)一種修改實施例,線索為PAIF類型,通過和該PAIF線索的搜索方式基本相同的搜索方式構(gòu)成索引圖。
在向下繼續(xù)之前應(yīng)注意到,僅僅是出于說明的方便,本發(fā)明主要參照作為一種基本分割索引的線索進行說明。業(yè)內(nèi)人士容易理解本發(fā)明決不受限于線索,并且任何基本分割索引都是可使用的。
從而,就性能提高和迄今已知的技術(shù)相比下,采用本發(fā)明的分層索引的數(shù)據(jù)庫文件管理系統(tǒng)尤其在下述特性上是有益的·根據(jù)搜索關(guān)鍵字本質(zhì)上以分類形式保持?jǐn)?shù)據(jù)。即,人們可以通過數(shù)據(jù)記錄的關(guān)鍵字的次序在樹中導(dǎo)航。分層索引固有地支持序貫操作如“得到下一個”和“得到上一個”。在該方面上,所提出的分層索引優(yōu)于例如散列方式和某些數(shù)字樹實現(xiàn)?!楸3志馐剿饕恍枰孪戎罃?shù)據(jù)庫的內(nèi)容?!け3志馐椒謱铀饕⑶曳謱铀饕纳疃认鄬κ切〉?,從而使進行更新事務(wù)處理或訪問數(shù)據(jù)記錄所需的訪問次數(shù)(通常是慢的I/O操作)最少。根據(jù)一個實施例,為了從幾十億個數(shù)據(jù)記錄中訪問一個給定數(shù)據(jù)記錄實際上需要一次I/O(并且不多于二次I/O)操作(構(gòu)成一次或二次訪問)。
從而本發(fā)明還在具有存儲介質(zhì)的計算機系統(tǒng)中提供一種數(shù)據(jù)結(jié)構(gòu),其中所述存儲介質(zhì)為至少一個容量在10至20M字節(jié)或更大的內(nèi)部存儲器,和一個外部存儲器,該數(shù)據(jù)結(jié)構(gòu)包括一個各數(shù)據(jù)錄的各關(guān)鍵字上索引;引布置在塊組中;從而對于十億個數(shù)據(jù)記錄,為了訪問與所述十億個數(shù)據(jù)記錄中的任一個相關(guān)聯(lián)的一個塊,在和所述數(shù)據(jù)記錄的關(guān)鍵字的長度無關(guān)下實際上對所述外部存儲器的訪問不多于二次。
另外,本發(fā)明在具有存儲介質(zhì)的計算機系統(tǒng)中提供一種數(shù)據(jù)結(jié)構(gòu),其中所述存儲介質(zhì)至少為一個容量在10至20M字節(jié)或更大的內(nèi)部存儲器和一個外部存儲器,該數(shù)據(jù)結(jié)構(gòu)包括一個各數(shù)據(jù)記錄的各關(guān)鍵字上的索引;該索引布置在塊組中;從而對于十億個數(shù)據(jù)記錄,和所述數(shù)據(jù)記錄的關(guān)鍵字的長度無關(guān)地實際上在所述內(nèi)部存儲器中容納該索引的所有的塊。
本發(fā)明還在具有存儲介質(zhì)的計算機系統(tǒng)中提供一種數(shù)據(jù)結(jié)構(gòu),該數(shù)據(jù)結(jié)構(gòu)包括一個各數(shù)據(jù)記錄的各關(guān)鍵字上的索引;該索引布置在平衡式塊結(jié)構(gòu)中并能在所述數(shù)據(jù)記錄上進行序貫操作;索引尺寸基本上不受所述關(guān)鍵字的長度的影響。
請注意,這些數(shù)據(jù)記錄可駐留在該分層索引的塊組中,或者可駐留在(一個或多個)獨立的數(shù)據(jù)文件中。在后一種實施例中,數(shù)據(jù)記錄當(dāng)然應(yīng)和對應(yīng)的分層索引關(guān)聯(lián)。如后面參照對具體實施例的說有所闡述的那樣,給定的數(shù)據(jù)記錄可容納多于一個的搜索關(guān)鍵字。
依據(jù)本發(fā)明,最好,盡管不必非如此,用規(guī)定的若干索引圖中選擇出的一個或多個編索引圖構(gòu)建該索引。典型地,但不排它地,多向樹狀索引的例子是B樹編索引圖。
下面是和本發(fā)明的第二方面有關(guān)的討論。
即,通常數(shù)據(jù)由幾個類型的記錄(例如上例中的書和借書人)構(gòu)成。記錄的類型確定其各字段(各屬性)和它的各關(guān)鍵字。在常規(guī)系統(tǒng)中,例如采用B樹索引的系統(tǒng),不在記錄中保持每個關(guān)鍵字的類型而且也不當(dāng)成是關(guān)鍵字的一部分。程序“明白”記錄的類型,并從而明白數(shù)據(jù)記錄的各字段以及它們的結(jié)構(gòu)。
依據(jù)本發(fā)明的第二方面提出一種不同的方法。向每種關(guān)鍵字類型分配一個標(biāo)志符-一個位串,例如一個或多個字符串,通常但非必須把該標(biāo)志符作為一個前綴添加到該類型的所有關(guān)鍵字上。標(biāo)明式關(guān)鍵字是帶有標(biāo)志符的關(guān)鍵字。把該標(biāo)志符對待成關(guān)鍵字的一部分(用于搜索或更新目的),從而該標(biāo)志符是索引圖的一部分。
這種標(biāo)志符使得能夠獲得數(shù)據(jù)記錄的作為其類型的函數(shù)的特性。從而通過查看關(guān)鍵字的標(biāo)志符,人們得到標(biāo)志符并進而推導(dǎo)出記錄的類型,從而不再事先知道記錄類型。其中各關(guān)鍵字被標(biāo)明的數(shù)據(jù)記錄稱為標(biāo)明式數(shù)據(jù)記錄。標(biāo)明式索引是一種使能標(biāo)明的數(shù)據(jù)記錄上的搜索的索引。
下面的說明舉例依據(jù)本發(fā)明的標(biāo)志符的使用。從而,考慮類C,并使該類的所有數(shù)據(jù)記錄具有一個關(guān)鍵字字段(或多個字段)k1,并且可能具有幾個其它非關(guān)鍵字字段。令R是類C的一個數(shù)據(jù)記錄,其中R.k1=FIAT。令k1的標(biāo)志符為A。通過增添該標(biāo)志符可得到關(guān)鍵字AFIAT。為了訪問某帶有R.k1=FIAT的記錄,為關(guān)鍵字AFIAT搜索標(biāo)明式索引。
在說明了標(biāo)志符特征后,下面說明另一個依據(jù)本發(fā)明的第二方面的特征-數(shù)據(jù)記錄的從屬??紤]一個帶有關(guān)鍵字K1的記錄R1,以及一個帶有由有序關(guān)鍵字K1,K2對組成的復(fù)合關(guān)鍵字的記錄R2。(在該情況中,R2的標(biāo)明式關(guān)鍵字是復(fù)合關(guān)鍵字K1′,K2′,其中K2′由用標(biāo)志符D2對關(guān)鍵字K2加上前綴構(gòu)成。D2是R2的標(biāo)志符。)在標(biāo)明式索引中,可以通過搜索關(guān)鍵字K1′-帶著其標(biāo)志符D1的關(guān)鍵字選擇R1,并可通過用關(guān)鍵字K1′K2′搜索同一索引選擇R2,其中K1′K2′是K1′和K2′的串聯(lián),而K2′是帶著其標(biāo)志符D2的關(guān)鍵字K2。在該情況下,K2是K1的從屬。
還把從屬關(guān)系擴充到記錄上。若K2從屬于K1,K2的標(biāo)志符是D2,則R2的標(biāo)志符也是D2(若D1,D2)。若R2從屬于R1,通過把K2′串聯(lián)到K1構(gòu)成R2的關(guān)鍵字。注意在K2′中,對K2加上前綴D2。
在ERD模型中,記錄R1的類型和記錄R2的類型可能處于一個對多個關(guān)系,其意味著幾個R2類型的記錄可和R1類型的單個記錄有關(guān)??梢酝ㄟ^從屬關(guān)系實現(xiàn)這種關(guān)系R2類型的幾個記錄從屬于單個R1類型的記錄(例如,同一個人可借幾本書)。尤其,若該關(guān)系是一對一的(例如在每個借書人只能借一本書的情況下該關(guān)系就是一對一的,從而關(guān)鍵字K1′D2(其中D2是R2的標(biāo)志符)足以定位R2。在標(biāo)明式索引中,到K1′K2′的搜索路徑包括到K1′的搜索路徑。(這并不排除通過別的路徑到達(dá)記錄R2的可能性)。這一特征顯示出依據(jù)本發(fā)明的第二方面的另一個重要特性,即,固有地保持?jǐn)?shù)據(jù)完整性。從而,插入一個其關(guān)鍵字為K1′K2′(或K1′D2)的記錄只有若存在其關(guān)鍵字為K1′的記錄時才能進行。在前面的例子下,對借出某書(書_Id=2222)的某借書人(借書人_Id=111111的插入事務(wù)處理應(yīng)造成僅當(dāng)存在該特定借書人(帶有K1=111111的數(shù)據(jù)記錄R1)時才會插入其標(biāo)明式關(guān)鍵字為A111111B2222的記錄(在上面的例子中,借書人的標(biāo)志符為A而從屬的借書人-書數(shù)據(jù)記錄的標(biāo)志符為B)。只在小的開銷下實現(xiàn)數(shù)據(jù)完整性,因為該索引中至借書人-書記錄的路徑包含著確定該借書人是否存在的足夠信息。若該借書人不存在,到該復(fù)合關(guān)鍵字的路徑將不經(jīng)過該借書人。這會在插入處理中自動地得到檢測。相反,按照現(xiàn)有技術(shù),不同類型的記錄和不同的索引文件關(guān)聯(lián)。在把一個新數(shù)據(jù)記錄(帶有一個復(fù)合關(guān)鍵字)插入到借書人-書索引文件之前,必須在借書人索引文件中進行一次獨立的檢查以便確定該特定借書人(記錄R1,關(guān)鍵字K1)是否存在,從而造成過分的開銷。
注意從屬關(guān)系不僅僅限于二層,從屬的記錄本身可具有從屬于它的記錄,從而可達(dá)到n層的從屬。例如,考慮銀行數(shù)據(jù)庫,其中賬戶記錄從屬于部門記錄,而存款記錄從屬于賬戶。
現(xiàn)轉(zhuǎn)到依據(jù)本發(fā)明的第二方面的多維特性。令R為一個由二個關(guān)鍵字K1和K2中的一個標(biāo)識的記錄。從而標(biāo)明式索引應(yīng)包含二條到R的搜索路徑,一條通過標(biāo)明式關(guān)鍵字K1′,另一條通過標(biāo)明式關(guān)鍵字K2′。這樣,R構(gòu)成一個多維記錄。一個多維索引包括該標(biāo)明式索引以及多維數(shù)據(jù)記錄(組)。
研究其中不對從屬數(shù)據(jù)記錄施加多維索引的第一實施例。從而,例如,考慮類C,并使該類的所有數(shù)據(jù)記錄具有二個關(guān)鍵字字段k1-汽車型號和k2-其牌照號,并且可能具有幾個非關(guān)鍵字字段。令R為一個類C的數(shù)據(jù)記錄,其中R.k1=FIAT和R.k2=127。令k1的標(biāo)志符為A,k2的標(biāo)志符為B。通過添加標(biāo)志符可得關(guān)鍵字AFIAT和B127。把這些擴充的關(guān)鍵字插入到單個標(biāo)明式索引中。為了訪問帶有R.k1=FIAT的記錄按關(guān)鍵字AFIAT搜索該標(biāo)明式索引,而為了選擇帶有R.k2=127的記錄按B127搜索同一個標(biāo)明式索引。
上面的討論和例子考慮一種多維索引,其中數(shù)據(jù)記錄不必必須顯示出從屬關(guān)系。多維索引還可供選用地施加到從屬的數(shù)據(jù)記錄。例如,研究一個銀行數(shù)據(jù)庫,其中存款從屬于賬戶和存款人。單個標(biāo)明式索引提供對帳戶(通過標(biāo)明式關(guān)鍵字k'1賬戶-號碼)的訪問、對存款人(通過標(biāo)明式關(guān)鍵字k'2存款人-姓名)的訪問以及通過k′1k′2和k′2k′1對存款訪問。(當(dāng)然有可能當(dāng)k1從屬于k2時對k1使用不同的標(biāo)志符以及當(dāng)k2從屬于k1時對k2使用不同的標(biāo)志符。)多維記錄的標(biāo)志符取決于用來搜索或更新記錄的關(guān)鍵字的標(biāo)志符。從而,當(dāng)通過關(guān)鍵字AFIAT搜索或更新汽車記錄(FIAT,127)時該記錄的標(biāo)志符是A,而當(dāng)通過牌照號B127訪問該記錄時其標(biāo)志符是B。
除了數(shù)據(jù)記錄之外還需要保持元數(shù)據(jù)。元數(shù)據(jù)包括不同記錄上的作為它們的類型的函數(shù)的信息。從而,需要識別標(biāo)志符并且作為結(jié)果識別可得到的記錄上的信息,例如對各字段、各關(guān)鍵字、從屬、記錄長度等的描述。標(biāo)明式索引中的搜索方式是被元數(shù)據(jù)忘記的。它定位記錄、標(biāo)識標(biāo)志符(例如標(biāo)志符可前綴到記錄上)和構(gòu)建(復(fù)合)標(biāo)明式關(guān)鍵字。
從而依據(jù)本方面的第二個方面,在數(shù)據(jù)處理系統(tǒng)上執(zhí)行的數(shù)據(jù)庫文件管理系統(tǒng)所使用的存儲介質(zhì)中提供一種數(shù)據(jù)結(jié)構(gòu),其包括一個各數(shù)據(jù)記錄的各關(guān)鍵字上的索引;這些數(shù)據(jù)記錄至少為二種類型,其中第二類型的數(shù)據(jù)記錄從屬于第一類型的數(shù)據(jù)記錄。
依據(jù)該第二方面還在數(shù)據(jù)處理系統(tǒng)中執(zhí)行的數(shù)據(jù)庫文件管理系統(tǒng)所使用的存儲介質(zhì)中提供一種數(shù)據(jù)結(jié)構(gòu),其包括
一個各數(shù)據(jù)記錄的各標(biāo)明式關(guān)鍵字上的標(biāo)明式索引;由標(biāo)明式數(shù)據(jù)記錄組成的數(shù)據(jù)記錄至少為二種類型;其中第二類型的標(biāo)明式數(shù)據(jù)記錄從屬于第一類型的標(biāo)明式數(shù)據(jù)記錄。
依據(jù)該第二方面可實現(xiàn)各種優(yōu)點,包括□包括標(biāo)明式索引和標(biāo)明式數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu)可以保持不同數(shù)據(jù)項之間的關(guān)系。
□包括標(biāo)明式索引和標(biāo)明式數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu)可以鏈接邏輯上相關(guān)的項目。
□包括標(biāo)明式索引和標(biāo)明式數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu)可以同時地和有效式支持幾種數(shù)據(jù)模型。
□包括標(biāo)明式索引和標(biāo)明式數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu)可高效率保持?jǐn)?shù)據(jù)完整性。
□包括標(biāo)明式索引和標(biāo)明式數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu)可高效率檢索相關(guān)數(shù)據(jù)。
后面參照各具體實施例會詳細(xì)討論由本發(fā)明的數(shù)據(jù)庫文件管理系統(tǒng)提供的各種優(yōu)點。
請注意數(shù)據(jù)記錄可構(gòu)成為RAIF的一部分,或者可駐留在一個或多個獨立數(shù)據(jù)文件中。在后一種實施例中,當(dāng)然應(yīng)把各數(shù)據(jù)記錄鏈接到對應(yīng)的PAIF上。如后面參照各具體實施例的說明進一步闡述的那樣,一個給定的數(shù)據(jù)記錄可容納多于一個的搜索關(guān)鍵字。
還會顯示出通過一種新的統(tǒng)一和簡單的技術(shù)如何可以支持復(fù)雜的數(shù)據(jù)結(jié)構(gòu)和數(shù)據(jù)關(guān)系。
還會顯示出一種索引結(jié)構(gòu)如何可以為最小尺寸,并和關(guān)鍵字的長度無關(guān)。
本發(fā)明在不必預(yù)先考慮數(shù)據(jù)下(即,關(guān)鍵字范圍是未知的,記錄數(shù)量是未知的,假定數(shù)據(jù)記錄的隨機物理位置等等)固有地支持上面所提到的所有優(yōu)點。
依據(jù)本發(fā)明的另一個方面,在數(shù)據(jù)處理系統(tǒng)上執(zhí)行的數(shù)據(jù)庫文件管理系統(tǒng)所使用的存儲介質(zhì)中提供一種數(shù)據(jù)結(jié)構(gòu),其包括
一種存儲在存儲介質(zhì)中的并在塊組中所存儲的所述各數(shù)據(jù)記錄的各關(guān)鍵字上構(gòu)建的索引;借助通過鏈接手段和數(shù)據(jù)記錄鏈接的葉塊該索引布置在塊組中;所述索引特征在于,至少一個所述鏈接由存儲在同一塊中的至少二個的數(shù)據(jù)記錄共享。
利用一種實施例,該索引通過線索構(gòu)建。
此外,本發(fā)明還在數(shù)據(jù)處理系統(tǒng)上執(zhí)行的數(shù)據(jù)庫文件管理系統(tǒng)所使用的存儲介質(zhì)中提供一種數(shù)據(jù)結(jié)構(gòu),其包括一種存儲在存儲介質(zhì)中的并在塊組中所存儲的所述各數(shù)據(jù)記錄的各關(guān)鍵字上構(gòu)建的索引;借助通過鏈接手段和數(shù)據(jù)記錄鏈接的葉塊該索引布置在塊組中;所述索引特征在于,至少一個所述鏈接由存儲在同一塊中的至少二個的數(shù)據(jù)記錄共享;所述索引由依據(jù)權(quán)利要求1的一種分層索引構(gòu)成,并且所述基本分割索引的各塊和所述數(shù)據(jù)記錄鏈接。
為了理解本發(fā)明和了解在實踐中如何實現(xiàn)它,現(xiàn)參照各附圖按非限定性舉例的方式說明一種優(yōu)選實施,附圖是

圖1示出使用數(shù)據(jù)庫文件管理系統(tǒng)的系統(tǒng)的廣義化方塊圖;圖2示出用實體關(guān)系圖(ERD)表示的樣本數(shù)據(jù)庫結(jié)構(gòu),并用作示意目的;圖3示出圖2的數(shù)據(jù)庫,其根據(jù)關(guān)系數(shù)據(jù)模型用表表示,每個表保持少量數(shù)據(jù)具體值;圖4示出依據(jù)采用常規(guī)B+樹索引圖的文件管理系統(tǒng)的圖3的“客戶”表;圖5示出依據(jù)采用常規(guī)線索索引圖的文件管理系統(tǒng)的圖3的“客戶”表;圖6A-6C示出依據(jù)采用PAIF索引圖的文件管理系統(tǒng)的圖3的“客戶”表;
圖7A-7H示出依據(jù)本發(fā)明的一種實施例的構(gòu)建一個分層索引的圖示舉例;圖8A-8B示出依據(jù)本發(fā)明的另一種實施例的構(gòu)建一個分層索引的圖示舉例;圖9A-9G示出依據(jù)本發(fā)明的另一種實施例的構(gòu)建一個分層索引的圖示舉例;圖10A-10B示出依據(jù)本發(fā)明的另一種實施例的構(gòu)建一個分層索引的圖示舉例;圖11示出依據(jù)本發(fā)明的再一種實施例的構(gòu)建一個分層索引的圖示舉例;圖12示出依據(jù)本發(fā)明的一種實施例的在標(biāo)明式索引中使用標(biāo)志符的圖示舉例;圖13A-13E在五張圖中舉例示出依據(jù)本發(fā)明的一種實施例的標(biāo)明式索引中的數(shù)據(jù)記錄的從屬特性;圖14用圖示出一種標(biāo)明式索引以舉例出依據(jù)本發(fā)明的一種實施例的多維記錄;圖15圖示示出依據(jù)本發(fā)明的一種實施例的標(biāo)明式索引;圖16圖示舉例示出依據(jù)本發(fā)明的一種實施例提供的數(shù)據(jù)記錄間的關(guān)系特性;圖17A-17B圖示示出依據(jù)本發(fā)明的一種實施例的至數(shù)據(jù)記錄的鏈接的壓縮表示;圖18A-18D示出四個基準(zhǔn)檢測圖,顯示在響應(yīng)時間和文件尺寸上采用本發(fā)明的文件管理系統(tǒng)的數(shù)據(jù)庫與商用基于C樹的數(shù)據(jù)庫相比較的性能改進;以及圖19A-19D示出四個基準(zhǔn)檢測圖,顯示在響應(yīng)時間和文件尺寸上采用本發(fā)明的文件管理系統(tǒng)的數(shù)據(jù)庫與商用基于B樹的數(shù)據(jù)庫相比較的性能改進。
首先把注意轉(zhuǎn)到示出采用本發(fā)明的數(shù)據(jù)庫文件管理系統(tǒng)的一個系統(tǒng)的廣義化方塊圖的圖1。這樣,通過計算機1,例如采用可從美國英特公司購到的奔騰微處理3的個人計算機(P.C.)具有一個和處理器3通信并控制計算機1的整個操作的操作系統(tǒng)模塊5,例如可從美國微軟公司購到的視窗NT。
P.C.1還容納多個用戶應(yīng)用程序,但只示出三個,分別是7、9和11。以周知的自身方法在操作系統(tǒng)S的控制下處理器3執(zhí)行用戶應(yīng)用程序,用戶應(yīng)用程序負(fù)責(zé)經(jīng)鍵盤13由I/O端口15和操作系統(tǒng)中介而饋入的用戶輸入。通過I/O端口17和操作系統(tǒng)S的中介,用戶應(yīng)用程序還和監(jiān)視器16通信以便顯示數(shù)據(jù)。用戶應(yīng)用程序可借助數(shù)據(jù)庫管理系統(tǒng)模塊20訪問數(shù)據(jù)庫中存儲的數(shù)據(jù)。泛化的數(shù)據(jù)庫管理系統(tǒng),如圖1中概括示出那樣,包括高層管理系統(tǒng)22,后者按規(guī)則在“邏輯”方式下觀察底層數(shù)據(jù)并借助自身周知的例如SQL數(shù)據(jù)定義和數(shù)據(jù)操縱語言(DDL和DML)響應(yīng)用戶應(yīng)用程序。數(shù)據(jù)庫管理系統(tǒng)典型地以周知的自身方式利用一個數(shù)據(jù)字典24,后者包括保持底層數(shù)據(jù)上的信息的元數(shù)據(jù)。
數(shù)據(jù)的底層結(jié)構(gòu)由數(shù)據(jù)庫文件管理系統(tǒng)26管理,它和索引圖和實際的各數(shù)據(jù)記錄28相關(guān)聯(lián)。高層管理系統(tǒng)22接收和處理的“高層”邏輯指令(例如SQL命令)被轉(zhuǎn)換成訪問或更新數(shù)據(jù)庫文件(組)中所存儲的數(shù)據(jù)記錄的“低層”命令,所以數(shù)據(jù)庫文件管理系統(tǒng)考慮數(shù)據(jù)記錄的實際結(jié)構(gòu)和組織。數(shù)據(jù)庫文件管理系統(tǒng)的“高層”部分和“低層”部分可以通過自身所知的應(yīng)用程序員接口(API),例如可從微軟公司購買的微軟開放數(shù)據(jù)庫連通(ODBC)接口,通信。采用ODBC使數(shù)據(jù)庫文件管理系統(tǒng)的“高層”模塊或應(yīng)用程序能透明地和支持ODBC標(biāo)準(zhǔn)的不同“數(shù)據(jù)庫文件管理系統(tǒng)”通信。本文中使用的訪問或更新數(shù)據(jù)記錄的用語包括所有類型的數(shù)據(jù)操縱和“尋找”、“插入”、“刪除”和“修改”數(shù)據(jù)記錄以及相應(yīng)的提供數(shù)據(jù)庫的構(gòu)建、修改和刪除的DDL命令。圖1還示意出以內(nèi)部存儲器模塊29(例如16兆字節(jié)并可能采用高速緩存子模塊)和外部存儲器模塊29′(例如1吉字節(jié))為形式的存儲介質(zhì)。典型地,外部存儲器29′是通過外部、相對慢的通信總線(未示出)存取的,而內(nèi)部存儲器通常通過較快的內(nèi)部總線(未示出)存取。通常,由于內(nèi)部存儲器空間比較小,只把當(dāng)前執(zhí)行的那些應(yīng)用程序(或它們的一部分)從外部存儲器裝入到內(nèi)部存儲器。出于同樣原因,不能在內(nèi)部存儲器容納整個大的數(shù)據(jù)庫,在外部存儲器中存儲它的大部分。從而,響應(yīng)應(yīng)用生成的查找數(shù)據(jù)庫中的一個或多個數(shù)據(jù)記錄的查詢,數(shù)據(jù)庫管理系統(tǒng)利用操作系統(tǒng)業(yè)務(wù)(即,I/O操作)以通過外部通信總線把一個或多個數(shù)據(jù)塊從外部存儲器裝入內(nèi)部存儲器。若未在裝入的塊中發(fā)現(xiàn)要查找的數(shù)據(jù)記錄,需要更多的I/O操作直到擊中所查找的數(shù)據(jù)記錄。
請注意,為了簡化表示,內(nèi)部存儲器29和外部存儲器29′是獨立于各模塊5、7、9、11、20的。很明顯,雖然未示出,各模塊(操作系統(tǒng)、DBMS以及各用戶應(yīng)用程序)通常存儲在外部存儲器中并且把它們當(dāng)前被執(zhí)行部分裝入到內(nèi)部存儲器。
計算機1可作為工作站作為局域網(wǎng)(LAN,未示出)的一部分,LAN使用一個基本上也具有圖1的相同結(jié)構(gòu)的服務(wù)器。在工作站和服務(wù)器采用基于客戶/服務(wù)器協(xié)議的情況下在服務(wù)器上駐留著所述模塊(包括數(shù)據(jù)庫記錄28本身)的主要部分。
業(yè)內(nèi)人士容易理解上面參照圖1描述的各實施例只是許多可能變型中的二種。從而,作為非限制性的例子,數(shù)據(jù)庫可以是駐留在因特網(wǎng)Web站點上的在線數(shù)據(jù)庫。本發(fā)明當(dāng)然不限制在對小內(nèi)部存儲器和大外部存儲器的具體劃定上。這樣,例如,一種修改的實施例采用大的內(nèi)部和外部存儲器,并且再一種修改實施例只使用內(nèi)部存儲器。
還應(yīng)注意,為了解釋的簡明,系統(tǒng)1是以簡化和泛化的形式示出的。數(shù)據(jù)庫文件管理系統(tǒng)的以及尤其是數(shù)據(jù)庫文件管理系統(tǒng)中通常包含的各種構(gòu)件的更詳細(xì)討論例如可在上述“Database System Concepts”一書的第7章中得到。
在說明了本發(fā)明的系統(tǒng)的總體結(jié)構(gòu)后,現(xiàn)注意用實體關(guān)系圖(ERD)表示的樣本數(shù)據(jù)庫結(jié)構(gòu),其用于示意目的。這樣,圖2的ERD包括實體“客戶”32和“賬戶”34以及“n對m”“存款”36關(guān)系,該關(guān)系表示其給定客戶可具有多于一個的賬戶并且同樣某給定帳戶可能由多于一個的客戶擁有。
如所示,實體“客戶”具有下述屬性(字段)“客戶_Id”38是唯一標(biāo)識每個客戶的關(guān)鍵字屬性,“姓名”39代表客戶的姓名而“地址”40代表客戶的地址。實體“賬戶”具有下述屬性(字段)“賬號”42是唯一標(biāo)識每個賬戶的關(guān)鍵字屬性,而“余額”43持有該帳戶的余額。關(guān)系“存款”由“客戶”和“賬戶”實體的一對關(guān)鍵字構(gòu)成,從而每個對表示由特定客戶擁有的具體帳戶。
現(xiàn)轉(zhuǎn)到圖3,其中示出用三個分別對應(yīng)于關(guān)系數(shù)據(jù)模型32、34、36對應(yīng)的表50、51和52表示的一個數(shù)據(jù)庫,每個表持有一些示意目的的數(shù)據(jù)具體值。請注意“客戶”表的關(guān)鍵字字段(“客戶_ID”的長度為5個數(shù)字,而“帳戶”表的關(guān)鍵字字段(“Acc_ID”)的長度為6個數(shù)字??蛻舯沓钟?個數(shù)據(jù)具體值55-59,帳戶表持有2個數(shù)據(jù)具體值65、66,而存款表持有3個數(shù)據(jù)具體值70-72。
根據(jù)現(xiàn)有技術(shù),作為一種規(guī)則,每個表有一個不同的使用主關(guān)鍵字的索引文件。從而,圖4示出依據(jù)采用常規(guī)B樹編索引圖的文件管理系統(tǒng),圖3的“客戶”表的一個基礎(chǔ)索引文件。如所示,索引文件80由三個塊80a-80c組成,分別代表一個根塊和二個葉塊。各數(shù)據(jù)記錄被隨機地組織到一個獨立的持有五個數(shù)據(jù)記錄83-87的文件81中。每個塊由一對接一對的字段(例如塊80a中的82a-82b和83a-83b)。在每對中,第一字段代表搜索關(guān)鍵字值,而第二字段代表一個諸如標(biāo)識要搜索的下個塊的號碼的鏈接或者在葉塊的情況下代表至數(shù)據(jù)記錄的一個鏈接例如標(biāo)識該數(shù)據(jù)記錄的號碼。后一種實現(xiàn)構(gòu)成一種把數(shù)據(jù)記錄和塊相關(guān)聯(lián)的非限制性的實施例。在圖4的特定實施例中,對其關(guān)鍵字等于或小于12355的記錄的搜索從根塊80a轉(zhuǎn)到塊80b上。
從而,對其關(guān)鍵字為12355(82a)的某記錄的搜索從根塊80a開始并通過鏈接82b轉(zhuǎn)到塊80b,該搜索關(guān)鍵字12355(86a)和鏈接86b相關(guān)聯(lián),其表明由該搜索關(guān)鍵字標(biāo)識的數(shù)據(jù)記錄的地址在數(shù)據(jù)文件81中。由搜索關(guān)鍵字“12355)標(biāo)識的數(shù)據(jù)記錄(圖3中的57)與以前不同的放到數(shù)據(jù)文件81中的第四個位置上。
表“帳戶”和“存款”同樣分別布置在二個獨立的B樹索引文件中。
圖4的B樹索引文件表現(xiàn)出該方法的明顯缺點中的一個缺點,即關(guān)鍵字(搜索關(guān)鍵字)是重復(fù)的,即在內(nèi)部塊中(即在該索引圖中)以及和B樹索引關(guān)聯(lián)的數(shù)據(jù)記錄中都持有它們。這樣,例如(圖3中的)數(shù)據(jù)記錄57的搜索關(guān)鍵字不僅作為數(shù)據(jù)記錄86的構(gòu)成部分保持在文件81中還保持在塊80b中(搜索關(guān)鍵字86a)并且有時還保持父塊例如80a(搜索關(guān)鍵字82)中。
因此,容易注意到對于大文件(許多現(xiàn)實生活情況為這種情況)搜索關(guān)鍵字的重復(fù)(尤其長關(guān)鍵字下)造成需要大存儲量并還負(fù)面影響性能的膨脹的索引。
圖5示出一種依據(jù)采用周知的線索索引圖的文件管理系統(tǒng)的圖3的“客戶”表的不同索引圖。從而,線索索引文件90包括多個節(jié)點和鏈接,其中每個節(jié)點代表一個偏移位置而鏈接代表該偏移處的值。表91具有四個列。第一列表示要使用哪個數(shù)字位置,第二列表示該數(shù)字的值。數(shù)據(jù)值把該關(guān)鍵字分割成二個子集。第三列和第四列指向至下個步驟的搜索操作。
為了定位某給定搜索關(guān)鍵字,例如12355,由根表示的位置處數(shù)字(由節(jié)點90a指示的位置“5”,也是表91的第一行的第一列)和同一行的第二列所規(guī)定的值(值“5”,其也由線索索引中的鏈接90b表明)比較。由于所查找的搜索關(guān)鍵字12355的位置5上的數(shù)字確實為5,控制傳送到行2(由表91的第一行的第三列表明)。接著,所查找的搜索關(guān)鍵字的位置3處的數(shù)字(樹中的90c,亦為表91中第二行的第一列的值)和值3(鏈接90d,亦為表91的第二行中的第二列的值)比較。由于出現(xiàn)匹配,控制傳送到該表的行3。在該步驟中,所查找的搜索關(guān)鍵字的位置4處的數(shù)字不和行3的列2處規(guī)定的值匹配(即,“5”對“4”),從而如表91的列4(“不相等”)所示那樣,得到至所查找的數(shù)據(jù)記錄57(圖4中的86)的鏈接。
表“帳戶”和“存款”分別布置在二個獨立的線索索引文件中。和圖4的B樹索引文件不同,圖5示出的索引文件不必非要復(fù)制搜索關(guān)鍵字。和B樹不同,在線索(90)中只保持偏移和鏈接值而不是整個關(guān)鍵字。在該意義下它造成一個優(yōu)于B技術(shù)的優(yōu)點。
然而,如所規(guī)定的那樣,上述線索和一些缺點關(guān)聯(lián)它在事先了解數(shù)據(jù)庫的內(nèi)容并相繼地為得到均衡式結(jié)構(gòu)而分割各關(guān)鍵字的代價下保持?jǐn)?shù)據(jù)的均勻分布。由于圖2中所描述的數(shù)據(jù)庫類型具有動態(tài)特性,例如對于圖2的具體數(shù)據(jù)庫,比如新客戶開帳戶、老客戶取消帳戶、新客戶注冊為現(xiàn)有帳戶的共同擁有者等等,事先了解數(shù)據(jù)庫的內(nèi)容很明顯是不希望有的,因為它造成過分的限制。
上述樹的另一個缺點是它不支持序貫處理。樹的導(dǎo)航應(yīng)產(chǎn)生按下述次序-83、86、87、84、85(圖4)而不是按關(guān)鍵字的次序訪問數(shù)據(jù)。
在示出已知的線索索引圖(參照圖5)后,下面說明本發(fā)明的一種索引的各實施例,該索引包括基本分割索引并解決上面說明的和迄今已知的技術(shù)相關(guān)的各種缺點。具體地會示出以分層索引為形式的索引的一種優(yōu)選實施例,以及以線索為形式的基本分割索引的優(yōu)選實施例。這些例子不意味著束縛。
在轉(zhuǎn)到對各實施例的解釋之前,先參照圖6A-6C說明一種新的命名為PAIF的線索索引圖。如后面所示,PAIF不限于樹結(jié)構(gòu)。在PAIF的基礎(chǔ)上,參照圖7-9說明分層索引的各種實施例,其中包括在PAIF的代表關(guān)鍵字上構(gòu)建的代表索引。對圖7至9的各實施例,代表索引的索引圖以及基本分割索引的索引圖基本上是同一個PAIF。
在圖10中說明帶有不同線索的分層索引的另一種實施例。如會示出的那樣,在圖10的實施例中,代表索引和線索基本上也是相同的。但這并不是必須的,并且例如參照圖10舉例示出線索和代表索引是不同的。
現(xiàn)轉(zhuǎn)到圖6A-6C,其中示出圖3的“客戶”表在采用PAIF的文件管理系統(tǒng)下的一系列圖示。術(shù)語“事務(wù)處理”和“操作”可互換地使用。
在下面的說明中將回顧使能PAIF中的數(shù)據(jù)操縱的各基本命令,即,對PAIF插入新數(shù)據(jù)記錄、在PAIF中查找數(shù)據(jù)記錄和刪除現(xiàn)有記錄。毫無疑問,業(yè)內(nèi)人士理解在這些基元的基礎(chǔ)上可以實現(xiàn)更復(fù)雜的數(shù)據(jù)操縱操作(例如“合并”)。
現(xiàn)轉(zhuǎn)到圖6A,其中示出具有搜索關(guān)鍵字“12345”(即5字節(jié)長搜索關(guān)鍵字)的用戶數(shù)據(jù)記錄103(圖3客戶表中的56)。圖6A的PAIF100當(dāng)然是微不足道的,其由單個通過長鏈接102鏈接到數(shù)據(jù)記錄103的節(jié)點101(既代表根節(jié)點又代表葉節(jié)點)構(gòu)成。
節(jié)點101代表所述搜索關(guān)鍵字中的偏移0,鏈接102代表該規(guī)定偏移處的搜索關(guān)鍵字區(qū)段(該特定實施例下為1字節(jié)長)的值“1”。
如圖6A清楚地示出那樣,記錄103和一條是一個組合的搜索路徑關(guān)聯(lián),該組合由節(jié)點101和鏈接102組成并定義一個偏移和一個有關(guān)的搜索關(guān)鍵字區(qū)段的值,該值遵從該規(guī)定的數(shù)據(jù)記錄的搜索關(guān)鍵字內(nèi)的具體偏移處上的對應(yīng)搜索關(guān)鍵字區(qū)段的值。更具體地,搜索關(guān)鍵字“12345”內(nèi)偏移0處的一字節(jié)的搜索關(guān)鍵字區(qū)段的值確實為“1”。
現(xiàn)轉(zhuǎn)到圖6B-1,其示出在結(jié)束相繼的插入具有客戶_Id_號碼“12445”107(圖3客戶表中的數(shù)據(jù)具體值58)的事務(wù)處理后的PAIF。數(shù)據(jù)記錄103和107的搜索關(guān)鍵字之間的不同僅在第三字節(jié)(偏移2),即分別為“3”和“4”。
由根節(jié)點101和鏈接102定義的組合不足以區(qū)別數(shù)據(jù)記錄103和107,因為對于這二個數(shù)據(jù)記錄偏移0處的1字節(jié)搜索關(guān)鍵字區(qū)段的值都是“1”。從而,節(jié)點104指示區(qū)分這二個記錄的最低偏移,而鏈接105和106指示在偏移2處各自的1字節(jié)搜索關(guān)鍵字區(qū)段“3”和“4”。應(yīng)注意,PAIF的實現(xiàn)不局限于圖中示出的具體例子,而是可取決于具體應(yīng)用采用不同的實現(xiàn)。這樣,例如圖6B-2和6B-3示出實現(xiàn)圖6B-1的另二種選擇,其中在圖6B-2中在PAIF中呈現(xiàn)整個關(guān)鍵字(例如,在從根節(jié)點處開始的并在數(shù)據(jù)記錄處結(jié)束的鏈接中規(guī)定記錄12445的所有數(shù)字)。和其中只在樹中出現(xiàn)絕對需要的節(jié)點的圖6B-3的稀疏實現(xiàn)相比,圖6B-2的實現(xiàn)是清楚的但在空間上不那么有效的。當(dāng)然可應(yīng)用其它變型。
在進入說明對現(xiàn)有數(shù)據(jù)庫插入新數(shù)據(jù)記錄的過程之前,請記住線索RAIF中的節(jié)點越高,它所指示的偏移越小(例如,在圖6B的RAIF中,節(jié)點101高于節(jié)點104,從而前者的偏移較小--“0”對“2”)。
概言之,向現(xiàn)有PAIF插入新數(shù)據(jù)記錄包括執(zhí)行下述步驟?。刂粭l從根節(jié)點開始到某個和一個葉節(jié)點關(guān)聯(lián)的數(shù)據(jù)記錄(稱為“參照數(shù)據(jù)記錄”)結(jié)束的參照路徑前進;在該參照路徑的每個節(jié)點上,若從所述節(jié)點發(fā)源的某鏈接所表達(dá)的值等于所述節(jié)點規(guī)定的偏移位置上的1字節(jié)長的關(guān)鍵字部分的值則沿該鏈接前進;在該節(jié)點中規(guī)定的偏移超出該關(guān)鍵字中任何相應(yīng)關(guān)鍵字區(qū)段的情況下,或者若不存在具有所述值的鏈接,沿任一至任一參照數(shù)據(jù)記錄的路徑前進;ⅱ.比較參照數(shù)據(jù)記錄的搜索關(guān)鍵字和新數(shù)據(jù)數(shù)據(jù)記錄的搜索關(guān)鍵字,以確定區(qū)分這二者的搜索關(guān)鍵字區(qū)段的最小偏移(以下稱區(qū)分偏移)。
ⅲ.根據(jù)該區(qū)分偏移的值,繼續(xù)下述步驟(ⅲ.0_ⅲ.3)中之一ⅲ.0若數(shù)據(jù)記錄相等則結(jié)束;或ⅲ.1若區(qū)分偏移和該參照路徑中的節(jié)點之一所標(biāo)明的偏移匹配,增加另一條從所述之一節(jié)點起源的鏈接,并對所述鏈接分配從該數(shù)據(jù)記錄的搜索關(guān)鍵字取出的該區(qū)分偏移處的搜索關(guān)鍵字區(qū)段的值;或者ⅲ.2若該區(qū)分偏移大于其所鏈接的葉節(jié)點所指示的偏移,通過鏈接對參照數(shù)據(jù)記錄;ⅲ.2.1斷開來自參照數(shù)據(jù)記錄的鏈接(即,它暫時保持“松開”)并把該鏈接移到新節(jié)點;對論新節(jié)點分配該區(qū)分偏移的值;ⅲ.2.2連接參照數(shù)據(jù)記錄和該新節(jié)點(它現(xiàn)在變成葉節(jié)點)并對該鏈接(長鏈接)分配從參照數(shù)據(jù)記錄的搜索關(guān)鍵字在區(qū)分偏移處取出的搜索關(guān)鍵字區(qū)段的值;ⅲ.2.3通過一個鏈接連接該新數(shù)據(jù)記錄和新節(jié)點,并對該鏈接(長鏈接)分配從該新數(shù)據(jù)記錄的搜索關(guān)鍵字在區(qū)分偏移處取出的搜索關(guān)鍵字區(qū)段的值;或者ⅲ.3若不滿足ⅲ.0、ⅲ.1和ⅲ.2的條件,在參照搜索路徑中,存在一個父節(jié)點和一個子節(jié)點,從而該區(qū)分偏移大于分配給該父節(jié)點的偏移同時小于分配給該子節(jié)點的偏移(被考慮的情況A),或者參照搜索路徑里的所有節(jié)點都具有大于該區(qū)分偏移的值(被考慮的情況B);相應(yīng)地施以下述子步驟ⅲ3.1對情況A和B,建立一個新節(jié)點并對該節(jié)點分配所述區(qū)分偏移的值,僅對情況A-斷開從該父節(jié)點到該子節(jié)點的鏈接并把該鏈接移到一個新的內(nèi)部節(jié)點上(即,該子節(jié)點暫時保持“松開”);ⅲ.3.2對情況A和B,通過一個鏈接(長鏈接)連接該新數(shù)據(jù)記錄和所述新內(nèi)部節(jié)點;分配給該鏈接的值是從該新數(shù)據(jù)記錄的搜索關(guān)鍵字的區(qū)分偏移處得到的搜索關(guān)鍵字區(qū)段的值;ⅲ.3.3對于情況A和B,通過一個新鏈接把該新節(jié)點在A情況下與父節(jié)點或在B情況下與根節(jié)點連接(即,該新節(jié)點在情況A下變?yōu)樾碌母腹?jié)點而在情況B下變?yōu)樾碌母?jié)點),而分配給所述鏈接的值是從參照數(shù)據(jù)記錄的搜索關(guān)鍵字取出的由該新節(jié)點指示的偏移處的搜索關(guān)鍵字區(qū)段。
請注意對于不同的參照路徑可能得到不同的PAIF。
為了更好的理解,將連續(xù)地對圖65的具體PAIF應(yīng)用上述“插入數(shù)據(jù)記錄”操作,每次一個不同的數(shù)據(jù)記錄,以便列舉出上面步驟ⅲ.1-ⅲ.3中規(guī)定的三種不同情況,從而分別產(chǎn)生在圖6C-1至6C-3中示出的三個PAIF。
在第一個例子中向圖6B的PAIF插入具有客戶_Id(或搜索關(guān)鍵字)“12546”的客戶數(shù)據(jù)記錄(圖3中客戶表里的59)。如步驟(ⅰ)所規(guī)定,沿著從根101開始并在代表“參照數(shù)據(jù)記錄”的數(shù)據(jù)記錄103處結(jié)束的參照路徑移動。這是這樣進行的,從節(jié)點101沿鏈接102(在被插入數(shù)據(jù)記錄的偏移“0”中1位長數(shù)字的值是“1”),然后因為在偏移“2”處(由節(jié)點104規(guī)定)鏈接105和106的值(分別為4和3)都不和被插入關(guān)鍵字在偏移2的值(“5”)相同,沿任一路徑(在該具體實施例中通過鏈接106)前進到參照數(shù)據(jù)記錄103。
步驟(ⅱ)中規(guī)定的比較操作產(chǎn)生新數(shù)據(jù)記錄的搜索關(guān)鍵字和參照數(shù)據(jù)記錄(103)的搜索關(guān)鍵字的不同位于偏移2(“5”對“3”)和偏移4(“6”對“5”)處。從而最小偏移(“區(qū)分偏移”)為2。
現(xiàn)轉(zhuǎn)到步驟(ⅲ),由于該區(qū)分偏移等于分配給節(jié)點104的偏移,滿足步驟ⅲ.1的條件。從而,并如圖6C-1中所示,新鏈接111把節(jié)點104連接到新數(shù)據(jù)記錄112。根據(jù)新數(shù)據(jù)記錄112的搜索關(guān)鍵字中位置2處的字節(jié)值,對鏈接111分配的值為5。這樣,圖6C-1的PAIF110是把數(shù)據(jù)記錄112插入到圖6B-1的PAIF中的結(jié)果。
現(xiàn)轉(zhuǎn)到第二個例子,具有客戶Id(或搜索關(guān)鍵字)“12355”的數(shù)據(jù)記錄(圖3的客戶表中的57)被插入到圖6B-1的PAIF中。上面規(guī)定的步驟ⅰ和ⅱ產(chǎn)生從節(jié)點101開始在數(shù)據(jù)記錄103結(jié)束的一條參照路徑。
現(xiàn)轉(zhuǎn)到步驟(ⅲ),因為區(qū)分偏移3大于該參照搜索路徑中的葉節(jié)點104的偏移2,滿足步驟ⅲ.2的條件。因此,遵照步驟ⅲ.2.1并如圖6C-2的結(jié)果PAIF120所示,從參照數(shù)據(jù)記錄103斷開鏈接106并連接到一個新節(jié)點121。對該新節(jié)點賦予區(qū)分偏移3。然后,遵照步驟ⅲ.2.2,通過新鏈接連接參照數(shù)據(jù)記錄103和新節(jié)點121。對該新鏈接分配值4(為從參照數(shù)據(jù)記錄103的搜索關(guān)鍵字“12345”的區(qū)分偏移3處取出的數(shù)字值);并且最后,如步驟ⅲ.2.3中規(guī)定那樣,通過分配著值“5”(為從新數(shù)據(jù)記錄123的搜索關(guān)鍵字“12355”的區(qū)分偏移3處取出的數(shù)字)的鏈接124,把新數(shù)據(jù)記錄123連接到節(jié)點121。從而圖6C-2的PAIF120是把數(shù)據(jù)記錄123插入到圖6B-1的PAIF108中的結(jié)果。
第三個和第最后一個例子涉及把具有客戶_Id(或搜索關(guān)鍵字)“11346”的客戶數(shù)據(jù)記錄(圖3的客戶表中的55)插入到圖6B-1的PAIF。應(yīng)用上述步驟ⅰ和ⅱ造成從節(jié)點101前進到數(shù)據(jù)記錄103(圖6B中)并確定區(qū)分偏移為1。
這樣的步驟ⅲ中,滿足步驟ⅲ.3的條件。從而,遵照步驟ⅲ.3.1并如圖6C-3的結(jié)果PAIF130所示,鏈接102移到一個新的內(nèi)部節(jié)點131上。對新內(nèi)部節(jié)點131分配值1(即區(qū)分偏移)。如步驟ⅲ.3.2所規(guī)定,通過新鏈接133直接連接新數(shù)據(jù)記錄和節(jié)點131。分配給鏈接133的值為1(從新數(shù)據(jù)記錄132的搜索關(guān)鍵字“11346”在區(qū)分偏移1處取到的數(shù)字),并且最后,遵照步驟ⅲ.3.3,通過分配著值2(從參照數(shù)據(jù)記錄103的搜索關(guān)鍵字“12345”在區(qū)分偏移(1)處取到的數(shù)字)的鏈接134把新內(nèi)部節(jié)點131鏈接到節(jié)點104。
雖然上面參照圖6A-6C說明的PAIF可容納在一個塊內(nèi),然而最好分隔“節(jié)點”和“數(shù)據(jù)記錄”,從而把各數(shù)據(jù)記錄集中到不同的一個或多個文件中。對圖6C-3的PAIF應(yīng)用該方法造成產(chǎn)生保持記錄132、103、107的數(shù)據(jù)文件記錄。鏈接133、106和105當(dāng)然變成長鏈接。
很明顯,若某次插入過程造成發(fā)現(xiàn)在PAIF中已經(jīng)存在要插入的數(shù)據(jù)記錄則向調(diào)用插入命令的過程回送適當(dāng)?shù)某鲥e消息。
請注意,在這些例子中假定整個PAIF駐留在單個塊中。很明顯,通過遵循上述“插入過程”插入更多的數(shù)據(jù)記錄時可能出現(xiàn)塊溢出,這必須(后面更詳細(xì)討論)調(diào)用“分離塊”過程,然后需要進入要查找的塊并按上面規(guī)定的方式執(zhí)行插入過程。
在說明了典型的“插入”事務(wù)處理后,現(xiàn)說明“尋找(或檢索)一個數(shù)據(jù)記錄”。從而,為了用某搜索關(guān)鍵字在現(xiàn)有PAIF中找到某數(shù)據(jù)記錄(以下稱為被查找數(shù)據(jù)記錄),應(yīng)執(zhí)行下述步驟?。匾粭l從根節(jié)點開始并在和某葉節(jié)點鏈接的某數(shù)據(jù)記錄處結(jié)束的搜索路徑前進,并對該搜索路徑上的每個節(jié)點(以下稱為“當(dāng)前節(jié)點”)執(zhí)行下述子步驟?。?.對從當(dāng)前節(jié)點起源的每個鏈接比較當(dāng)前節(jié)點值在偏移點所定義的被查找數(shù)據(jù)記錄的搜索關(guān)鍵字區(qū)段和分配給所述鏈接的值;在匹配情況下沿所述鏈接前進并返回到步驟?。?;ⅰ.2.若從當(dāng)前節(jié)點發(fā)出的鏈接都不和被查找數(shù)據(jù)記錄的搜索關(guān)鍵字區(qū)段匹配,回送“未找到”并結(jié)束尋找過程;ⅰ.3.若到達(dá)某數(shù)據(jù)記錄(以下稱為“參照數(shù)據(jù)記錄”),把被查找數(shù)據(jù)記錄的整個搜索關(guān)鍵字和參照數(shù)據(jù)記錄的關(guān)鍵字進行比較;?。?.1若匹配,回送“找到”(并在“檢察”情況下還回送整個數(shù)據(jù)記錄)并且結(jié)束尋找過程;或者?。?.2在不匹配情況下回送“未找到”并結(jié)束尋找過程。
為了更好地理解“尋找”過程,應(yīng)用圖6C-3的具體PAIF二次,分別造成“找到”和“未找到”結(jié)果。
從而,考慮通過搜索關(guān)鍵字“12445”尋找一個數(shù)據(jù)記錄(以下稱被查找數(shù)據(jù)記錄)。根據(jù)步驟ⅰ.1,被查找數(shù)據(jù)記錄的根節(jié)點(偏移0)在該偏移處分配的數(shù)字“1”的值和鏈接102(從節(jié)點101發(fā)出的唯一鏈接)的所分配的值進行比較。因為出現(xiàn)匹配,控制移到節(jié)點131。再次根據(jù)步驟ⅰ.1,分配給被查找數(shù)據(jù)記錄的節(jié)點131(偏移1)的在該偏移下的數(shù)字值(“2”)和分配給鏈接134的值進行比較。此處也得到匹配,從而控制移到節(jié)點104。然后,根據(jù)步驟?。?,分配給被查找數(shù)據(jù)記錄的節(jié)點104(偏移2)在該偏移處的數(shù)字值“4”和從節(jié)點104發(fā)出的每個鏈接進行比較。比較產(chǎn)生和鏈接105的匹配,從而控制移到數(shù)據(jù)記錄107。
根據(jù)步驟?。?,被查找數(shù)據(jù)記錄的搜索關(guān)鍵字和數(shù)據(jù)記錄107的關(guān)鍵字比較,由于得到匹配回送“找到”結(jié)果(步驟ⅰ.3.1)。
現(xiàn)轉(zhuǎn)到第二個例子,考慮被查找數(shù)據(jù)記錄具有搜索關(guān)鍵字“12463的情況。重復(fù)利用上例描述的過程,不過在步驟?。?中被查找數(shù)據(jù)記錄和數(shù)據(jù)記錄107之間的比較產(chǎn)生不匹配,并根據(jù)步驟ⅰ.3.2回送“未找到”結(jié)果。
現(xiàn)說明通常的“刪除數(shù)據(jù)記錄”的事務(wù)處理。從而,作為第一階段先對PAIF進行“尋找數(shù)據(jù)記錄”事務(wù)處理。在“未找到”情況下,向調(diào)用該“刪除”命令的過程回送適當(dāng)?shù)某鲥e消息。另一種情況下找到被查找的數(shù)據(jù)記錄。為了清晰“刪除”過程的解釋,引入下述術(shù)語。
和被查找數(shù)據(jù)記錄鏈接的葉節(jié)點被稱為“目標(biāo)節(jié)點”。目標(biāo)節(jié)點的父節(jié)點稱為“先驅(qū)目標(biāo)節(jié)點”。把先驅(qū)目標(biāo)節(jié)點連接到目標(biāo)節(jié)點的鏈接稱為“先驅(qū)鏈接”,而把目標(biāo)節(jié)點連接到其子節(jié)點(或某不是被查找數(shù)據(jù)記錄的數(shù)據(jù)記錄)的鏈接稱為“目標(biāo)鏈接”。在記住這些術(shù)語,執(zhí)行下述步驟?。畡h除被查找數(shù)據(jù)記錄以及鏈接到目標(biāo)節(jié)點的鏈接;ⅱ.若目標(biāo)節(jié)點上剩余的鏈接數(shù)量大于或等于2,則結(jié)束刪除過程;ⅲ.另一方面,若目標(biāo)節(jié)點上剩余的鏈接數(shù)量恰好為一個(即,一個目標(biāo)鏈接),則ⅲ.1通過把先驅(qū)鏈接從先驅(qū)節(jié)點連接到所述子節(jié)點(或到某數(shù)據(jù)記錄)“旁路”目標(biāo)節(jié)點;以及ⅲ.2刪除目標(biāo)節(jié)點和目標(biāo)鏈接;結(jié)束刪除過程。
請注意,現(xiàn)行步驟是“更節(jié)儉的存儲器管理“步驟,以便釋放由目標(biāo)節(jié)點和目標(biāo)鏈接占據(jù)的空間,從而可把這些空間分配給該塊中的其它節(jié)點和鏈接。還請注意,所述步驟(ⅲ)是選用的。
為了更好地理解,上述“刪除數(shù)據(jù)記錄”過程現(xiàn)應(yīng)用到圖6C-3的特定PAIF。
從而,響應(yīng)命令“刪除具有搜索關(guān)鍵字=11346的記錄”,根據(jù)上面說明的過程在該PAIF搜索該記錄。數(shù)據(jù)記錄132被找到并且符合上述的步驟ⅰ,刪除該數(shù)據(jù)記錄以及引到該記錄上的鏈接133。由于在該刪除后,目標(biāo)節(jié)點131只留下唯一的目標(biāo)鏈接134,應(yīng)用步驟ⅲ和ⅲ.1,從而先鏈接102繞過目標(biāo)節(jié)點131直接鏈接到后者的子節(jié)點104上。接著,遵照步驟ⅱ.2,刪除目標(biāo)節(jié)點131和目標(biāo)鏈接134,從而得到圖6B-1中示出的6B-1。參照圖6C-1的PAIF給出另一個例子。從而,響應(yīng)命令“刪除具有搜索關(guān)鍵字=12546的記錄”,根據(jù)上面說明的過程在該PAIF中搜索該記錄。數(shù)據(jù)記錄112被找到并且符合上面的步驟ⅰ,刪除掉該數(shù)據(jù)記錄以及引到該記錄上的鏈接(111)。按步驟ⅱ中的規(guī)定,由于目標(biāo)節(jié)點104中剩余的鏈接數(shù)量為2(即鏈接105和106),則結(jié)束刪除過程。結(jié)果PAIF重新是圖6B-1中示出的PAIF。
另一種常見的基本操作是“修改現(xiàn)有數(shù)據(jù)記錄”,例如,改變某現(xiàn)有客戶的家庭地址。“修改”操作通常是通過選擇性地應(yīng)用上述基本操作實現(xiàn)的。為了執(zhí)行一個“修改”命令應(yīng)區(qū)分下述各情況
1.對搜索關(guān)鍵字之外的字段施以修改(例如修改客戶Id號碼=“xxxxx”的客戶的地址)--在該情況下修改過程簡單地調(diào)用“尋找”操作(具有用戶Id號碼=“xxxxx”的數(shù)據(jù)記錄)。得到被查找數(shù)據(jù)記錄后,用新地址替代舊地址。
2.對搜索關(guān)鍵字字段施以修改(例如把帳號從“xxxxxx”改成“yyyyyy”)。該命令是由另外二個基本操作序列實現(xiàn)的,即,刪除“賬號”=“xxxxxx”的數(shù)據(jù)記錄并且接著插入“帳號”=“yyyyyy”的數(shù)據(jù)記錄,反之亦可。很明顯,一次修改事務(wù)處理可由這兩種情況組成。
在上面的各例中每個搜索關(guān)鍵字是用一串字節(jié)表示的,從而通過把搜索關(guān)鍵字分割成各由至少一個字節(jié)構(gòu)成的搜索關(guān)鍵字區(qū)段進行搜索過程。業(yè)內(nèi)人士容易理解,字節(jié)組不是搜索關(guān)鍵字表示的唯一可能。從而,例如搜索關(guān)鍵字可以以二進制形式,即1和0的串,表示,相應(yīng)地通過把該搜索關(guān)鍵字分割成各由1位(即1=1)或更多位如一個字節(jié)(即1=8位)等構(gòu)成的搜索關(guān)鍵字區(qū)段進行搜索過程。在某些情況中,還可能是其PAIF中的所有節(jié)點不具有相同的l值的情況。
還請注意,還可對給定PAIF中的不同鏈接分配長度不同的搜索關(guān)鍵字區(qū)段,只要各個搜索關(guān)鍵字區(qū)段知道對應(yīng)的節(jié)點。
如從圖6A-6C的各PAIF清楚看出那樣,根據(jù)搜索關(guān)鍵字以分類形式保持?jǐn)?shù)據(jù)記錄。例如在圖6C-3中的導(dǎo)航(從右到左)導(dǎo)致有序序列“11346”、“12345”和“12445”。這種特征構(gòu)成另一個優(yōu)點,即和圖5中的其中數(shù)據(jù)記錄未分類的樹相比數(shù)據(jù)操縱更容易。如上面規(guī)定的那樣,PAIF中的節(jié)點不必必須是唯一性分類的。從而,例如,在圖6C-2的PAIF120中,節(jié)點104同時是一個葉節(jié)點(通過長鏈接105鏈接到數(shù)據(jù)記錄107)和一個內(nèi)部節(jié)點(通過短鏈接106鏈接到節(jié)點121)。
業(yè)內(nèi)人士容易理解本文中描述的“插入”、“刪除”、“尋找”和“修改”過程僅是實現(xiàn)這些過程的許多變型中的一種并且是可根據(jù)具體實施按所需適當(dāng)修改。
這些規(guī)定的插入、刪除、尋找事務(wù)處理應(yīng)用于所謂的塊內(nèi)事務(wù)處理。如后面更詳細(xì)地解釋那樣,把這些事務(wù)處理應(yīng)用于塊間環(huán)境需要解決少數(shù)和塊間操作無關(guān)的情況。
在解釋了PAIF線索的結(jié)構(gòu)后,下面說明各種依據(jù)本發(fā)明的實施例,其中示出一種基于PAIF索引圖包括PAIF樹(作為基本分割索引)的分層索引。
現(xiàn)轉(zhuǎn)到圖7A-7H,其中圖示說明依據(jù)本發(fā)明的一種實施例在一系列分離塊操作下構(gòu)建出的分層索引。考慮圖7A中的塊140(在基本分割索引中),該塊在存儲器空間上溢出。這是調(diào)用“分離塊”過程的情況,這產(chǎn)生圖7B的分層索引142,其由根塊144和復(fù)制節(jié)點A′(155)組成,復(fù)制節(jié)點A′通過直接鏈接145和葉塊146鏈接并且通過長鏈接147和葉塊148鏈接。
在該具體例子中,把分離點選擇為鏈接149(圖7A)(以下稱“分離鏈接”),從而把節(jié)點A、B、E、D、F移到新塊146并把節(jié)點C、G、I、J、K、L、H移到塊148。最好把分離鏈接選擇成在新的塊間達(dá)到基本平均的節(jié)點和鏈接的分布(例如塊148和146中駐留的子PAIF的尺寸大致相同)。在父塊不存在的情況下,用分離節(jié)點A(156)的復(fù)制節(jié)點A′(155)創(chuàng)建一個父塊144(構(gòu)成I1)。當(dāng)從其上發(fā)出分離鏈接的分離節(jié)點的復(fù)制節(jié)點尚未駐留在父塊144中的情況下,把該節(jié)點拷貝到父塊中(用A′標(biāo)記),并且通過所述直接鏈接145實現(xiàn)A′(155)節(jié)點和A所駐留的塊之間的連接。分離鏈接149(原來是A和C之間的短鏈接)由A′和C駐留的塊之間的長鏈接147代替。供選擇地,也可用虛線150標(biāo)志的分離鏈接來鏈接節(jié)點A和C(分別為156,153)。
凈效應(yīng)是在圖7B中提供一個由塊144構(gòu)成的分層索引,而線索的塊是146和148。業(yè)內(nèi)人士容易理解到現(xiàn)在有可能不通過線索(即從節(jié)點A156開始)而是通過分層索引(即從節(jié)點A′155開始)訪問或更新數(shù)據(jù)記錄。就此而論,應(yīng)注意到鏈接147和鏈接150具有相等的值,該值進而是圖7A的原始鏈接149的值。
現(xiàn)考慮塊148,這會歷經(jīng)類似的塊分類過程產(chǎn)生圖7C中的分層索引151。根據(jù)該例子,分離鏈接是圖7B的短鏈接152,并且相應(yīng)地節(jié)點C和H駐留在圖7C的塊148A中而節(jié)點G、I、K、L和J駐留在塊148B中。該分離鏈接起源的節(jié)點(圖7B的節(jié)點C-153)被復(fù)制(產(chǎn)生圖7C的復(fù)制節(jié)點153a)并放在塊140中用C′標(biāo)記。如前面一樣,直接鏈接154把拷貝節(jié)點C′153a連接到原始分離節(jié)點153的塊148A,而鏈接155是一個到分離塊148B的遠(yuǎn)鏈接并且該鏈接的值和分離之前(和之后)節(jié)點C和G之間的鏈接152的原始值相等。
在圖7C中,分層索引151由包括塊141、148A和148B(構(gòu)成I0)的線索以及構(gòu)成該線索的公用關(guān)鍵字上的代表索引的塊16組成。
請注意在圖7C中,塊141內(nèi)的節(jié)點A和塊148A中的節(jié)點C選擇成是斷開的,類似地,148A的節(jié)點C和148B的節(jié)點G選擇成是斷開的。如清楚地示出那樣,節(jié)點A′和在塊140內(nèi)連接以形成一個(連接)線索,并且有可能通過節(jié)點A′和直接鏈接156訪問塊141;通過節(jié)點A′、C′和直接鏈接154訪問塊148A;通過節(jié)點A′、C′和直接鏈接155訪問塊148B。值得注意節(jié)點A′和C′之間的鏈接(在塊140中)的值和節(jié)點A和C之間的原始值(見圖7A中的鏈接149)相同。
如圖7C中清楚示出那樣,所產(chǎn)生的分層索引構(gòu)成一種均衡式塊結(jié)構(gòu),從而保持索引深度為最小,并且相應(yīng)地使為了尋找、插入或刪除某給定數(shù)據(jù)記錄所需的訪問(通常是,盡管不必必然是,I/O操作)次數(shù)為最小?,F(xiàn)設(shè)想為了訪問數(shù)據(jù)記錄分層索引保持基本上取決于記錄次數(shù)的這數(shù)函數(shù),則在為訪問某給定數(shù)據(jù)記錄所需的I/O操作次數(shù)上和通過線索進行相比分層索引更為有效,例如,對于通過該分層索引訪問和節(jié)點J關(guān)聯(lián)的數(shù)據(jù)記錄,它需要首先訪問塊140、然后塊148B并接著被查找數(shù)據(jù)記錄(即三次I/O操作)。相對比,通過線索訪問相同數(shù)據(jù)記錄造成4次I/O訪問,即塊141、塊148A、塊148B和數(shù)據(jù)記錄159。如所示,存在少量線索更有效的特殊例子(例如,訪問和節(jié)點A關(guān)聯(lián)的數(shù)據(jù)記錄),然后,線索越大(即由更多的塊構(gòu)成)通過分層索引訪問越有效。
對于圖7的具體實施例,代表索引和線索(為基本分割索引的一個實施例)基本上遵照相同的索引圖即PAIF。對“基本”相同的圖,其意味著存在一些不同,如后面參照圖9G說明的那樣。
進一步參照圖7D至7H中描繪的其它例子示出在分層索引中對更高層Ij復(fù)制節(jié)點的考慮。從而,考慮圖7D的分層索引,其中在鏈接400上進行塊分離。所產(chǎn)生的分層索引在圖7E中示出,其中創(chuàng)建塊402,節(jié)點401拷貝到更高層的塊402(構(gòu)成分層索引圖的一部分),并且把節(jié)點B和E之間的原始鏈接選擇成保持下來(通過虛線鏈接403)。現(xiàn)在可能通過B訪問線索的二個塊(405和406),分別通過鏈接407和408。
接著,現(xiàn)在假定需要比如在鏈接409上分離塊405,所產(chǎn)生的結(jié)構(gòu)現(xiàn)出現(xiàn)在圖7F的塊402中,其中塊405的節(jié)點A和I復(fù)制成塊402中的A′和I′(410和411)。節(jié)點I′明顯地是塊405中的分離節(jié)點的復(fù)制節(jié)點??紤]到節(jié)點B(其副本B′事前駐留在塊402中)和I(它的I′現(xiàn)在復(fù)制到塊402)都是A的后繼節(jié)點,從而節(jié)點A也被拷貝。節(jié)點A是節(jié)點B和I的最低先驅(qū),從而在塊402中形成一個(連接)線索。和短鏈接414(塊402中節(jié)點A′和B′之間)相關(guān)的值和鏈接412(塊405中A和B之間)的值相同。塊42中鏈接415(節(jié)點A′和I′之間)的值和連接413的值相同,鏈接413起源于節(jié)點A并指向訪問節(jié)點B所需的方向。塊402的內(nèi)部結(jié)構(gòu)是允許對塊405、406和407的代表搜索的結(jié)構(gòu)。
節(jié)點422和411的直擴鏈接416、417選擇成保留下來,因為有可能沿著直接鏈接418移動到塊405,可看出節(jié)點410保持在對節(jié)點422和411的訪問路徑上。
圖7G示出分離圖7F的塊407(在鏈接420上)后的結(jié)果分層索引,而圖7H示出分離塊402(在節(jié)點I′和N′之間的鏈接上)后的結(jié)果分層索引。圖7H的結(jié)果分層索引如所示具有三層,第一層由塊430組成,第二層由塊402和408組成,而線索由塊405、407、426和406組成。
業(yè)內(nèi)人士容易理解,實現(xiàn)分離塊的方式當(dāng)然不限于圖7D至圖7H的例子。
在說明通過由一系列插入事務(wù)處理造成的分離處理(參照圖7下)構(gòu)建分層索引的實施例后,可理解當(dāng)刪除數(shù)據(jù)記錄塊中只留下一個不關(guān)聯(lián)著數(shù)據(jù)記錄的節(jié)點時會激活相反的過程,即“刪除塊”。
業(yè)內(nèi)人士容易理解,參照圖7說明的分層索引只是許多可能的實現(xiàn)分層索引的變型中的一種,在這些變型中代表索引和基本分割索引大致相同。
在所規(guī)定的方式下使用PAIF在下述意義上造成一種優(yōu)于迄今已知的線索的優(yōu)點,即盡管線索本質(zhì)上可能是不均衡的,所達(dá)到的分層索引具有均衡式的結(jié)構(gòu)。
現(xiàn)轉(zhuǎn)到圖8A-8B,它們分別示出二個把本發(fā)明的技術(shù)應(yīng)用到本發(fā)明的另一種實施例的例子。
這樣,圖8A示出一種具有垂直取向(即構(gòu)建垂直樹)的給字線索結(jié)構(gòu),如所示,它是不均衡的,即三個塊深(260,261和262)二個塊寬(260和264)。下面的說明不解釋該特定垂直樹的搜索圖,而僅強調(diào)要得到均衡式分層索引所需的各個方面。然而應(yīng)注意線索結(jié)構(gòu)260中的節(jié)點在半字節(jié)長度下表示偏移。(節(jié)點值以圖8A中示出的數(shù)據(jù)記錄(a-k)的十六進制表達(dá)式表示。)請注意,一次額外的I/O操作,即如圖8A中所描述的與訪問數(shù)據(jù)記錄b的一次塊訪問(或一次I/O操作)相比的為訪問數(shù)據(jù)記錄k的三次訪問塊(或三次I/O操作),可看成是均衡的。在現(xiàn)實生活的一些情形中,不必必須應(yīng)用本發(fā)明的技術(shù)以造成數(shù)量完全相同的I/O操作。當(dāng)然,更多地插入數(shù)據(jù)記錄可能產(chǎn)生更高的“不均衡”度,若不用本發(fā)明的技術(shù)對此處理將如上面詳細(xì)討論(參照現(xiàn)有技術(shù))那樣造成性能下降(由于不均衡結(jié)構(gòu))。
圖8B示出本發(fā)明的一個可能實施例,如所示,構(gòu)建出一個由一個塊270(形成I1)的代表索引,這造成得到具有根塊270的水平均衡式樹,從根塊270通過一次I/O操作可訪問低層垂直樹(后者構(gòu)成不均衡線索)的所有塊。
如所示,通過每個塊的公用關(guān)鍵字值獲得對第一垂直樹(其是線索)中的塊的實際訪問。在繼續(xù)進行之前先參照圖8例示術(shù)語公用關(guān)鍵字。
塊260的公用關(guān)鍵字(半字節(jié)單位下的十六進制表示)是Ox4、Ox1和Ox3,其中Ox4代表字符A的字節(jié)的最高位組,Ox1代表字符A的最低位組,而Ox3代表駐留在數(shù)據(jù)記錄的偏移2中的字符的最高位組。
請注意可通過塊266訪問的所有數(shù)據(jù)記錄共享前面規(guī)定的公用關(guān)鍵字前綴。以相同方式,下面的表概括每個塊的公用關(guān)鍵字塊號公用關(guān)鍵字260 Ox4,Ox1,Ox3261 Ox4,Ox1,Ox3,Ox3,Ox3,Ox3,Ox3,Ox3,Ox3269 Ox4,Ox1,Ox3,Ox3,Ox3,Ox3,Ox3,Ox3,Ox3,Ox3,Ox3,Ox3,Ox3264 Ox4,Ox1,Ox3,Ox3,Ox3,Ox3,Ox3,Ox4,Ox3請注意,塊261可容納一個值為8的根節(jié)點,從而該塊的公用關(guān)鍵字(以下稱為k)改變成Ox4,Ox1,Ox3,Ox3,Ox3,Ox3,Ox3,Ox3,即它由8個單元組成。在該情況下,I1中塊261的代表應(yīng)相應(yīng)改變。在一種不同的實施中,261的代表為k,即使不存在值為8的根節(jié)點。
各公用關(guān)鍵字上的索引是在代表索引(由塊270組成)中實現(xiàn)的,從而它構(gòu)建一個對第一垂直樹的各公用關(guān)鍵字定址的線索?,F(xiàn)在,例如,為了查找數(shù)據(jù)記錄g,可順著節(jié)點290、鏈接291到達(dá)節(jié)點292。然后,通過直接鏈接293前進到和數(shù)據(jù)記錄g相關(guān)聯(lián)的塊261。所產(chǎn)生的分層索引是均衡的。
如上面所規(guī)定,對于線索特殊情況,塊的代表關(guān)鍵字是公用關(guān)鍵字。一般地說,一個塊的公用關(guān)鍵字是可從該塊通過有關(guān)索引圖訪問的數(shù)據(jù)記錄的所有關(guān)鍵字的最長前綴。對于PAIF,規(guī)定的前綴長度(以1位長的單位計算)是塊中根節(jié)點的值(回憶其保持偏移值)。若前綴長度用位數(shù)表達(dá),則按偏移值乘以1位長的值計算前綴長度。
下面參照圖9A-9G說明本發(fā)明的構(gòu)建分層索引的再一種實施例。
相應(yīng)地,現(xiàn)把注意轉(zhuǎn)到圖9A-9G,其中示出對某PAIF樹(其構(gòu)成對不均衡結(jié)構(gòu)敏感的一個線索)進行一系列修改(插入)事務(wù)處理,從而得到分層索引。為了表達(dá)的方便,把數(shù)據(jù)記錄示為構(gòu)成該線索的一部分。如前面指出的那樣,數(shù)據(jù)記錄和線索關(guān)聯(lián)的實際方式可根據(jù)具體應(yīng)用改變。
在下面的圖中,通過連接地插入下述未分類的數(shù)據(jù)記錄A-F(出于表達(dá)的方便它們構(gòu)成一部分塊)數(shù)據(jù)串用位串表示,其中1位部分代表1A=001000011B=110011100C=011011111D=011011011E=101010101F=111111111在第一步驟中(圖9A),把記錄A插入到塊300,塊300包括偏移為0的節(jié)點301,節(jié)點301通過值為0的鏈接302和第一節(jié)點A關(guān)聯(lián)。此刻,由塊300組成的樹只有一個節(jié)點。該索引圖表示至數(shù)據(jù)記錄A的搜索路徑是根據(jù)分別如鏈接302和節(jié)點301上描述的偏移0處的值0確定的。
然后(圖9B),插入數(shù)據(jù)記錄B,其中如可清楚看出和數(shù)據(jù)記錄A不同那樣,在偏移0上關(guān)鍵字值為1,從而鏈接302導(dǎo)向數(shù)據(jù)記錄B并分配著值1。
然后(圖9C),插入數(shù)據(jù)記錄C,偏移1上的值用于和記錄A區(qū)別。鏈接303和304把節(jié)點305(代表偏移1)分別連接到所說明的數(shù)據(jù)記錄C和A上。由于塊300容納節(jié)點301和305,現(xiàn)在還不必分離該塊。
接著,插入數(shù)據(jù)記錄D,圖9D中示出遵照該插入操作的塊結(jié)構(gòu)。然而,由于數(shù)據(jù)塊不能容納多于二個的節(jié)點(出現(xiàn)溢出),現(xiàn)在需要分離塊300。圖9E示出分離后的樹結(jié)構(gòu)。從而,鏈接306是分離鏈接,其機能是大約半個塊的內(nèi)容將留在塊300中,而其余半個塊的內(nèi)容將移到另一個塊310。當(dāng)然可以類似地把別的鏈接選擇為分離鏈接。
作為第一步,I0中的塊300用二個塊300和310替代。節(jié)點0、1(分別用311、313標(biāo)志)和數(shù)據(jù)記錄A和B留在破開的塊300中,而節(jié)點6、數(shù)據(jù)記錄D和C(在該特定實施例中代表剩余節(jié)點)移到塊310中。從而,圖9E的基本分割索引現(xiàn)由二個塊300和310組成(事實上這構(gòu)成不均衡線索)。
然后,由于塊B1不存在,它被建立,從而設(shè)置塊312。分離節(jié)點(313)拷貝到塊(312)以構(gòu)建一個復(fù)制節(jié)點(314)。接著,通過直接鏈接316復(fù)制節(jié)點(314)連接到塊300,并且通過遠(yuǎn)鏈接318復(fù)制節(jié)點314鏈接到塊310。該遠(yuǎn)鏈接替代圖9E中用虛線標(biāo)志的原始分離鏈接306。遠(yuǎn)鏈接318的值和分離鏈接的值相等。從而,代表索引(由塊312構(gòu)成)允許根據(jù)基本分割索引的公用關(guān)鍵字搜索。
請注意,對是否要刪除或保留分離鏈接不存在限制。如所示,這樣得到的構(gòu)成分層索引的水平樹(由塊312,300和310組成,其中塊312屬于代表索引)是均衡的。
接著,插入數(shù)據(jù)記錄E。在該情況下不可能通過遠(yuǎn)鏈接318從塊312的第一節(jié)點314(具有值1)在水平樹(為分層索引的一種形式)中前進,因為它代表出自節(jié)點314(值為1)的方向1,從而需要一條方向0下的鏈接。從而通過直接鏈接316前進到塊300。這樣,找到需要和該新數(shù)據(jù)記錄關(guān)聯(lián)的塊。以相同的方法插入數(shù)據(jù)記錄F,并產(chǎn)生圖9F中示出的樹結(jié)構(gòu)。
接著,若進行塊300的節(jié)點320和節(jié)點321間的分離,節(jié)點320拷貝到塊312(在圖9G中用323標(biāo)志),由于它不能鏈接到塊312的節(jié)點314(因為這不能保持正確的節(jié)點塊內(nèi)鏈接),還把塊300的節(jié)點311拷貝到塊312(在圖9G中用322標(biāo)志),以便建立一個能通過該索引圖根據(jù)塊的公用關(guān)鍵字搜索塊300、326、310的(連接)線索。
還請注意,替代具備出自圖9G中塊312的所有拷貝節(jié)點314、322、323的各直接鏈接,具備一條出自拷貝節(jié)點(322)至塊300的直接鏈接應(yīng)是足夠的。在分離之前的鏈接的方向上(圖9F的鏈接315的方向)設(shè)置一條從節(jié)點323到塊126的遠(yuǎn)鏈接。很明顯,若在塊326中進行另一次分離,應(yīng)該在塊312中通過一個節(jié)點和一條至塊Bi-1′的遠(yuǎn)鏈接表現(xiàn)出來,其中所述節(jié)點通過一條方向1下的對Bi-1的直接鏈接的出自節(jié)點的鏈接連接。
圖9A-9G以及8A-8B示出通過構(gòu)建分層索引實現(xiàn)保持本發(fā)明的均衡結(jié)構(gòu)的分離塊機制的許多可能方式中的二種。采用其它非限制性變型的靈活性例如在圖8B中示出,其中近鏈接271和直接鏈接272由帶有和鏈接271的方向相同的遠(yuǎn)鏈接273(用虛線標(biāo)示)代表,這使得節(jié)點276冗余。
就許多實施例而論,本發(fā)明的均衡技術(shù)使這樣得到的均衡式水平取向數(shù)字樹(一種形式的分層索引結(jié)構(gòu))具有所謂的“隨機訪問”特征。這意味著和某輸入數(shù)據(jù)記錄有關(guān)的搜索(例中搜索數(shù)據(jù)記錄A)可能導(dǎo)向一個不同的數(shù)據(jù)記錄或?qū)蛞粋€其處不存在索引圖所描述的方向上的鏈接的節(jié)點,并且為了最終訪問所查找的數(shù)據(jù)記錄需要施以“修正”。
為了更好地理解,例如考慮圖9E。例如考慮對圖9E的分層索引施以對被查找數(shù)據(jù)記錄L=111011110的搜索事務(wù)處理。搜索路徑將沿著節(jié)點314和鏈接318(分別為偏移1,值1),并接著在偏移“6”(塊310的根節(jié)點)通過鏈接319(值“1”)到達(dá)數(shù)據(jù)記錄C。該例示范出這樣得到的分層索引的隨機搜索特征。
為了解決所說明的失敗,計算被查找數(shù)據(jù)記錄的關(guān)鍵字以及該數(shù)據(jù)記錄的關(guān)鍵字的公用前綴的長度,塊(310)的公用關(guān)鍵字是實際數(shù)據(jù)記錄C的關(guān)鍵字的前綴部分。這樣,公用前綴的長度為零。接著,沿著樹上爬到訪問路徑中一個具有直接鏈接的其值等于或小于公用前綴長度的節(jié)點。若不能滿足該要求,即所有節(jié)點具有的值大于計算出的前綴長度,則從該訪問路徑中第一個具有直接鏈接的節(jié)點(其應(yīng)指向索引Ii-1的第一個塊)。現(xiàn)在,通過直接鏈接316從節(jié)點311移到更低層的垂直取向樹(即到層Ii-1),然后按索引圖描述的那樣繼續(xù)搜索。
根據(jù)另一種場合,假定索引圖指示進入某給定方向但在所需方向上不存在鏈接,該搜索路徑遵循出自該搜索路徑上具有最大值的節(jié)點(其持有一個直接鏈接)的直接鏈接。當(dāng)從塊前進到另一個塊時,對公用關(guān)鍵字(若能得到)或者對與節(jié)點關(guān)聯(lián)的數(shù)據(jù)記錄的比較可得出是否按索引圖前進或返回到某具有直接鏈接的節(jié)點的決策。應(yīng)注意,公用關(guān)鍵字不必物理上附在數(shù)據(jù)記錄上。
回到上面的例子(被查找數(shù)據(jù)記錄L)和相關(guān)的圖9E的數(shù)據(jù)記錄C,若在塊中保持塊310的公用關(guān)鍵字(其為011011)則不需要訪問數(shù)據(jù)記錄C。從而,由于L的關(guān)鍵字和該塊的公用關(guān)鍵字間的公用前綴為0,可在不訪問記錄C下返回到節(jié)點314和鏈接316。以該說明的方式避免需要訪問數(shù)據(jù)記錄當(dāng)然具有性能改進的優(yōu)點。知道被查找數(shù)據(jù)記錄不駐留在該樹中的準(zhǔn)則在于被查找數(shù)據(jù)記錄的關(guān)鍵字和該塊的公用關(guān)鍵字間的公用關(guān)鍵字前綴大于分離節(jié)點的值。
在本例中,分離節(jié)點的值是1(節(jié)點313的值),從而塊310不是容納記錄L(若存在該記錄)的塊。從而,對記錄L的搜索從節(jié)點314和鏈接316繼續(xù)。本過程應(yīng)用于所有的修改事務(wù)處理。
就插入事務(wù)處理而論,以上面說明的方式找到塊300并且它和新數(shù)據(jù)記錄L相關(guān)。
本例引用分層索引的具體例子。業(yè)內(nèi)人士容易理解該隨機訪問特征應(yīng)用于采用基本分割索引的其它分層索引類型的各種變型。
隨機搜索特征引出“出錯”的原因在于未必從駐留在到Ih-1中的塊的搜索路徑上的節(jié)點的值知道層Ih-1中某塊的全部公用關(guān)鍵字。從而,為了驗證至規(guī)定塊的搜索路徑是否和依據(jù)被查找數(shù)據(jù)記錄的關(guān)鍵字的搜索路徑匹配,需要知道Ih-1中的塊的公用關(guān)鍵字。若塊中不保持公用關(guān)鍵字,可能需要在索引中前進到某數(shù)據(jù)記錄以便知道公用關(guān)鍵字值。
分層索引固有的易出錯特征以及予以處理的方式已在上面參照圖9示例說明,并且可更概括地說明如下為了通過關(guān)鍵字k搜索一個在Ih中(并在某些情況下在Ih-1至Ii或至數(shù)據(jù)記錄中)搜索k以便找到引向Ih-1的塊B。重復(fù)該過程,直至到達(dá)和具有關(guān)鍵字k的數(shù)據(jù)記錄(若存在)相關(guān)的I0的塊。
圖7至9的說明舉例出一種把基于PAIF的索引圖用作為基本分塊索引和代表索引的分層索引。業(yè)內(nèi)人士容易理解,本發(fā)明的分層索引不只限于PIAF。例如,美國專利5,495,609示出一種不同的線索。例如考慮圖10A的依據(jù)該609專利的線索,并假定該線索包括一個容納節(jié)點11、12、13和14的塊?,F(xiàn)假定需要分離該塊以便隨后對樹插入新節(jié)點,一種依據(jù)現(xiàn)有技術(shù)的可能的分離塊的方法例如可是斷開節(jié)中12和14間的鏈接來得到二個塊,一個塊容納節(jié)點11、12和13,而另一個塊容納節(jié)點14(及以后的新節(jié)點)。假定第一個塊駐留在內(nèi)部存儲器中,若現(xiàn)在需要到達(dá)記錄26,只需要一次I/O操作。另一方面,若感興趣的是記錄20,為了訪問新塊(即容納節(jié)點14的塊)需要第一次I/O操作,并且從該處為了訪問記錄20需要另一次(即第二次)I/O操作。從而可理解分離塊引起不均衡樹。相繼的插入事務(wù)處理會負(fù)面地影響樹的不均衡特征,即需要多次I/O訪問,這是明顯不希望的。
應(yīng)用本發(fā)明的技術(shù)可解決不均衡樹的缺點,并在圖10B中示出得到的分層索引,其中通過塊159A在該線索(由塊159B和159C組成)的代表關(guān)鍵字上構(gòu)建代表索引。其中還把節(jié)點12和14之間的鏈接考慮成分離鏈接,而且把新節(jié)點159D(節(jié)點12的復(fù)制品)拷貝到用159A標(biāo)志的新塊中。現(xiàn)在,為了訪問記錄20和記錄26需要次數(shù)相同的I/O操作,并在該具體情況下為二次。隨著線索尺寸的增加,利用分層索引進行訪問的效率更高。
圖10B的分層索引從而造成均衡式塊樹,保證達(dá)到樹中的每一個數(shù)據(jù)記錄所需的I/O操作次數(shù)相同。業(yè)內(nèi)人士容易理解,I/O操作次數(shù)最好是取決于數(shù)據(jù)記錄數(shù)量以及從一個塊發(fā)出的鏈接數(shù)量的對數(shù)函數(shù)。這樣,例如從一個塊發(fā)出1000個遠(yuǎn)鏈接,具有三層的分層索引允許訪問1,000,000,000個數(shù)據(jù)記錄。
為了對此得到更好的理解,下面給出一些數(shù)字例子。假定每個塊具有1000個遠(yuǎn)鏈接。假定每個遠(yuǎn)鏈接的尺寸為4字節(jié),容易得出表示這些遠(yuǎn)鏈接所需的空間為4000字節(jié)。進一步假定塊內(nèi)的節(jié)點和近鏈接占據(jù)另外4000字節(jié),所產(chǎn)生的塊尺寸小于10,000字節(jié)。為了討論每個塊的尺寸為20,000字節(jié)。
現(xiàn)考慮一個由一個塊(例如圖7B中的塊144)組成的分層索引作為索引層I1,并假定它鏈接到一個個層I0中的塊(圖7B中只示出其中二個塊146和148),該分層索引總計用于總數(shù)為1001個的各尺寸為20,000字節(jié)的塊。從而,應(yīng)分配的用于保持該分層索引的各塊的總空間約為20兆字節(jié)。該數(shù)量級的空間可以容易地例如在個人計算機的內(nèi)部存儲器中容納。現(xiàn)假定I0中的每個塊和一千個數(shù)據(jù)記錄關(guān)聯(lián),則采用本發(fā)明的分層索引的凈效果(根據(jù)本實施例)是在內(nèi)部存儲器中整體地容納百萬個可在無需I/O索引下訪問的數(shù)據(jù)記錄。
同樣,訪問幾十億個記錄可能需要更多一層的索引,這可能需要一次附加的I/O操作。
為了更好地理解,例如考慮圖6B-1或6B-3(PAIF索引圖)中的分層索引的實現(xiàn)。假定數(shù)據(jù)記錄103和107的關(guān)鍵字在尺寸上更長(例如100字節(jié)長),這應(yīng)不會改變PAIF的尺寸??稍趫D8B中看出另一個非限制性的例子,若由該索引定址的數(shù)據(jù)記錄a-k的關(guān)鍵字的尺寸為200字節(jié)長,這應(yīng)該不會改變該分層索引的尺寸和結(jié)構(gòu)。還可看出,也有可能根據(jù)關(guān)鍵字的次序在索引中導(dǎo)航和檢索數(shù)據(jù)a-k。這示例出序貫操作的一種形式。
如所示,圖10B的結(jié)果分層索引包括二個具有垂直取向的樹,即,第一樹結(jié)構(gòu)由塊159B和159C(為一種形式的基本分割索引I0)組成,而第二樹具有一個塊159A(為一種形式的基本分割索引I1)。
這樣實現(xiàn)的水平的塊樹(為分層索引的一種形式)是均衡的,即根據(jù)159A通過一次I/O能訪問所有到各數(shù)據(jù)記錄的鏈接。會導(dǎo)致I0的塊組中的進一步分離的更多的數(shù)據(jù)記錄的插入當(dāng)然會要求更新分層索引I1。當(dāng)I1的塊159A中的節(jié)點數(shù)量超出某給定數(shù)量時,按照分離機制分離塊159A。
本發(fā)明的技術(shù)所考慮的線索索引不限制在′609專利中所公開的搜索上,而是如上述可包括其它類型的樹。
請注意,塊內(nèi)結(jié)構(gòu)不必必須是均衡的,即,塊內(nèi)的節(jié)點不必必須在均衡式結(jié)構(gòu)下排列。盡管該事實看起來是一個缺點,但業(yè)內(nèi)人士容易理解,它所牽連到的數(shù)據(jù)庫總性能事實上是不明顯的。這是因為塊內(nèi)搜索圖通常是在計算機系統(tǒng)的快速內(nèi)部存儲器中進行的。和塊內(nèi)搜索圖不同,分層索引內(nèi)的塊安排保持在均衡式結(jié)構(gòu)下,從而搜索路徑中的塊數(shù)據(jù)是取決于數(shù)據(jù)記錄數(shù)量的對數(shù)函數(shù),并且反映為了把所需的塊裝入到內(nèi)部存儲器中對外部存儲器的I/O訪問(本質(zhì)上慢速的操作)次數(shù)。
就此而論,業(yè)內(nèi)人士容易理解,本發(fā)明決不限于某給定的物理實現(xiàn),從而,例如就搜索圖而論,盡管在應(yīng)用了本發(fā)明的技術(shù)后在塊內(nèi)保持搜索圖,這應(yīng)用邏輯概念上,例如根據(jù)偏移和偏移值在分層索引中前進??梢杂杀景l(fā)明的技術(shù)包括的各種各樣的方式實現(xiàn)該一般性的概念。例如,每個節(jié)點內(nèi)所容納的偏移尺寸(位數(shù))可改變,實現(xiàn)空指針(即指向空-無具有子女的指針)以及其它。該物理實現(xiàn)的靈活性也應(yīng)用于塊內(nèi)部分。
參照圖7至10說明的分層索引實質(zhì)上對線索和代表索引圖二者都保持相同的索引圖(除出錯處理之外,如上面參照圖10G詳細(xì)解釋的那樣在訪問數(shù)據(jù)記錄時會遇到出錯處理)。
如參照圖11例示解釋那樣,對線索和代表索引二者維持索引圖不是強制性的。
圖11示出另一種均衡圖8A的不均衡樹的方法(即構(gòu)建分層索引),其把常規(guī)的B樹用作不均衡樹的代表關(guān)鍵字上的代表索引。所得到的水平取向均衡樹(分層索引)包括位于頂層(索引層I2)處的塊272、位于低層(索引層I1)處的塊270和271以及位于最低層(索引層I0)處的圖8A的不均衡垂直取向樹的各原始塊(塊260、261、262、264)。圖4示出代表索引的索引圖不必必須和原始不均衡線索的索引圖相同。若需要,可把該B樹整體上(構(gòu)成一個代表索引)看成是索引層I1。
本發(fā)明的數(shù)據(jù)庫文件管理系統(tǒng)不僅解決常規(guī)線索索引文件的缺點而且提供其它方便和改進用戶應(yīng)用程序訪問數(shù)據(jù)的好處。
從而,保持塊的均衡式結(jié)構(gòu)的事實確保平均上把慢速I/O操作次數(shù)基本上保持成是最優(yōu)的,即得到更有效的結(jié)果,尤其涉及到由許多塊組成的大文件時。
業(yè)內(nèi)人士容易理解,盡管最好對慢速的I/O操作施以構(gòu)建分層索引,例如使訪問慢速外部存儲介質(zhì)的次數(shù)為最小,本發(fā)明決不限制于所說明的存儲介質(zhì)。從而,例如,可應(yīng)用本發(fā)明的存儲介質(zhì)也可以是內(nèi)部存儲器。當(dāng)考慮到內(nèi)部存儲器(盡管它快于外部存儲器)的容量日益增加這是特別適宜的,其也需要可根據(jù)本發(fā)明實現(xiàn)的高效訪問控制。
下面說明本發(fā)明的第二方面。
為了便于解釋,將參照PAIF索引(構(gòu)建一個指定的索引)說明本發(fā)明的第二方面。本方面決不限于該特定例子。
如上面所述,本發(fā)明的數(shù)據(jù)庫文件管理系統(tǒng)能用單個索引對不同類型的數(shù)據(jù)記錄定址。
為了更好地區(qū)分由同一PAIF索引定址的不同類型的數(shù)據(jù)記錄,每個屬于某給定類型的數(shù)據(jù)記錄和某給定標(biāo)志符關(guān)聯(lián)。后者形成數(shù)據(jù)記錄的關(guān)鍵字的一部分以構(gòu)建標(biāo)志符關(guān)鍵字。對于每一類型數(shù)據(jù)標(biāo)志符是唯一的。從而,例如,屬于實體“借書人”的數(shù)據(jù)記錄的關(guān)鍵字用標(biāo)志符“A”作為前綴,而屬于實體“書”的數(shù)據(jù)記錄的所有關(guān)鍵字用標(biāo)志符“B”作為前綴。屬于“借書人”的數(shù)據(jù)記錄的新關(guān)鍵字現(xiàn)變成由“A”和“借書人”的原始關(guān)鍵字串聯(lián)組成的標(biāo)明式關(guān)鍵字,同樣,屬于“書”的數(shù)據(jù)記錄的新標(biāo)明式關(guān)鍵字現(xiàn)在由“B”和“書”的原始關(guān)鍵字的串聯(lián)組成。
在討論了本發(fā)明的第二方面的所謂“標(biāo)志符”特性后,下面說明所謂的元數(shù)據(jù)。
依據(jù)本發(fā)明的一個方面,數(shù)據(jù)字典保持元數(shù)據(jù)信息,后者提供數(shù)據(jù)記錄上作為其記錄類型的函數(shù)的信息。從而,除了需要數(shù)據(jù)記錄保持一個標(biāo)志符以便識別該標(biāo)志符外,還通過使用元數(shù)據(jù)信息來標(biāo)識或構(gòu)造標(biāo)明式關(guān)鍵字以及其它信息例如記錄尺寸。索引搜索圖不注意元數(shù)據(jù),它在不使用元數(shù)據(jù)下從標(biāo)志符(或復(fù)合)關(guān)鍵字定位記錄。元數(shù)據(jù)對于構(gòu)建(復(fù)合)標(biāo)志符關(guān)鍵字是必要的,并且一旦檢索數(shù)據(jù)用于確定記錄的性質(zhì)。從而,例如檢索書的數(shù)據(jù)記錄下標(biāo)別標(biāo)志符B,則可從元數(shù)據(jù)得到用B標(biāo)志的記錄的信息。例如,書記錄的尺寸、其各字段以及作為關(guān)鍵字字段的各字段。
標(biāo)明式數(shù)據(jù)記錄的使用不限于只為一種類型,而寧可(最好)通過標(biāo)明式索引處理多于一種的類型,如后面用從屬關(guān)系解釋地那樣。
這樣,按照迄今已知的解決辦法,典型地在幾個文件中保存(并且通過幾個索引文件定址)不同類型的數(shù)據(jù),而按照本發(fā)明的采用標(biāo)明式索引的數(shù)據(jù)庫文件管理系統(tǒng)可用同一個索引對不同類型的數(shù)據(jù)記錄定址。應(yīng)注意,屬于不同類型的數(shù)據(jù)記錄(并由同一標(biāo)明式索引定址)的各關(guān)鍵字不必具有相同的長度。這樣,例如一個也是一個基于線索的標(biāo)明式索引的分層索引被當(dāng)成其如圖8A中所描述類型的基本分割分層索引。屬于“借書人”實體的各記錄的關(guān)鍵字尺長為6字節(jié)長,而屬于“書”實體的各記錄的關(guān)鍵字的尺寸為5字節(jié)長。向圖8A的標(biāo)明式索引插入帶有標(biāo)志符關(guān)鍵字B11111和B22222的書產(chǎn)生圖12的數(shù)據(jù)結(jié)構(gòu),后者包括一個對二類數(shù)據(jù)記錄,即分配著標(biāo)志符A的數(shù)據(jù)記錄a-k和分配著標(biāo)志符B的數(shù)據(jù)記錄w-x,定址的標(biāo)明式索引。在下面的說明中,術(shù)語類型X的記錄或用X標(biāo)志的記錄用于描述具有標(biāo)明式關(guān)鍵字的記錄并且標(biāo)志符為X。
盡管本例示出一種對數(shù)據(jù)記錄的關(guān)鍵字實現(xiàn)標(biāo)明式數(shù)據(jù)的方式(即前置作為前綴的一個字符、字符串或任何數(shù)量的位組,業(yè)內(nèi)人士容易理解它只是許多可能的變型中的一種。事實上,所建議的標(biāo)志符可以任何已知方式實現(xiàn),只要該標(biāo)志符區(qū)分不同的數(shù)據(jù)記錄、視為關(guān)鍵字的一部分并從而形成搜索的一部分。
上面的敘述意味著在和標(biāo)志符本身無關(guān)下,標(biāo)志符(ⅰ)構(gòu)成數(shù)據(jù)記錄的一部分(或關(guān)鍵字部分),(ⅱ)存儲在別處(例如,在不同的數(shù)據(jù)結(jié)構(gòu)),或(ⅲ)可被定義在別處,或者甚至以別的方式定義。其的一個例子是一個和所有類型相同的數(shù)據(jù)記錄相關(guān)聯(lián)的線索結(jié)構(gòu)(例如,所有用字符A標(biāo)志的數(shù)據(jù)記錄)。通過該例子,很明顯,不需要物理上把標(biāo)志符附著在數(shù)據(jù)記錄的實例上,因為該標(biāo)志符對所有記錄是共同的。然而,若訪問數(shù)據(jù)記錄應(yīng)識別其標(biāo)志符并添加到關(guān)鍵字上。另一種可能的解決辦法是把標(biāo)志符加成數(shù)據(jù)記錄前綴,從而當(dāng)訪問數(shù)據(jù)記錄時可得到標(biāo)志符。例如,考慮圖12,通過鏈接270從節(jié)點266訪問數(shù)據(jù)記錄。數(shù)據(jù)記錄d的第一個字符是A,即標(biāo)志符。
為了更好地理解從屬關(guān)系,注意轉(zhuǎn)到圖13A-13E。圖13A示出一個關(guān)聯(lián)著四個數(shù)據(jù)記錄802、804、806和808(對它們只示出標(biāo)志符關(guān)鍵字)的標(biāo)明式索引800(以PAIF形式)。如容易從每個數(shù)據(jù)記錄前面帶有標(biāo)志符“A”可得出那樣,這些數(shù)據(jù)記錄都為一種類型。
現(xiàn)轉(zhuǎn)到圖13B,其中示出PAIFS00,其具有復(fù)合關(guān)鍵字為A12355B940201333333(記錄81的標(biāo)志符為B)的新數(shù)據(jù)記錄(812)。該新數(shù)據(jù)記錄從屬于關(guān)鍵字為A12355的數(shù)據(jù)記錄806。根據(jù)該PAIF索引,節(jié)點814指示辨別偏移為6并且鏈接到數(shù)據(jù)記錄812的值為B(在偏移6處具有值B)??煽闯鲇涗浽谄?處上不具有值,在該偏移處向它分配虛擬值(例如空)以便確定對另一個記錄的辨別偏移,并且相應(yīng)地對鏈接818設(shè)定標(biāo)記為空的方向。
圖13C示出在其中插入另一個數(shù)據(jù)記錄820的PAIF800。代表另一個從屬于A類型數(shù)據(jù)記錄(806的B類型數(shù)據(jù)記錄的實例的數(shù)據(jù)記錄820插入到PAIF。其辨別偏移為11(新節(jié)點822的值),并且到數(shù)據(jù)記錄812和820的鏈接值分別為“0”和“1”。
圖13D示出PAIF800,其中不同類型的記錄從屬于記錄806。從屬于類型“A”的數(shù)據(jù)記錄的類型“D”的數(shù)據(jù)記錄(824)從節(jié)點814通過具有值D的鏈接823鏈接?;叵隤AIF已表示用B標(biāo)記的數(shù)據(jù)記錄,其中后者從屬于用A標(biāo)記的數(shù)據(jù)記錄。從屬于“A”類型的“B”類型的一個例子是由供應(yīng)方(“A”)保存的物品(“B”),而從屬于“A”的“D”類型的例子是由供應(yīng)方(“A”)服務(wù)的客戶(“D”)。
現(xiàn)轉(zhuǎn)到圖13E,其中示出和圖13D中的PAIF略有不同的另一個實施例。具體地,在數(shù)據(jù)文件中以不帶有它們的關(guān)鍵字前綴(該前綴是記錄806的標(biāo)志符關(guān)鍵字)下,即略掉前綴式關(guān)鍵字A12355下,表示和保存從屬數(shù)據(jù)記錄812、820和824。在訪問時,例如,根據(jù)標(biāo)志符B從元數(shù)據(jù)得到的信息,數(shù)據(jù)記錄812允許提取下述信息(ⅰ)辨別出缺少一部分關(guān)鍵字(ⅱ)數(shù)據(jù)記錄812從屬于某用A標(biāo)記的記錄,后者可從具有值6的節(jié)點(814)通過值為空的一條鏈接訪問。
從而有可能訪問數(shù)據(jù)記錄806和構(gòu)建記錄812的完整關(guān)鍵字。若PAIF800是一個分層索引,節(jié)點814和822可能駐留在不同的塊中并且對和記錄812相關(guān)的塊的訪問路徑可能不包括節(jié)點814。在該情況下,從從屬節(jié)點到記錄806的鏈接(鏈接826、828和830)可訪問數(shù)據(jù)記錄806并構(gòu)建出關(guān)鍵字。上述實現(xiàn)排除對于每個從屬數(shù)據(jù)記錄必須復(fù)制數(shù)據(jù)記錄的標(biāo)明式關(guān)鍵字的表達(dá)(對于圖13D的具體例子,對記錄812、820和824三次復(fù)制特定前綴A12355。用鏈接替代關(guān)鍵字前綴可節(jié)約空間(若前綴的尺寸大于鏈接的表達(dá))并且允許在不需要單獨搜索下訪問從屬所相關(guān)的節(jié)點。
圖13D、13E示出的本發(fā)明的從屬關(guān)系特征不受限于任何具體實現(xiàn)。
從而,在一個索引可知多個數(shù)據(jù)類型以及多種從屬關(guān)系(現(xiàn)有技術(shù)要在分離的索引文件)相關(guān)的意義上,和迄今已知的技術(shù)相比,本發(fā)明的從屬關(guān)系可使數(shù)據(jù)的低層實現(xiàn)更為有效。盡管如此,根據(jù)本發(fā)明當(dāng)然存在在使用多于一個索引文件的應(yīng)用。
很明顯,從屬記錄812、820、824各可具有從屬于其的記錄組。
此外,采用本發(fā)明提出的技術(shù)還可產(chǎn)生一些其它優(yōu)點,例如保持?jǐn)?shù)據(jù)完整性。例如,考慮對圖13E的PAIF800施以一個事務(wù)處理,以插入從屬于數(shù)據(jù)記錄806(帶有標(biāo)明式關(guān)鍵字A12355)復(fù)合關(guān)鍵字為A12355B9300101123456的用B標(biāo)志的數(shù)據(jù)記錄。其搜索引到節(jié)點822。被插入數(shù)據(jù)記錄的關(guān)鍵字偏移11處的值為0,從而訪問記錄812。需要構(gòu)建記錄812的搜索關(guān)鍵字(通過經(jīng)鏈接826訪問記錄806)并且可完成新數(shù)據(jù)記錄的插入。請注意,至記錄806的鏈接使得不需要為了確認(rèn)它的存在根據(jù)其關(guān)鍵字進行一次對記錄806的單獨搜索。這更有效地保持?jǐn)?shù)據(jù)完整性。
利用已說明的B樹索引進行同樣的數(shù)據(jù)完整性檢查意味著不可忽視的開銷,因為它需要雙階段操作。首先,為了發(fā)現(xiàn)其關(guān)鍵字為12355的數(shù)據(jù)記錄,對類型“A”的數(shù)據(jù)記錄的索引施以搜索。一旦找到后可插入類型B的記錄(并且更新一個獨立的索引文件)。
在搜索數(shù)據(jù)時,圖12E的數(shù)據(jù)結(jié)構(gòu)例示出另一個由從屬數(shù)據(jù)記錄和它們的“父”記錄鏈接的現(xiàn)實而產(chǎn)生的優(yōu)點。例如,若類型A的記錄是顧客而類型B的記錄是發(fā)貨單,通常需要利用顧客細(xì)節(jié)訪問發(fā)貨單細(xì)節(jié)。從發(fā)貨單到顧客的鏈接免掉對顧客細(xì)節(jié)的一次獨立搜索。
本發(fā)明所得到的標(biāo)明式索引在為實現(xiàn)序貫操作而在索引中導(dǎo)航產(chǎn)生另一個重要優(yōu)點。
例如,需要在其中以升序“檢索”所有數(shù)據(jù)記錄下考慮圖13E的PAIF。這樣,有可能在該PAIF中導(dǎo)航(亦稱為序貫操作),并且根據(jù)標(biāo)志符關(guān)鍵字的次序檢索數(shù)據(jù)記錄802、804、806、812、820、824和808。若只需要某種類型的記錄,例如類型A的記錄,可在該索引中以相同方式導(dǎo)航并避免訪問無關(guān)的節(jié)點和記錄。從而,從節(jié)點814訪問數(shù)據(jù)記錄806,并且可預(yù)測可以從節(jié)點814通過其各鏈接和后繼節(jié)點訪問的數(shù)據(jù)記錄從屬于節(jié)點806,從而避開鏈接833、823。在該例中只檢索記錄802、804、806和808。在相同方式下,若只需要類型A和B的記錄,應(yīng)避開沿著鏈接823移動,因為可預(yù)測出來自某值為6對記錄806定址的節(jié)點的值為D的鏈接是指向用D標(biāo)志的從屬數(shù)據(jù)記錄的鏈接。
若PAIF索引是分層索引并假定節(jié)點814駐留在和節(jié)點822不同的塊中,可通過分離鏈接從節(jié)點814移動到節(jié)點812。若不存在該分離鏈接,例如在圖7F中,當(dāng)需要通過鏈接400從節(jié)點B(423)移動到節(jié)點E(424)時則需要使用節(jié)點B′(422)的鏈接421。
在參照圖13的特定實施例例示了從屬關(guān)系后,下面說明依據(jù)本發(fā)明的第二方面的有關(guān)多維特征。
現(xiàn)轉(zhuǎn)到圖14,其中示出依據(jù)本發(fā)明的一個實施例的標(biāo)明式索引。該索引包括二條通向一個標(biāo)明式數(shù)據(jù)記錄(“存款”數(shù)據(jù)記錄)的搜索路徑,從而可通過二個復(fù)合關(guān)鍵字中的每個訪問存款,其中一個標(biāo)明式關(guān)鍵字包括各關(guān)鍵字字段帳號、日期和客戶號,第二個標(biāo)明式關(guān)鍵字包括各關(guān)鍵字字段客戶號、日期和帳號和。想前面的例子,該帳戶數(shù)據(jù)記錄具有標(biāo)明式關(guān)鍵字“A133333”(1201)。更新帳戶存款(從屬于帳戶的存款)可以通過從屬于標(biāo)明式記錄201的標(biāo)明式記錄203實現(xiàn)。該PAIF應(yīng)允許從節(jié)點207通過鏈接206訪問記錄201、203。同樣,數(shù)據(jù)記錄204代表某客戶的存款。記錄202的關(guān)鍵字是B133333??梢酝ㄟ^索引200和鏈接(208)到數(shù)據(jù)記錄204的節(jié)點209實現(xiàn)對客戶202的存款204更新。數(shù)據(jù)記錄203的關(guān)鍵字是“A133333C01019811346”(k1)。記錄204的關(guān)鍵字是B11346D010198133333(k2)。
如所示在記錄203和204中復(fù)制客戶字段和帳戶字段(以及其它信息例如日期和總計),這是一個造成不希望的膨脹文件的明顯缺點。
可以通過把單個“存款”記錄表示成一個多維節(jié)點210克服該缺點。
數(shù)據(jù)記錄210(圖14)是一個多維記錄,通過標(biāo)明式索引200依據(jù)標(biāo)志符關(guān)鍵字k1(標(biāo)志符C)和依據(jù)標(biāo)志符關(guān)鍵字k2(標(biāo)志符D)它被更新和訪問。(注意當(dāng)數(shù)據(jù)記錄是多維記錄時,記錄的標(biāo)志符取決于正使用的關(guān)鍵字。通過k1索引中的路徑導(dǎo)向節(jié)點207并從該節(jié)點導(dǎo)向記錄210的標(biāo)志符C。根據(jù)標(biāo)志符C元數(shù)據(jù)的信息可構(gòu)建有關(guān)結(jié)構(gòu)。例如構(gòu)建包括關(guān)鍵字k1的一個數(shù)據(jù)結(jié)構(gòu)。通過鏈接213、214訪問記錄201和202并且借助記錄210的日期字段構(gòu)建所有的關(guān)鍵字字段。通過k2索引中的路徑導(dǎo)向節(jié)點209,并從該節(jié)點導(dǎo)向記錄210的標(biāo)志符D。根據(jù)標(biāo)志符D數(shù)據(jù)中的信息可構(gòu)建有關(guān)結(jié)構(gòu),例如構(gòu)建一個包括關(guān)鍵字k2的數(shù)據(jù)結(jié)構(gòu)。如所示,由記錄203的搜索關(guān)鍵字定義的搜索路徑導(dǎo)向具有值“C”(其為依據(jù)搜索關(guān)鍵字k1的標(biāo)志符)的第一字段212。第三字段指向數(shù)據(jù)記錄201??赏ㄟ^由記錄204的搜索關(guān)鍵字定義的搜索路徑訪問同一數(shù)據(jù)結(jié)構(gòu)210的第二字段215(具有值“D”,其為依據(jù)搜索關(guān)鍵字k2的標(biāo)志符)。第四字段具有一個至實際數(shù)據(jù)記錄202的鏈接。以這種方式記錄“存款”代表帳戶和客戶二者的從屬,并避免各字段帳戶、客戶、日期及總計的復(fù)制。請注意,可通過過原始數(shù)據(jù)記錄(201和202)的鏈接訪問數(shù)據(jù)元素帳戶和客戶,而其余數(shù)據(jù)(日期和總計)只在數(shù)據(jù)元素210中存在一次。明顯地,數(shù)據(jù)記錄210可包括其它字段。本發(fā)明決不限于某種給定實現(xiàn),從而相應(yīng)地,圖14中所描述的數(shù)據(jù)記錄210的實現(xiàn)方式只是許多可能變型中的一種。搜索路徑的數(shù)量不受限制。如前面已在照圖13解釋的那樣,若被尋找數(shù)據(jù)記錄是Axxxxx(即帳戶記錄201本身),則簡單地借助搜索關(guān)鍵字“Axxxxx”在索引中移動到某任一從屬記錄并通過該從屬記錄到類型A記錄的鏈接訪問類型A記錄。例如圖14的鏈接213。其它實現(xiàn)只要是需要的和適宜的當(dāng)然是可行的(例如在索引中保持一條至記錄A的鏈接)。對數(shù)據(jù)記錄的一個物理具體值提供二條(并在一般情況下至少二條)搜索路徑的上述詳細(xì)說明構(gòu)建出多維數(shù)據(jù)結(jié)構(gòu),其為標(biāo)明式索引并對一個數(shù)據(jù)記錄(稱為多維數(shù)據(jù))包含至少二條搜索路徑。
數(shù)據(jù)元素間的關(guān)系-圖15示出本發(fā)明的另一個特性,即數(shù)據(jù)關(guān)系特性。這樣,數(shù)據(jù)記錄A(一個書數(shù)據(jù)記錄)具有從屬于它的C、F、J、k及L數(shù)據(jù)記錄。前面已示出這種分層的實現(xiàn)。依據(jù)本關(guān)系特性容易實現(xiàn)一對一關(guān)系和一對多關(guān)系,例如考慮到一本書具有多種類別(L),即一對多,然而它只有一個摘要(K),即一對一。
根據(jù)該提議的特性,通過具有二個構(gòu)件的標(biāo)明式(復(fù)合)關(guān)鍵字實現(xiàn)一對一數(shù)據(jù)關(guān)系第一構(gòu)件是它的從屬記錄的標(biāo)明式關(guān)鍵字,而第二構(gòu)件是其主屬記錄的標(biāo)志符(由于為一對一關(guān)系不需要使用從屬記錄的關(guān)鍵字字段)。一對多關(guān)系通過標(biāo)志符(復(fù)合)關(guān)鍵字實現(xiàn),其中該關(guān)鍵字的第一構(gòu)件是主屬記錄的標(biāo)志符關(guān)鍵字,而其第二構(gòu)件由從屬記錄的標(biāo)志符和關(guān)鍵字組成。
在該例中,一本書和其摘要之間的一對一關(guān)系通過把L的關(guān)鍵字定義社AxxxL保持,其中Axxx是A的標(biāo)明式關(guān)鍵字,L是記錄L的關(guān)鍵字的標(biāo)志符。一本書和類別之間的一對多關(guān)系通過把L的關(guān)鍵字定義為AxxxLyyy保持,其中Axxx是A的標(biāo)明式關(guān)鍵字,L是關(guān)鍵字標(biāo)志符并且yyy是記錄L的關(guān)鍵字字段(組)。
下面的說明和依據(jù)本發(fā)明的第二方面的另一個特性有關(guān),即和多模型表示有關(guān)。依據(jù)該特性并如下面更詳細(xì)解釋那樣,下述(以及可能其它)模型中的一種或多種可通過所規(guī)定的標(biāo)明式索引表示。通過多模型標(biāo)明式索引表示關(guān)系表-關(guān)系模型認(rèn)為所有數(shù)據(jù)由表組成。每個表由相同結(jié)構(gòu)的記錄(稱為元組)組成。假定各元組由字段F1、F2及F3組成。每個這樣的字段是一個關(guān)鍵字。若關(guān)鍵字F2從屬于關(guān)鍵字F1,并且關(guān)鍵字F3從屬于關(guān)鍵字F2,從而可容易構(gòu)建該表為了檢索其元組,遵循關(guān)鍵字F1的標(biāo)志符并由此得到F1的每個值,遵循F2的標(biāo)志符,并以相同方法對F3繼續(xù)。每次這樣的三步定義該表的一個元組。一些投影更為簡單在表中尋找所有存在著F3的某值的所有F1和F2的對值,在處理(F1,F(xiàn)2)后結(jié)束搜索。進行(F2,F(xiàn)3)的投影可能是耗時的,因為這需要首先搜索F1的所有值。然后,若該操作是共用的,該標(biāo)明式索引還應(yīng)保持搜索路徑(F2,F(xiàn)3,F(xiàn)1)。即用新的標(biāo)志符組構(gòu)建新的標(biāo)志符復(fù)合關(guān)鍵字F2′F3′F1′,并把這些附加的路徑插到標(biāo)明式索引中。從而可通過二條路徑之一到達(dá)每個記錄并構(gòu)建出多維記錄。多模型標(biāo)明式索引上的其它模型-標(biāo)明式索引可表示其它數(shù)據(jù)模型,包括關(guān)系數(shù)據(jù)庫,面向?qū)ο蟮南到y(tǒng)和分層數(shù)據(jù)庫,其中本質(zhì)上不復(fù)制數(shù)據(jù)。通過多模型標(biāo)明式索引實現(xiàn)面向?qū)ο?的有關(guān)數(shù)據(jù)結(jié)構(gòu))-面向?qū)ο蟮姆椒ò阉袛?shù)據(jù)都看成是對象。每個對象屬于一個類,類確定對象的結(jié)構(gòu)以及可對其施加那些方法(作用)。在分層結(jié)構(gòu)中組織各類,在該分層結(jié)構(gòu)中可繼承結(jié)構(gòu)和方法。面向?qū)ο蟮姆椒ㄊ嵌虝旱?某對象僅在創(chuàng)造它的程序現(xiàn)用時才存在。需要長期支持的對象被定義為持久的。這些對象存儲在盤上并可由其它(授權(quán))程序得到。多模型標(biāo)明式索引可容易地支持這種對象。因為在標(biāo)志符的幫助下,它們的結(jié)構(gòu)是均勻編碼的,程序的以后具體化(later incarnations)以及其它程序可訪問這些持久對象。注意同時持久對象也可是關(guān)系表的一部分。不需要復(fù)制數(shù)據(jù)。
例如考慮圖16的數(shù)據(jù)結(jié)構(gòu)。數(shù)據(jù)記錄223、224、225和226從屬于數(shù)據(jù)記錄221并且和記錄一起被當(dāng)成是一個對象。有可能利用一個等于記錄221的標(biāo)明式關(guān)鍵字的關(guān)鍵字前綴在該索引中高效地搜索所有數(shù)據(jù)記錄(部分關(guān)鍵字搜索)并檢索整個對象。若只需要對象的一部分?jǐn)?shù)據(jù)例如A類型記錄和從屬的B類型記錄,則同樣可利用等于記錄類型A(例如221)的標(biāo)明式關(guān)鍵字的關(guān)鍵字前綴以及作為下個關(guān)鍵字字段的標(biāo)志符B通過部分關(guān)鍵字搜索得到這些數(shù)據(jù)記錄。通過多模型標(biāo)明式索引實現(xiàn)對象關(guān)系-和面向?qū)ο蟮姆椒ú煌?,關(guān)系方法把所有數(shù)據(jù)看成是表。從而在面向?qū)ο蟮木幊陶Z言(C++或Java)中難以集成SQL詢問。對象關(guān)系方法提供一個接口以把表轉(zhuǎn)換成對象。該接口要求用戶規(guī)定對象和表屬性之間的關(guān)系。若某些屬性本身也是表,還需要容許在這些表上進行關(guān)系代數(shù)運算。這些轉(zhuǎn)換由應(yīng)用程序?qū)崿F(xiàn)。從而數(shù)據(jù)庫不能優(yōu)化詢問。標(biāo)明式索引以統(tǒng)一方式處理數(shù)據(jù),從而在面向?qū)ο蟮膽?yīng)用程序和數(shù)據(jù)結(jié)構(gòu)之間提供理想接口。利用標(biāo)明式關(guān)鍵字列出應(yīng)用程序的詢用,從而數(shù)據(jù)庫可優(yōu)化詢問策略。數(shù)據(jù)庫回送標(biāo)明式關(guān)鍵字,后者可容易地由面向?qū)ο蟮膽?yīng)用程序通過面向?qū)ο蟮姆椒ㄐg(shù)處理。至對象的搜索路徑的標(biāo)志符順序確定對象的類,而至不同字段的各標(biāo)志符可使面向?qū)ο蟮某绦蚪鉀Q方法調(diào)用的多形性。
標(biāo)明式索引對所有有關(guān)數(shù)據(jù)定址,例如假定圖16描述某保險公司的數(shù)據(jù)結(jié)構(gòu),其中類型A的記錄是顧客,類型B的記錄是顧客權(quán)利,類型C的記錄是顧客支付。如清楚地示出那樣,通過單個索引結(jié)構(gòu)對所有數(shù)據(jù)記錄定址。
現(xiàn)可以有效地訪問所有對象事例,因為該索引允許從顧客導(dǎo)航到其有關(guān)數(shù)據(jù)-權(quán)利和支付。同時可在該索引結(jié)構(gòu)上有效地導(dǎo)航并且產(chǎn)生顧客表(類型A記錄的集合)、顧客權(quán)利表(類型A和B二種記錄的集合)以及顧客支付表(類型A、C二種記錄的集合)。因為該數(shù)據(jù)結(jié)構(gòu)不造成數(shù)據(jù)的物理聚集,若在不同對象間共享數(shù)據(jù),可以通過不同對象角度有效地訪問,而且從而這樣的數(shù)據(jù)記錄是多維記錄。在該例中,從顧客對象和政策對象二者之一可有效訪問某權(quán)利,并出自一種如圖16中構(gòu)造的類型(結(jié)構(gòu)210)。
面向?qū)ο蟮姆椒ㄔ试S用戶增添用戶定義的類型(UDT)以及用戶定義的功能(UDF)。例如可把事件照片添到保險公司數(shù)據(jù)庫中。在該例子,定義一個從屬于A類型數(shù)據(jù)記錄的新標(biāo)明式數(shù)據(jù)記錄。當(dāng)搜索權(quán)利細(xì)節(jié)時,訪問該事件照片并發(fā)送到照片印出應(yīng)用。借助標(biāo)明式索引,以和類中和關(guān)系中所建立的相同方式,處理照片數(shù)據(jù)和權(quán)利之間的關(guān)系。新的UDT可根據(jù)或相關(guān)于(通過從屬)任何其它數(shù)據(jù)類型?,F(xiàn)在,借助標(biāo)明式索引,應(yīng)用程序可從所定義的各類導(dǎo)航到新UDT,其中從這些定義的類該新UDT可本質(zhì)上是方法或其它特性。在該例中,當(dāng)在該索引中導(dǎo)航時,可導(dǎo)航到某權(quán)利,其中從該權(quán)利可到達(dá)該照片以及權(quán)利數(shù)據(jù)中的任何其它部分。網(wǎng)絡(luò)模型和分層模型通過多模型標(biāo)明式索引實現(xiàn)網(wǎng)絡(luò)模型和分層模型-
網(wǎng)絡(luò)模型以及分層模型已被關(guān)系模型替代。然而,盡管這些模型被廢棄,和面向表的實現(xiàn)相比它們具有一些優(yōu)點(以及許多缺點)。一旦某記錄被檢索,容易得到相關(guān)記錄的地址。
例如,考慮一個帶有顧客和貸款的銀行。每個顧客具有一個地址和幾項貸款,而每頃貸款貸給一個或多個顧客。在網(wǎng)絡(luò)模型下,每個顧客由一個含有至該顧客的鏈接以及至代表該顧客所得到的幾筆貸款的幾個節(jié)點的幾條鏈接的節(jié)點代表。代表某筆貸款的一個節(jié)點類似地鏈接到各獲得該貸款的顧客的節(jié)點。從而給出某項貸款可以容易地訪問貸到該貸款的各顧客并得到他們的家庭地址。
B樹實現(xiàn)要求我們保持二個樹一個顧客和家庭地址樹,第二個是貸款和顧客樹。從而檢索某貸款數(shù)據(jù)后,可得到貸入該貸款的各顧客的姓名。為了找到他們的地址,需要對每個顧客進行一次獨立的B樹搜索。
在本提出的多模型標(biāo)明式索引中(例如圖16),一旦到達(dá)代表貸款的節(jié)點,可以繼續(xù)到達(dá)標(biāo)識貸到該貸款的各顧客的標(biāo)志符(例如類型B的記錄)。通常,對每個顧客最多需要一次盤訪問。本提出的多維標(biāo)明式索引具有網(wǎng)絡(luò)模型的優(yōu)點但沒有它的缺點。網(wǎng)絡(luò)模型獨立對待每個節(jié)點并對長搜索路徑是敏感的,而多模型標(biāo)明式索引統(tǒng)一處理所有數(shù)據(jù),并可能在對數(shù)下處理搜索路徑的長度從而對數(shù)的底是塊的尺寸。從而,實際上,搜索需要單次盤訪問?;跇?biāo)明式索引實現(xiàn)帶有面向?qū)ο蟮姆?wù)器客戶模型-客戶服務(wù)器模型能有效實現(xiàn)關(guān)系模型。按照該模型,所有數(shù)據(jù)駐留在中央計算機(稱為服務(wù)器),而在其它計算機(稱為客戶機)上運行應(yīng)用程序。當(dāng)某應(yīng)用需要數(shù)據(jù)時,它形成一個SQL詢問并由客戶機發(fā)送到服務(wù)器。服務(wù)器評估該詢問并向客戶機回送結(jié)果表。
從而,客戶和服務(wù)器之間的接口通過SQL詢問,服務(wù)器不知道應(yīng)用的內(nèi)部數(shù)據(jù)結(jié)構(gòu)和代碼,客戶和服務(wù)器只在表的名稱及屬性上一致。
在面向?qū)ο蟮姆椒ㄖ性撃P褪ъ`。因為每個數(shù)據(jù)項是一個對象,服務(wù)器必須知道它的內(nèi)部結(jié)構(gòu)。在存在多形態(tài)方法下該問題惡化。服務(wù)器必須知道整個類分層的結(jié)構(gòu)和細(xì)節(jié)。
本標(biāo)明式索引允許對客戶服務(wù)器方法應(yīng)用面向?qū)ο蟮哪P秃蛯ο箨P(guān)系模型。例如,為了到達(dá)某屬性,應(yīng)用程序向服務(wù)器發(fā)送導(dǎo)向所需節(jié)點的關(guān)鍵字組以及鏈接標(biāo)志符組的路徑。根據(jù)該數(shù)據(jù),服務(wù)器可在不具有應(yīng)用程序的數(shù)據(jù)結(jié)構(gòu)的任何知識下滿足該請求。
客戶和服務(wù)器應(yīng)在字段的名字和它們的標(biāo)志符上保持一致。服務(wù)器不需要知道每個這種字段的數(shù)據(jù)類型以及其語義內(nèi)容。
依據(jù)本發(fā)明的另一個方面,提出進一步壓縮索引的表示,從而使它更為有效。因此,估計線索所需的空間,并評估減小空間要求的方法。
若線索是一個分層索引,則對線索索引結(jié)構(gòu)的分析應(yīng)集中最后一層(I0)上線索的主關(guān)鍵字索引的存儲要求-基于線索的數(shù)據(jù)結(jié)構(gòu)的最重要特征之一是其表示的適度尺寸。例如PAIF保持比常規(guī)線索更小的尺寸,這是由于它的壓縮表示。
PAIF索引的最后一層包含一個帶有指向同一塊中其它線索節(jié)點的各鏈接以及指向各記錄的各鏈接的線索。令N為該數(shù)據(jù)庫中的記錄數(shù)量。該索引正好含有N個指向這些記錄的指針。若每個指針需要4字節(jié),這些指針?biāo)枰目臻g為4N字節(jié)。另外,每個指針具有一個方向(1字節(jié)),從而總共為5N字節(jié)。
現(xiàn)考慮一個PAIF線索需要的空間。由于從索引中發(fā)出N個指針并且每個線索節(jié)點具有至少二個子女,最多有n≤N-1個線索節(jié)點。令d代表線索節(jié)點的平均子女?dāng)?shù),則n≤N/(d-1)。因為實際上d>>2,n<<N。每個線索節(jié)點具有一個層號(1字節(jié))。由于每個線索節(jié)點具有至少一個進入線索鏈接,最多有n-1個線索鏈接,每個線索鏈接具有一個標(biāo)記(為單個字符)和一個塊間指針(1字節(jié)),從而總共3n字節(jié),這樣在最差情況下需要3n+4N≤7N字節(jié)。實際上在4N和6N字節(jié)之間。
從另一個角度進行類似分析考慮從層k的節(jié)點v發(fā)出的二個指針p1和p2。令x1為可從p1到達(dá)的一個關(guān)鍵字,而x2為可從p2到達(dá)的一個關(guān)鍵字。x1和x2共享前k-1個字符。在PAIF結(jié)構(gòu),這些字符中的每個最多呈現(xiàn)一次。在B樹表示中需要顯式地在每個關(guān)鍵字中呈現(xiàn)該前k個字符。
PAIF中的節(jié)約是雙重的第一,在每層上每個字符最多存儲一次,并且第二,不必呈現(xiàn)所有字符索引的進一步壓縮-在上面的討論中,指向記錄的指針需要大部分空間。現(xiàn)提出一個可節(jié)約指針空間的方法。該方法基于允許至多個記錄的幾條鏈接共享相同指針。首先假定記錄具有固定尺寸。若前二個記錄駐留在同一塊中,則有可能為第一個節(jié)點保持單個全尺寸的指向某塊的指針,然而不對每條至該塊的其余對外鏈接保持一個指針,而是替而計算它們的位移,即,若前二個記錄駐留在號碼為2000的塊中而第三個記錄在塊7000中,有可能保持結(jié)構(gòu)2000(e,f)7000(h)。若大量對外鏈接都指向同一塊這種節(jié)約非常明顯。若k個這樣的鏈接指向某塊,則在所有k個中分配4B個指針,從而對每個記錄定址的空間減小到4/k字節(jié)加上用于方向的空間(1字節(jié))。對于k≥4這意味著每個記錄在該索引下需要2字節(jié)。
對于尺寸可變的記錄,有可能在塊內(nèi)保存位移,例如2000(ede,fdf)7000(hdh)。替代保存完整指針,保存能裝在單個字節(jié)中的位移。從而,對于每個記錄,它需要1個用于在指針中共享的字節(jié),1個用于方向的字節(jié)和1個用于位移的字節(jié);每個記錄總共3個字節(jié)。
請看圖17的例子,圖17A示出某線索的節(jié)點2000具有分別定址3個盤地址各為3000、5000、7000的數(shù)據(jù)記錄2002、2004、2006的鏈接2010、2011、2012(值分別為5、9、A)。需要表示各鏈接值(每條鏈接1字節(jié))以及各對數(shù)據(jù)的指針(4字節(jié))的空間為15字節(jié)。
現(xiàn)轉(zhuǎn)到圖17B,其中節(jié)點2000保持一條對三個數(shù)據(jù)記錄(2002、2004、2006)的共享鏈接(2010)。該鏈接表示的信息是至塊2020的地址(4字節(jié))以及至駐留在該塊中的數(shù)據(jù)記錄2002、2004數(shù)據(jù)庫2006的各鏈接值(每個鏈接值1字節(jié))。需要表示至該數(shù)據(jù)塊的指針以及這些鏈接的值的空間僅為7字節(jié)-(30005,9,A)。
現(xiàn)在為了訪問數(shù)據(jù)記錄2004可按該數(shù)據(jù)塊的地址+取決于記錄尺寸的位移(假定該數(shù)據(jù)塊中的所有記錄尺寸相等)計算它的地址。
如已解釋那樣,節(jié)點2000可包含至其它數(shù)據(jù)記錄或其它數(shù)據(jù)塊的多條鏈接(例如至容納著數(shù)據(jù)記錄2008的數(shù)據(jù)塊2022的鏈接2024)。
本發(fā)明的數(shù)據(jù)庫文件管理系統(tǒng)最好應(yīng)連帶著周知的并發(fā)和/或分布能力,從而可使多個用戶同時虛擬地訪問該數(shù)據(jù)庫。該數(shù)據(jù)庫可位于中心位置,或者分布在二個或多個遠(yuǎn)程位置之中。
現(xiàn)轉(zhuǎn)到圖18A-D,其中示出四個基準(zhǔn)測試圖,以顯示在響應(yīng)時間上以及數(shù)據(jù)庫的文件尺寸上采用本發(fā)明系統(tǒng)的文件管理系統(tǒng)對商用基于C樹的數(shù)據(jù)庫的性能提高。插入是通過在(用于工作組的)視窗操作系統(tǒng)下運行的Uniface應(yīng)用程序?qū)崿F(xiàn)的。
圖18A的基準(zhǔn)測試測量向某文件插入數(shù)量不斷增加的事先分類好的數(shù)據(jù)記錄(0-1,000,000)所需的時間(按分計)。如圖18A中所示,插入數(shù)量越大,本發(fā)明的數(shù)據(jù)庫文件管理系統(tǒng)在響應(yīng)時間上的改進越大。這樣,在基于C樹的數(shù)據(jù)庫中插入1百萬個記錄約為669分鐘,與之相比本發(fā)明的系統(tǒng)中僅為65分鐘。另外,當(dāng)記錄數(shù)量增加時,本發(fā)明的文件管理系統(tǒng)下的響應(yīng)時間只是少量增加,而在依據(jù)現(xiàn)有技術(shù)的對應(yīng)系統(tǒng)下與其不同響應(yīng)時間明顯增加。
圖18B中的基準(zhǔn)測試示出作為文件中的數(shù)據(jù)記錄數(shù)量(0-1,000,000)的函數(shù)的文件尺寸(按兆字節(jié)計)。如圖18B中所示,記錄的數(shù)量越大,本發(fā)明的數(shù)據(jù)庫文件管理系統(tǒng)在文件尺寸上的改進越大。這樣,對于1百萬個記錄,基于C樹的文件的文件尺寸約為151兆字節(jié),與之相比在本發(fā)明的數(shù)據(jù)庫文件管理系統(tǒng)下僅為22兆字節(jié)。
由表18C和18D類似于圖18A和18B,不同之處是前面二個(18C和18D)中隨機插入數(shù)據(jù)記錄而后面二個(18A和18B)中根據(jù)搜索關(guān)鍵字對數(shù)據(jù)記錄事先分類。如所示結(jié)果和前面一樣,即本發(fā)明的系統(tǒng)在響應(yīng)時間和文件尺寸上都更為有效。
圖19A-D示出本發(fā)明的系統(tǒng)(在DOS操作系統(tǒng)下操作)和商用基于B樹的數(shù)據(jù)庫系統(tǒng)對比的基準(zhǔn)測試圖表。結(jié)果和前面一樣,即本發(fā)明的系統(tǒng)在響應(yīng)時間和文件尺寸上都更為有效。
業(yè)內(nèi)人士對權(quán)利申請步驟標(biāo)示的字母字符以及羅馬字符只是為便于解釋而做出的,決不應(yīng)解釋為各步驟的強加次序,或者也不應(yīng)解釋為相對于該方法的其它步驟每個步驟要執(zhí)行多少次。
在某種特殊性下已對本發(fā)明作出說明,然而業(yè)內(nèi)人士理解在不背離下述權(quán)利要求書的范圍和精神下可實施各種修改和替代。
權(quán)利要求
1.在數(shù)據(jù)處理系統(tǒng)上執(zhí)行的數(shù)據(jù)庫文件管理系統(tǒng)所使用的存儲介質(zhì)中,一種數(shù)據(jù)結(jié)構(gòu)包括一個布置在塊組中的的分層索引;該分層索引包括一個和各數(shù)據(jù)記錄關(guān)聯(lián)的基本分割索引;該基本分割索引使得能夠通過關(guān)鍵字或關(guān)鍵字組訪問和更新數(shù)據(jù)記錄并且對塊組的不平衡結(jié)構(gòu)是敏感的;所述分層索引使得能夠通過關(guān)鍵字或關(guān)鍵字組訪問和更新數(shù)據(jù)記錄并構(gòu)建塊組的均衡式結(jié)構(gòu)。
2.權(quán)利要求1的分層索引,其中所述基本分割索引是線索。
3.在數(shù)據(jù)處理系統(tǒng)上執(zhí)行的數(shù)據(jù)庫文件管理系統(tǒng)所使用的存儲介質(zhì)中,一種數(shù)據(jù)結(jié)構(gòu)包括一個布置在塊組中的并且是在數(shù)據(jù)記錄組的關(guān)鍵字組上構(gòu)建的索引;該索引包括一個和各數(shù)據(jù)記錄關(guān)聯(lián)的基本分割索引;該基本分割索引使得能夠通過關(guān)鍵字或關(guān)鍵字組訪問或更新數(shù)據(jù)記錄,而且它對塊組的不均衡結(jié)構(gòu)是敏感的;所述索引使得能夠通過關(guān)鍵字或關(guān)鍵字組訪問或更新數(shù)據(jù)記錄并構(gòu)建均衡式塊結(jié)構(gòu)。
4.在數(shù)據(jù)處理系統(tǒng)上執(zhí)行的數(shù)據(jù)庫文件管理系統(tǒng)所使用的存儲介質(zhì)中,一種數(shù)據(jù)結(jié)構(gòu)包括一個布置在塊組中的并且是在數(shù)據(jù)記錄組的關(guān)鍵字組上構(gòu)建的索引;該索引包括一個和各數(shù)據(jù)記錄關(guān)聯(lián)的線索;該線索使得能夠通過關(guān)鍵字或關(guān)鍵字組訪問或更新數(shù)據(jù)記錄,而且它對塊組的不均衡結(jié)構(gòu)是敏感的;所述索引使得能夠通過關(guān)鍵字或多個關(guān)鍵字訪問或更新數(shù)據(jù)記錄并構(gòu)建均衡式塊結(jié)構(gòu)。
5.權(quán)利要求1的分層索引,其中所述存儲介質(zhì)是外部存儲器。
6.權(quán)利要求5的分層索引,其中所述存儲介質(zhì)還為內(nèi)部存儲器。
7.權(quán)利要求1的分層索引,其中所述存儲介質(zhì)是內(nèi)部存儲器。
8.權(quán)利要求2的分層索引,其中所述線索是PAIF線索。
9.權(quán)利要求1的分層索引,其中基本分割索引和所述分層索引的代表索引實質(zhì)上為相同的索引圖。
10.權(quán)利要求1的分層索引,其中基本分割索引和所述分層索引的代表索引為不同索引圖。
11.依據(jù)權(quán)利要求8的分層索引,其中所述分層索引的代表索引是B樹索引圖。
12.依據(jù)權(quán)利要求10的分層索引,其中代表索引是B樹索引圖。
13.依據(jù)權(quán)利要求8的分層索引,其中所述分層索引的代表索引實質(zhì)上是PAIF索引圖。
14.依據(jù)權(quán)利要求9的分層索引,其中代表索引實質(zhì)上是PAIF索引圖。
15.依據(jù)權(quán)利要求1的分層索引能支持ODBC標(biāo)準(zhǔn)。
16.依據(jù)權(quán)利要求1的分層索引I0,…,Ih,包括一個代表索引I1,…,Ih,其構(gòu)建成任一Ij是在Ij-1的代表關(guān)鍵字組上構(gòu)建的。
17.依據(jù)權(quán)利要求16的分層索引I0,…,Ih,其中Ih全部包含在一個塊中。
18.權(quán)利要求3的分層索引,其中所述存儲介質(zhì)是外部存儲器。
19.權(quán)利要求18的分層索引,其中所述存儲介質(zhì)還為內(nèi)部存儲器。
20.權(quán)利要求3的分層索引,其中所述存儲介質(zhì)是內(nèi)部存儲器。
21.權(quán)利要求3的分層索引能支持ODBC標(biāo)準(zhǔn)。
22.權(quán)利要求4的分層索引,其中所述存儲介質(zhì)是外部存儲器。
23.權(quán)利要求22的分層索引,其中所述存儲介質(zhì)還為內(nèi)部存儲器。
24.權(quán)利要求4的分層索引,其中所述存儲介質(zhì)是內(nèi)部存儲器。
25.權(quán)利要求4的分層索引能支持ODBC標(biāo)準(zhǔn)。
26.在用于訪問數(shù)據(jù)記錄并在數(shù)據(jù)處理系統(tǒng)上執(zhí)行的數(shù)據(jù)庫文件管理系統(tǒng)中的一種方法;其中這些數(shù)據(jù)記錄和一個布置在塊組中并存儲在存儲介質(zhì)中的基本分割索引相關(guān)聯(lián);該基本分割索引使得能夠通過關(guān)鍵字或關(guān)鍵字組訪問或更新數(shù)據(jù)記錄并且對塊組的不均衡結(jié)構(gòu)是敏感的;該方法用于構(gòu)建一個布置在塊組中的分層索引并包括步驟(a)提供所述基本分割索引;(b)在所述基本分割索引的代表關(guān)鍵字組上構(gòu)建一個代表索引;所述分層索引使得能夠通過關(guān)鍵字或關(guān)鍵字組訪問或更新數(shù)據(jù)記錄并且構(gòu)成一個均衡式塊結(jié)構(gòu)。
27.權(quán)利要求26的分層索引,其中所述基本分割索引是線索。
28.在用于訪問數(shù)據(jù)記錄并在數(shù)據(jù)處理系統(tǒng)上執(zhí)行的數(shù)據(jù)庫文件管理系統(tǒng)中的一種方法;其中這些數(shù)據(jù)記錄和一個布置在塊組中并存儲在存儲介質(zhì)中的基本分割索引相關(guān)聯(lián);該基本分割索引使得能夠通過關(guān)鍵字或關(guān)鍵字組訪問或更新數(shù)據(jù)記錄并且對塊組的不均衡結(jié)構(gòu)是敏感的;該方法用于在各數(shù)據(jù)記錄的各關(guān)鍵字上構(gòu)建一個布置在塊組中的索引,該方法包括步驟(a)提供所述基本分割索引;(b)在所述基本分割索引的代表關(guān)鍵字組上構(gòu)建一個索引,所述索引使得能夠通過關(guān)鍵字或關(guān)鍵字組訪問或更新數(shù)據(jù)記錄并且構(gòu)成一個均衡式結(jié)構(gòu)。
29.在用于訪問數(shù)據(jù)記錄并在數(shù)據(jù)處理系統(tǒng)上執(zhí)行的數(shù)據(jù)庫文件管理系統(tǒng)中的一種方法;其中這些數(shù)據(jù)記錄和一個布置在塊組中的并存儲在存儲介質(zhì)中的線索相關(guān)聯(lián);該線索使得能夠通過關(guān)鍵字或關(guān)鍵字組訪問或更新數(shù)據(jù)記錄并且對于塊組的不均衡結(jié)構(gòu)是敏感的;該方法用于在各數(shù)據(jù)記錄的各關(guān)鍵字上構(gòu)建一個布置在塊組中的索引,該方法包括步驟(a)提供一個線索;(b)在所述線索的代表關(guān)鍵字組上構(gòu)建一個索引,所述索引使得能夠通過關(guān)鍵字或關(guān)鍵字組訪問或更新數(shù)據(jù)記錄并且構(gòu)成一個均衡式塊結(jié)構(gòu)。
30.權(quán)利要求26的方法,其中所述存儲介質(zhì)是外部存儲器。
31.權(quán)利要求30的方法,其中所述存儲介質(zhì)還為內(nèi)部存儲器。
32.權(quán)利要求26的方法,其中所述存儲介質(zhì)是內(nèi)部存儲器。
33.權(quán)利要求27的方法,其中所述線索是PAIF線索。
34.權(quán)利要求26的方法,其中基本分割索引和代表索引實質(zhì)上為相同的索引圖。
35.權(quán)利要求26的方法,其中基本分割索引和代表索引為不同索引圖。
36.權(quán)利要求33的方法,其中代表索引是B樹索引圖。
37.權(quán)利要求35的方法,其中代表索引是B樹索引圖。
38.依據(jù)權(quán)利要求33的分層索引,其中代表索引是PAIF索引圖。
39.依據(jù)權(quán)利要求34的分層索引,其中代表索引是PAIF索引圖。
40.權(quán)利要求26的方法能支持ODBC標(biāo)準(zhǔn)。
41.權(quán)利要求28的方法,其中所述存儲介質(zhì)是外部存儲器。
42.權(quán)利要求41的方法,其中所述存儲介質(zhì)還為內(nèi)部存儲器。
43.權(quán)利要求28的方法,其中所述存儲介質(zhì)是內(nèi)部存儲器。
44.權(quán)利要求28的方法能支持ODBC標(biāo)準(zhǔn)。
45.權(quán)利要求26的方法,其中所述索引支持序貫操作。
46.權(quán)利要求28的方法,其中所述索引支持序貫操作。
47.權(quán)利要求29的方法,其中所述索引支持序貫操作。
48.在權(quán)利要求1的分層索引中通過關(guān)鍵字k訪問被查找數(shù)據(jù)記錄r的方法包括(a)在Ih至Ik中搜索k,其中h≥k≥0,當(dāng)在數(shù)據(jù)記錄的關(guān)鍵字中未找地時為了找到導(dǎo)至k的Ih-1的塊;(b)重復(fù)步驟(a),直至到達(dá)和具有關(guān)鍵字k的數(shù)據(jù)記錄,若存在,關(guān)聯(lián)的I0的塊。
49.在權(quán)利要求1的分層索引中通過關(guān)鍵字k插入數(shù)據(jù)記錄r的方法包括(a)在Ih至Ik中搜索k,其中h≥k≥0,當(dāng)在數(shù)據(jù)記錄的關(guān)鍵字中未找到時為了找到導(dǎo)至k的Ih-1的塊;(b)重復(fù)步驟(a),直至至到達(dá)和具有關(guān)鍵字k的數(shù)據(jù)記錄(若存在)關(guān)聯(lián)的I0和塊B;(c)使r和B關(guān)聯(lián)。
50.在權(quán)利要求1的分層索引中通過關(guān)鍵字k刪除一個數(shù)據(jù)記錄r的方法包括(a)在Ih至Ik中搜索k,其中h≥k≥0,當(dāng)在數(shù)據(jù)記錄的關(guān)鍵字中未找到時為了找到導(dǎo)至k的Ih-1的塊;(b)重復(fù)步驟(a),直至到達(dá)和具有關(guān)鍵字k的數(shù)據(jù)記錄(若存在)關(guān)聯(lián)的I0的塊B;(c)從B斷開r。
51.在權(quán)利要求3的分層索引中通過關(guān)鍵字k訪問被查找數(shù)據(jù)記錄r的方法包括(a)在Ih至Ik中搜索k,其中h≥k≥0,當(dāng)未在數(shù)據(jù)記錄的關(guān)鍵字中找到時為了找到導(dǎo)至k的Ih-1的塊;(b)重復(fù)步驟(a),直至到達(dá)和具有關(guān)鍵字k的數(shù)據(jù)記錄(若存在)關(guān)聯(lián)的I0的塊;
52.在權(quán)利要求3的分層索引中通過關(guān)鍵字k插入數(shù)據(jù)記錄r的方法包括(a)在Ih至Ik中搜索k,其中h≥k≥0,當(dāng)未在數(shù)據(jù)記錄的關(guān)鍵字中找到時為了找到導(dǎo)至k的Ih-1的塊;(b)重復(fù)步驟(a),直至到達(dá)和具有關(guān)鍵字k的數(shù)據(jù)記錄(若存在)關(guān)聯(lián)的I0的塊B;(c)使r和B關(guān)聯(lián)。
53.在權(quán)利要求3的分層索引中通過關(guān)鍵字k刪除一個數(shù)據(jù)記錄r的方法包括(a)在Ih至Ik中搜索k,其中h≥k≥0,當(dāng)未在數(shù)據(jù)記錄的關(guān)鍵字中找到時為了找到導(dǎo)至k的Ih-1的塊;(b)重復(fù)步驟(a),直至到達(dá)和具有關(guān)鍵字k的數(shù)據(jù)記錄(若存在)關(guān)聯(lián)的I0的塊B;(c)從B斷開r。
54.權(quán)利要求26的方法,其中所述組成步驟(b)包括(a)若(Ih-1中的)B溢出,把它分離成二個(或更多的)塊,并且用各新塊的各代表替代B在Ih中的代表。(b)若Ih的塊溢出,建立一個附加層Ih+1并添加到該分層索引中。
55.依據(jù)權(quán)利要求54的方法,其出現(xiàn)下執(zhí)行。
56.依據(jù)權(quán)利要求54的方法,在事后執(zhí)行。
57.權(quán)利要求28的方法,其中所述組成步驟(b)包括(a)若(Ih-1中的)B溢出,把它分離成二個(或更多的)塊,并且用各新塊的各代表替代B在Ih中的代表。(b)若Ih的塊溢出,建立一個附加層Ih+1并添加到該分層索引中。
58.依據(jù)權(quán)利要求57的方法,在出現(xiàn)下執(zhí)行。
59.依據(jù)權(quán)利要求54的方法,在事后執(zhí)行。
60.依據(jù)權(quán)利要求26的方法,其中組成步驟(b)包括(a)以(Bi-1)的塊中至少存在二個線索下,在該塊的某節(jié)點(稱為分離節(jié)點)的多個短鏈接中刪除至少一個短鏈接(稱為分離鏈接);(b)把每個子樹移到一個獨立的塊中;(c)若不存在Bi的塊,建立Bi并在Bi中建立該分離節(jié)點的一個拷貝節(jié)點;(d)若塊Bi存在但在Bi中不存在該分離節(jié)點的拷貝節(jié)點,則在Bi中建立該分離節(jié)點的一個拷貝節(jié)點并把它連接到Bi的線索,從而可以從包括Bi中的根節(jié)點和該復(fù)制節(jié)點以及它的依據(jù)Bi-1′的代表關(guān)鍵字的各帶標(biāo)記的搜索路徑上訪問Bi-1′(分離處理結(jié)束后);(e)若該拷貝節(jié)點不具有直接鏈接,增加從該拷貝節(jié)點到塊Bi-1的直接鏈接;(f)增加一條從該拷貝節(jié)點到塊Bi-1′的遠(yuǎn)鏈接,或者若該拷貝節(jié)點在該遠(yuǎn)鏈接的方向上具有至某子節(jié)點的短鏈接則可用從該子節(jié)點到塊Bi-1′的一條直接鏈接代替該遠(yuǎn)鏈接。
61.?dāng)?shù)據(jù)處理系統(tǒng)上執(zhí)行的數(shù)據(jù)庫文件管理系統(tǒng)使用的存儲介質(zhì)中,一個數(shù)據(jù)結(jié)構(gòu)包括至少一個具有多個節(jié)點和多條鏈接的隨機訪問索引文件(PAIF);所述PAIF的葉節(jié)點各和至少一個可由所述用戶應(yīng)用程序訪問的數(shù)據(jù)記錄關(guān)聯(lián),并且其中所述數(shù)據(jù)記錄的至少一部分構(gòu)成至少一個搜索關(guān)鍵字;所述PAIF中選取的節(jié)點各代表所述嵌入搜索關(guān)鍵字內(nèi)某搜索關(guān)鍵字區(qū)段的一個給定偏移;從所述選取的節(jié)點中的各給定節(jié)點發(fā)出的鏈接各代表所述搜索關(guān)鍵字區(qū)段的一個唯一值;該PIAF具有至少二個各布置在一個塊中的子PIAF;所述數(shù)據(jù)庫文件管理系統(tǒng)還能夠把所述塊組排列成一個均衡式塊結(jié)構(gòu)。
62.依據(jù)權(quán)利要求61的數(shù)據(jù)處理系統(tǒng),其中至少在一個獨立文件中保存至少一部分和所述葉節(jié)點組關(guān)聯(lián)的數(shù)據(jù)記錄。
63.依據(jù)權(quán)利要求61的數(shù)據(jù)處理系統(tǒng),其中至少一個葉和多于一個的數(shù)據(jù)記錄關(guān)聯(lián)。
64.一種用于把新數(shù)據(jù)記錄插入到依據(jù)權(quán)利要求61的現(xiàn)有PAIF中的方法包括執(zhí)行下述步驟?。匾粭l從根節(jié)點開始并在和某葉節(jié)點關(guān)聯(lián)的某數(shù)據(jù)記錄(稱為“參照數(shù)據(jù)記錄”)結(jié)束的參照路徑前進;在該參照路徑中的每個節(jié)點上若某鏈接表示的值等于所述節(jié)點說明的偏移下的1字節(jié)長關(guān)鍵字區(qū)段的值則沿該鏈接前進;在該節(jié)點中說明的偏移超過該關(guān)鍵字中任何相應(yīng)關(guān)鍵字區(qū)段的情況下,或者若不存在具有所述值的鏈接,沿任一至任一參照數(shù)據(jù)記錄的路徑前進;ⅱ.比較參照數(shù)據(jù)記錄的搜索關(guān)鍵字和新數(shù)據(jù)記錄的搜索關(guān)鍵字,以確定區(qū)分這二者的搜索關(guān)鍵字區(qū)段的了小偏移(以下稱為區(qū)分偏移)。ⅲ.根據(jù)該區(qū)分偏移的值,繼續(xù)下述步驟(ⅲ.0-ⅲ.3)中之一ⅲ.0若數(shù)據(jù)記錄相等則結(jié)束;或ⅲ.1若區(qū)分偏移和該參照路徑中的節(jié)點之一所標(biāo)明的偏移匹配,增加另一條從所述之一節(jié)點起源的鏈接,并對所述鏈接分配從該數(shù)據(jù)記錄的搜索關(guān)鍵字取出的該區(qū)分偏移處的搜索關(guān)鍵字區(qū)段的值;或者ⅲ.2若認(rèn)區(qū)分偏移大于其鏈接的葉節(jié)點所指示的偏移,通過鏈接對參照數(shù)據(jù)記錄ⅲ.2.1斷開來自參照數(shù)據(jù)記錄的鏈接(即,它暫時保持“松開”)并把該鏈接移到新節(jié)點;對該新節(jié)點分配該區(qū)分偏移的值;ⅲ.2.2連接參照數(shù)據(jù)記錄和該新節(jié)點(它現(xiàn)在變成葉節(jié)點)并對該鏈接(長鏈接)分配從參照數(shù)據(jù)記錄的搜索關(guān)鍵字在區(qū)分偏移處取出的搜索關(guān)鍵字區(qū)段的值。ⅲ.2.3通過一個鏈接連接該新數(shù)據(jù)記錄和新節(jié)點,并對該鏈接(長鏈接)分配從該新數(shù)據(jù)記錄的搜索關(guān)鍵字在區(qū)分偏移處取出的搜索關(guān)鍵字區(qū)段的值;或者ⅲ.3若不滿足ⅲ.0、ⅲ.1和ⅲ.2的條件,在參照搜索路徑中,存在一個父節(jié)點和一個子節(jié)點,從而該區(qū)分偏移大于分配給該父節(jié)點的偏移同時小于分配給該子節(jié)點的偏移(被考慮的情況A),或者參照搜索路徑里的所有節(jié)點都具有大于該區(qū)分偏移的值(被考慮的情況B);相應(yīng)地施以下述子步驟ⅲ.3.1對情況A和B,建立一個新節(jié)點并對該節(jié)點分配所述區(qū)分偏移的值,僅對情況A-斷開從該父節(jié)點到該子節(jié)點的鏈接并把該鏈接移到一個新的內(nèi)部節(jié)點上(即,該子節(jié)點暫時保持“松開”;ⅲ.3.2對情況A和B,通過一個鏈接(長鏈接)連接該新數(shù)據(jù)記錄和所述新內(nèi)部節(jié)點;分配給該鏈接的值是從該新數(shù)據(jù)記錄的搜索關(guān)鍵字的區(qū)分偏移處得到的搜索關(guān)鍵字區(qū)段的值;ⅲ.3.3對于情況A和B,通過一個新鏈接把該新節(jié)點在A情況下與父節(jié)點或在B情況下與根節(jié)點連接(即,該新節(jié)點在情況A下變?yōu)樾碌母腹?jié)點而在情況B下變?yōu)樾碌母?jié)點),而分配給所述鏈接的值是從參照數(shù)據(jù)記錄的搜索關(guān)鍵字取出的由該新節(jié)點指示的偏移處的搜索關(guān)鍵字區(qū)段。
65.一種用于得到均衡式PAIF索引的方法,該PAIF包括多個各容納多個節(jié)點以及從所述多個節(jié)點發(fā)出的多個鏈接的塊;所述多個節(jié)點之中的葉節(jié)點和數(shù)據(jù)記錄關(guān)聯(lián);該方法包括執(zhí)行下述步驟并且需要多少次就執(zhí)行多少次(ⅰ)用至少二個分離塊替代一個塊,構(gòu)成一個被替代塊,從而所述被分離塊的節(jié)點中的一部分容納到所述分離塊的之一內(nèi),并把所述被分離塊的節(jié)點中的其余節(jié)點容納到其它分離塊中;(ⅱ)把所述被替代塊的節(jié)點中的至少一個節(jié)點拷貝到一個塊中,從而所述至少二個的分離塊成為子塊。
66.在具有至少一個范圍在10至20M字節(jié)的內(nèi)部存儲器和一個外部存儲器的存儲介質(zhì)的計算機系統(tǒng)中;一種數(shù)據(jù)結(jié)構(gòu)包括一個各數(shù)據(jù)記錄的各關(guān)鍵字上的索引;該索引布置在塊組中;從而對于十億個數(shù)據(jù)記錄,為了訪問與所述十億個數(shù)據(jù)記錄中的任一個相關(guān)聯(lián)的一個塊,在和所述數(shù)據(jù)記錄的關(guān)鍵字的長度無關(guān)下實際上對所述外部存儲器的訪問不多于二次。
67.在具有至少一個范圍在10至20M字節(jié)的內(nèi)部存儲器和一個外部存儲器的存儲介質(zhì)的計算機系統(tǒng)中;一種數(shù)據(jù)結(jié)構(gòu)包括一個各數(shù)據(jù)記錄的各關(guān)鍵字上的索引;該索引布置在塊組中;從而對于十億個數(shù)據(jù)記錄,和所述數(shù)據(jù)記錄的關(guān)鍵字的長度無關(guān)地實際上在所述內(nèi)部存儲器中容納該索引的所有的塊。
68.在具有存儲介質(zhì)的計算機系統(tǒng)中,一種數(shù)據(jù)結(jié)構(gòu)包括一個各數(shù)據(jù)記錄的各關(guān)鍵字上的索引;該索引布置在均衡式塊結(jié)構(gòu)中并能在所述數(shù)據(jù)記錄進行序貫操作;索引尺寸基本上不受所述關(guān)鍵字的長度的影響。
69.在數(shù)據(jù)處理系統(tǒng)上執(zhí)行的數(shù)據(jù)庫文件管理系統(tǒng)所使用的存儲介質(zhì)中,一種數(shù)據(jù)結(jié)構(gòu)包括一個各數(shù)據(jù)記錄的各關(guān)鍵字上的索引;這些數(shù)據(jù)記錄至少為二種類型,其中第二類型的數(shù)據(jù)記錄從屬于第一類型的數(shù)據(jù)記錄。
70.在數(shù)據(jù)處理系統(tǒng)上執(zhí)行的數(shù)據(jù)庫文件管理系統(tǒng)所使用的存儲介質(zhì)中,一種數(shù)據(jù)結(jié)構(gòu)包括一個各數(shù)據(jù)記錄的各標(biāo)明式關(guān)鍵字上的標(biāo)明式索引;由標(biāo)明式數(shù)據(jù)記錄組成的數(shù)據(jù)記錄至少為二種類型;其中第二類型的標(biāo)明式數(shù)據(jù)記錄從屬于第一類型的標(biāo)明式數(shù)據(jù)記錄。
71.權(quán)利要求69的存儲介質(zhì),其中所述索引構(gòu)成一個分層索引。
72.權(quán)利要求70的存儲介質(zhì),其中所述標(biāo)明式索引構(gòu)成一個分層索引。
73.依據(jù)權(quán)利要求70的存儲介質(zhì),其中所述標(biāo)明式索引構(gòu)成一個多維索引。
74.依據(jù)權(quán)利要求72的存儲介質(zhì),其中所述標(biāo)明式索引構(gòu)成一個多維索引。
75.依據(jù)權(quán)利要求70的存儲介質(zhì),其中所述標(biāo)明式索引構(gòu)成一個多模型索引。
76.依據(jù)權(quán)利要求72的存儲介質(zhì),其中所述標(biāo)明式索引構(gòu)成一個多模型索引。
77.依據(jù)權(quán)利要求74的存儲介質(zhì),其中所述標(biāo)明式索引構(gòu)成一個多模型索引。
78.依據(jù)權(quán)利要求69的存儲介質(zhì),其中第一類型的數(shù)據(jù)記錄和第二類型的從屬數(shù)據(jù)記錄構(gòu)成一對一關(guān)系。
79.依據(jù)權(quán)利要求70的存儲介質(zhì),其中第一類型的數(shù)據(jù)記錄和第二類型的從屬數(shù)據(jù)記錄構(gòu)成一對多關(guān)系。
80.依據(jù)權(quán)利要求71的存儲介質(zhì),其中第一類型的數(shù)據(jù)記錄和第二類型的從屬數(shù)據(jù)記錄構(gòu)成一對一關(guān)系。
81.依據(jù)權(quán)利要求73的存儲介質(zhì),其中第一類型的數(shù)據(jù)記錄和第二類型的從屬數(shù)據(jù)記錄構(gòu)成一對多關(guān)系。
82.權(quán)利要求69的存儲介質(zhì),其中所述索引包括線索。
83.權(quán)利要求70的存儲介質(zhì),其中所述索引包括線索。
84.權(quán)利要求71的存儲介質(zhì),其中所述分層索引的基本分割索引是線索。
85.權(quán)利要求69的存儲介質(zhì),其中為對具有復(fù)合關(guān)鍵字K1…Kn的從屬數(shù)據(jù)記錄進行訪問或更新事務(wù)處理,在該索引中存在一條根據(jù)復(fù)合關(guān)鍵字K1…Kn引導(dǎo)到該從屬數(shù)據(jù)記錄的從屬搜索路徑;該從屬搜索路徑包括一條至具有關(guān)鍵字K1…Kn-1的數(shù)據(jù)記錄的搜索路徑。
86.權(quán)利要求70的存儲介質(zhì),其中為對具有復(fù)合關(guān)鍵字K1…Kn的從屬數(shù)據(jù)記錄進行訪問或更新事務(wù)處理,在該索引中存在一條根據(jù)復(fù)合關(guān)鍵字K1…Kn引導(dǎo)到該從屬數(shù)據(jù)記錄的從屬搜索路徑;該從屬搜索路徑包括一條至具有關(guān)鍵字K1…Kn-1的數(shù)據(jù)記錄的搜索路徑。
87.依據(jù)權(quán)利要求75的存儲介質(zhì),其中所述多模型包括關(guān)系模型。
88.依據(jù)權(quán)利要求75的存儲介質(zhì),其中所述多模型包括面向?qū)ο蟮哪P汀?br> 89.依據(jù)權(quán)利要求75的存儲介質(zhì),其中所述多模型包括對象關(guān)系模型。
90.依據(jù)權(quán)利要求75的存儲介質(zhì),其中所述多模型包括客戶服務(wù)器模型。
91.依據(jù)權(quán)利要求76的存儲介質(zhì),其中所述多模型包括關(guān)系模型。
92.依據(jù)權(quán)利要求76的存儲介質(zhì),其中所述多模型包括面向?qū)ο蟮哪P汀?br> 93.依據(jù)權(quán)利要求76的存儲介質(zhì),其中所述多模型包括對象關(guān)系模型。
94.依據(jù)權(quán)利要求76的存儲介質(zhì),其中所述多模型包括客戶服務(wù)器模型。
95.在數(shù)據(jù)處理系統(tǒng)上執(zhí)行的數(shù)據(jù)庫文件管理系統(tǒng)所使用的存儲介質(zhì)中,一種數(shù)據(jù)結(jié)構(gòu)包括一個存儲在存儲介質(zhì)中的并在塊組中所存儲的所述各數(shù)據(jù)記錄的各關(guān)鍵字上構(gòu)建的索引;借助通過鏈接于段與數(shù)據(jù)記錄鏈接的葉塊該索引布置在塊組中;所述索引特征在于,至少一個所述鏈接由存儲在同一塊中的至少二個的數(shù)據(jù)記錄共享。
96.權(quán)利要求95的存儲介質(zhì),其中所述索引由線索構(gòu)成。
97.在數(shù)據(jù)處理系統(tǒng)上執(zhí)行的數(shù)據(jù)庫文件管理系統(tǒng)所使用的存儲介質(zhì)中,一種數(shù)據(jù)結(jié)構(gòu)包括一個存儲在存儲介質(zhì)中的并在塊組中所存儲的所述各數(shù)據(jù)記錄的各關(guān)鍵字上構(gòu)建的索引;借助通過鏈接手段與數(shù)據(jù)記錄鏈接的葉塊該索引布置在塊組中;所述索引特征在于,至少一個所述鏈接由存儲在同一塊中的至少二個的數(shù)據(jù)記錄共享;所述索引由依據(jù)權(quán)利要求1的一種分層索引構(gòu)成,并且所述基本分割索引的各塊和所述數(shù)據(jù)記錄鏈接。
98.權(quán)利要求97的存儲介質(zhì),其中所述基本分割索引由線索構(gòu)成。
全文摘要
一種在數(shù)據(jù)處理系統(tǒng)上執(zhí)行的用于訪問數(shù)據(jù)記錄的數(shù)據(jù)庫文件管理系統(tǒng),各數(shù)據(jù)記錄和一個布置在塊組(402、405、406和407)并存儲在存儲介質(zhì)中的線索索引鏈接。線索索引(A,B和I,元素402)使得能夠通過關(guān)鍵字和關(guān)鍵字組訪問或更新數(shù)據(jù)記錄并且對不均衡的塊結(jié)構(gòu)敏感。提供一種構(gòu)建布置在塊組中的一個分層索引的方法,其包括提供線索索引并在該線索索引的代表關(guān)鍵字上構(gòu)建一個代表索引的步驟。分層索引使得能夠通過關(guān)鍵字或關(guān)鍵字組訪問或更新數(shù)據(jù)記錄而且它構(gòu)建均衡式塊結(jié)構(gòu)。
文檔編號G06F12/00GK1292901SQ99803698
公開日2001年4月25日 申請日期1999年1月22日 優(yōu)先權(quán)日1998年1月22日
發(fā)明者莫謝·沙德門 申請人:Ori軟件開發(fā)有限公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1
万全县| 东阿县| 漾濞| 陵水| 藁城市| 油尖旺区| 吉水县| 错那县| 澳门| 班戈县| 三河市| 广水市| 东源县| 新竹市| 商都县| 尼木县| 仪陇县| 新泰市| 社会| 晴隆县| 会泽县| 镇赉县| 西充县| 长葛市| 邳州市| 西峡县| 荥经县| 江源县| 德昌县| 铜山县| 海伦市| 济南市| 湘阴县| 洛南县| 南丰县| 鲁山县| 当阳市| 嘉兴市| 怀远县| 淳化县| 正安县|