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

利用索引樹對數(shù)據(jù)庫記錄進行并發(fā)存取的方法

文檔序號:6405269閱讀:164來源:國知局
專利名稱:利用索引樹對數(shù)據(jù)庫記錄進行并發(fā)存取的方法
技術(shù)領(lǐng)域
本發(fā)明屬于數(shù)據(jù)處理,具體涉及的是數(shù)據(jù)庫記錄的管理。
目前的數(shù)據(jù)處理系統(tǒng)包含有數(shù)據(jù)庫管理程序。借助于這些程序能夠方便地存取各個數(shù)據(jù)庫表格,每個表由多個記錄組成。關(guān)系數(shù)據(jù)庫程序能夠存取若干個不同的數(shù)據(jù)庫表,其中一個數(shù)據(jù)庫表的元素包含在另一數(shù)據(jù)庫表中。關(guān)系數(shù)據(jù)庫程序允許用戶利用幾個數(shù)據(jù)庫表所共有的某一個特定的字段或元素對這些不同的數(shù)據(jù)庫表中的數(shù)據(jù)進行搜索、存取和更改。例如,一個數(shù)據(jù)庫表可能含有雇員名和雇員序號,另一個數(shù)據(jù)庫表可能有雇員名和雇員薪水,第三個數(shù)據(jù)庫表可包含雇員名和雇員住地。關(guān)系數(shù)據(jù)庫程序可允許用戶存取雇員名、雇員序號、雇員薪水以及雇員住址并對這些表格作些改變,而不必一一存取每個數(shù)據(jù)庫表。
這些數(shù)據(jù)庫管理程序的一個重要方面是能夠?qū)蝹€數(shù)據(jù)庫中的諸記錄提供快速而有效的訪問能力。
最近的數(shù)據(jù)處理系統(tǒng)能夠支持多用戶,使每個用戶能夠同時并發(fā)地存取數(shù)據(jù)。
數(shù)據(jù)庫管理程序通常使用一種索引文件來迅速而有效地存取數(shù)據(jù)庫表中的記錄。這些索引文件通常是按B型樹結(jié)構(gòu)構(gòu)成的。談?wù)揃型樹的參考資料是“EfficientLockingForConcurrentOperationonB-Tree(B型樹上的并發(fā)操作的有效互鎖)”,這篇文章是由Lehman和Yao兩人于1981年12月發(fā)表在ACMTransactiononDatabaseSysten雜志第六卷第4期650頁至670頁上的。講述B型樹結(jié)構(gòu)的其它參考資料有“TheUbiquitousB-Tree”(到處可見的B型樹),由Comer發(fā)表在ComputingSurveys第11卷第二期,1979年6月,121-137頁;再一篇文章是“ConcurrentOperationonB-TreeWithOverTaking”(利用追補法對B型樹的并發(fā)操作),由Sagiv發(fā)表在ACM雜志關(guān)于數(shù)據(jù)庫系統(tǒng)原理的SIGACT-SIGMOD研討會的會議錄中,1985年3月,28-37頁。
作為B型樹結(jié)構(gòu)構(gòu)造出來的索引文件包含有一個根節(jié)點和許多由根節(jié)點分義出來的節(jié)點級。包含在這些節(jié)點中的信息是指向下一級節(jié)點或指向數(shù)據(jù)庫中記錄的指針,這些指針又進一步包括可用于訪問數(shù)據(jù)庫中鍵記錄的被稱為鍵記錄信息的內(nèi)容,記錄的各個鍵按順序放置在所有節(jié)點上。例如,對于雇員名,可有一個按字為順序的索引樹。其中根節(jié)點包含引用鍵數(shù)據(jù),這些引用鍵可供下一級節(jié)點直接或間接地用來訪問有關(guān)的記錄。引用鍵含有索引字段,也就是雇員名字為拼寫的信息。因此,根節(jié)點中的有序的鍵將逐一指向下一級的名節(jié)點。換句話說,根節(jié)點下的第一個節(jié)點可以間接或直接地訪問以A、B、C開頭的所有雇員名,與這第一個節(jié)點并排的下一節(jié)點可包含雇員名是以D-M字為開頭的雇員記錄,這一級上的最后一個節(jié)點可包含雇員名是N-Z開始的記錄。當(dāng)搜索整個索引文件樹時,最終總可以達(dá)到底部節(jié)點,其內(nèi)容是指向存貯器中單個記錄的記錄鍵。
對數(shù)據(jù)庫表實施并發(fā)存取的問題之一出在多個事務(wù)處理企圖同時存取同一個記錄的時候。特別是當(dāng)一個用戶希望改變一個記錄而另一用戶又試圖使用這一記錄,那么就出現(xiàn)競爭狀態(tài)。對此問題的一種解法辦法是對B型樹中各索引所對應(yīng)的記錄或其一部分實施互斥訪問或互鎖,以保證在一用戶正在訪問某記錄時不準(zhǔn)改變此索引節(jié)點或記錄。在IBM技術(shù)創(chuàng)新公告(IBMTechnicalDisclosureBulletin)第25卷第7B號,1982年12月,3725-3729頁上有一篇題為“IndexLockingamdSplitting”(索引的互鎖與分離)以及在這同一雜志的第19卷第10期,1977年3月,3887-3889頁上有一篇題為“B型樹上的并發(fā)操作的互鎖協(xié)議”都講述了互鎖問題。
互鎖辦法的缺點是當(dāng)一個用戶訪問時用一把鎖禁止了其它用戶的訪問。
本發(fā)明的目標(biāo)是提供一種更為有效的通過索引樹存取數(shù)據(jù)庫中記錄的方法,同時還保障了對此數(shù)據(jù)庫記錄的更加有效的并發(fā)存取。
索引節(jié)點中的信息在被幾個用戶訪問過程中可能被修改。隨著有記錄被插入數(shù)據(jù)庫表中或從該表中刪去,索引節(jié)點中將含有被刪去或插入的鍵記錄信息。在記錄插入操作期間,因為一個節(jié)點的存貯量有限,所以一個節(jié)點中的信息可能被移到另一節(jié)點。這種插入事務(wù)處理將試圖把一個節(jié)點中的鍵記錄信息移到另一節(jié)點來完成插入任務(wù)。在并發(fā)的事務(wù)處理訪問期間上述這種信息移動會由于其索引信息被改變而造成并發(fā)事務(wù)處理訪問中的錯誤條件,本發(fā)明的目標(biāo)是在改變索引信息期間使幾個事務(wù)處理能夠并發(fā)地訪問該索引而不產(chǎn)生錯誤條件。
遵照本發(fā)明給出了在一組記錄鍵中根據(jù)通過一索引樹的一個鍵記錄或其一部分取出該鍵記錄數(shù)據(jù)的一種方法。該索引樹為不同的事務(wù)處理提供并發(fā)存取記錄鍵的能力,索引樹有一根節(jié)點和至少一級與根節(jié)點連接的子節(jié)點,每個子節(jié)點有一鍵記錄引用(即指針-譯注),指向相鄰的下一級中的一個或多個節(jié)點,每個節(jié)點還有能直接存取鍵數(shù)據(jù)的底部節(jié)點。此方法包括七個步驟(1)利用所述的鍵記錄部分從根節(jié)點開始橫穿諸節(jié)點直到底部某個節(jié)點;(2)對于其它的并發(fā)的事務(wù)處理,限制其對正在被穿越的節(jié)點和之前被訪問過的節(jié)點除了讀以外的所有訪問;(3)在所說的底部節(jié)點中標(biāo)識出所述的鍵記錄;(4)對于所說的鍵記錄限制對它們進行讀以外的所有訪問;(5)撤消對穿越的各個節(jié)點的所有訪問限制;(6)取出鍵記錄數(shù)據(jù)(7)在這個記錄數(shù)據(jù)被取出后撤消對這個鍵記錄的訪問限制。
此外還提出了插入和刪除記錄鍵的方法以及在并發(fā)存取期間允許同時改變索引樹結(jié)構(gòu)的方法。
在附加的權(quán)利要求書中敘述了確信是屬于本發(fā)明之特征的新的特性。但是結(jié)合附圖參照下文的詳細(xì)說明,將會很好地理解本發(fā)明本身及權(quán)利要求中未曾提到的特性和優(yōu)點。本文的附圖有

圖1是數(shù)據(jù)庫表的說明;
圖2是數(shù)據(jù)庫表在計算機存貯器中的說明;
圖3是說明一個簡單的B型樹索引的框圖;
圖4是帶索引的B型樹節(jié)點數(shù)據(jù)在計算機存貯器中的存貯說明;
圖5是說明通過帶索引的B型樹的初始搜索操作的流程圖;
圖6是說明通過帶索引的B型樹的取數(shù)操作的流程圖;
圖7是通過帶索引的B型樹進行插入操作的流程圖;
圖8是通過帶索引的B型樹執(zhí)行刪除操作的流程圖;
圖9是說明分離一個節(jié)點的算法的流程圖;
圖10是拆除一個節(jié)點的算法的流程圖。
本發(fā)明涉及的是數(shù)據(jù)庫程序?qū)τ涗浀拇嫒栴}。下面的例子大刀闊斧地簡化了數(shù)據(jù)庫的存取問題,其目的是為了使讀者更容易理解包含在例子中的本發(fā)明。讀者應(yīng)當(dāng)明白,包含在數(shù)據(jù)庫表中的信息項目和內(nèi)容實際上比所說明的要復(fù)雜得多。
圖1所說明的表(10)包括雇員姓名和編號。每個雇員記錄包含一個單一的雇員號。表(10)中的姓名按字母順序排列。但是內(nèi)行人懂得,在計算機內(nèi)存中,諸記錄的存貯方式并不是這樣的。
圖2說明雇員的姓名/編號記錄在計算機存貯器(12)中的存貯情況。每個記錄(14,16,18,20,24和26)均有若干部分組成。在記錄14中,先后包括地址部分(28)、雇員名(30)和雇員號(32)。地址部分(28)是該雇員名和雇員號(30,32)在計算機內(nèi)存中的實際位置。圖2所示的表12說明姓名的存貯并不是按字母順序的,甚至不是相鄰的。
數(shù)據(jù)庫程序通常為用戶提供一種能使他快速地存取存貯器中指定記錄的索引樹。這種索引樹的例子如圖3所示。為了簡化表示,該索引樹只給出兩級。索引40包含有一個根節(jié)點和與它連接的三個節(jié)點50,52和54。根節(jié)點42稱為“索引標(biāo)識”,它詳細(xì)說明了該索引中的信息類型。在這個例子中,其索引是由雇員姓名按字母遞升順序構(gòu)成的索引。每個雇員姓名包括一個鍵。本例中的鍵是雇員姓名的第一個字母,這些鍵被用于標(biāo)識下一級的節(jié)點,以便在搜索一個特定的雇員姓名記錄時使用。在根結(jié)點42中,各個鍵由字母“D”(44),“F”(46)和“空”48組成。D這個鍵(44)指引用戶從根結(jié)點42(父節(jié)點)到節(jié)點50(子節(jié)點)。節(jié)點50含有可供直接存取雇員Andrews、Baker和Chester的鍵記錄信息。但是在根節(jié)點中只用了一個鍵。這個鍵涉及到最高層的信息(或最高鍵的記錄),這個最高層的信息目前在節(jié)點50中或許不存在或者已經(jīng)存在。類似地,字母“F”(46)指導(dǎo)用戶轉(zhuǎn)到節(jié)點52,在這個節(jié)點中包含有雇員名Edgar和Edward。最后“空”(48)這個鍵使用戶轉(zhuǎn)到節(jié)點54。“空”這個鍵表示節(jié)點54是最后一個相鄰的葉子節(jié)點。內(nèi)行的人應(yīng)當(dāng)理解,索引40也可以包含多級節(jié)點。但為簡單起見,在此只給出兩級索引40。
圖4中56、58和60三列分別表示節(jié)點50、52和54的內(nèi)容在計算機內(nèi)存中可能出現(xiàn)的形式。列56表示包含在節(jié)點50中的信息在計算機內(nèi)存中如何存貯,列56包括一組指針62和數(shù)據(jù)存貯區(qū)64,指針66指向含有雇員姓名Andrew和雇員號的信息。類似地,指針68指向雇員名Baker及有關(guān)信息。因此,當(dāng)一個事務(wù)處理存取一個節(jié)點時,它首先考察這個節(jié)點信息的指針部分以確定這一鍵記錄信息存在何處。這一指針的信息可用來直接存取包含所需信息的存貯單元。在包含有中間級的多級索引結(jié)構(gòu)中,這一節(jié)點存貯單元將包含指向按鍵記錄信息排列的下一個相鄰位置的節(jié)點的地址的指針。這些指針將按照它們有關(guān)的鍵信息排序。但是一個連續(xù)的節(jié)點,例如節(jié)點50,可包含有幾個雇員名,所以只能用父節(jié)點中的單個鍵來引用它。所引用的鍵將是該節(jié)點中所允許的最高鍵的記錄信息。在含有中間節(jié)點的索引樹中,前頭(或父)節(jié)點中的鍵將是本節(jié)點中最高記錄的鍵,這個鍵被本節(jié)點中所有的鍵所引用。
圖5說明通過索引來存取記錄信息的流程圖。應(yīng)當(dāng)理解,在數(shù)據(jù)庫管理程序中,由圖5到8所示的軟件程序是在訪問事務(wù)處理期間被調(diào)用的。根據(jù)所舉的例子,該事務(wù)處理試圖取出一個記錄來確定其雇員編號,或者試圖執(zhí)行一些其它操作,諸如記錄的插入和刪除操作。
圖4和3還畫出了從一個樹葉節(jié)點指向下一個相鄰樹葉節(jié)點的指針51和53。72和74這些指針將指導(dǎo)訪問型的事務(wù)處理去存取下一個相鄰位置的樹葉節(jié)點。在這個例子中,點60中Null這一項76表示節(jié)點60是最后一個節(jié)點。
在圖5中,訪問程序從步驟100開始并繼續(xù)到步驟102,在這里,索引的根節(jié)點被S型鎖鎖住并開始存取。這個索引標(biāo)識符節(jié)點標(biāo)明,該索引的類型并為訪問本例中的一個記錄提供初始方向。索引標(biāo)識節(jié)點將按雇員姓名的字母遞升順序來標(biāo)識該索引。在103步,按照父節(jié)點中的信息標(biāo)識出要被存取的這個子節(jié)點。在104步,確定要被執(zhí)行的那個操作是否是取數(shù)操作。如果不是取數(shù)操作,換句話說,如果是插入記錄(或者是插入一個鍵記錄)或刪除記錄(或刪除鍵記錄)操作,該程序便前進到106步,以確定父節(jié)點底下的節(jié)點是不是葉子節(jié)點或底部節(jié)點。如是,該程序進到110步,并且在這個子節(jié)點上獲得一個X型鎖。X型鎖是排他鎖,它阻止對此結(jié)點作任何其它訪問。換言之,使用了X鎖的那個事務(wù)處理阻止所有其它事務(wù)處理來訪問這個節(jié)點。
現(xiàn)在回到104步,如果本操作是一個取數(shù)操作或者在106步得知這個子節(jié)點不是葉子節(jié)點,那么該程序前進到108步,在這個子節(jié)點上獲得一把S型鎖。S型鎖允許其它并發(fā)性的用戶作些有限制的訪問。所謂有限制的訪問指的是只允許其它用戶讀這個節(jié)點,而不準(zhǔn)許作諸如刪除或修改等等其它操作。現(xiàn)在程序前進到112步,在這一步,該程序開始存取這個子節(jié)點并確定正在被存取的那個記錄的鍵是否高于這個子節(jié)點中的鍵,如是,該程序就進到114步來判別這一樹形的索引結(jié)構(gòu)是否被鎖住。如果未被鎖住,該程序就進到118步,其中的操作是父節(jié)點和這個子節(jié)點上的鎖均被解開而整棵樹被鎖住,接著該程序從118步返回到102步,以便在允許對這棵樹上鎖的情況下重新開始該操作。在重新試作上述操作時可以作些優(yōu)化,以便減少要被存取的節(jié)點數(shù)。
在本例中,對整棵樹的X型鎖用來告訴所有別的訪問操作樹形結(jié)構(gòu)正在改變。如果在試圖對這個樹上鎖時,正在做一棵樹的上X型鎖的存取,敲湊庵制笸急匭氳鵲較瓤嫉哪歉齜夢式崾笤俳小 對一棵樹的S型鎖告訴其它所有訪問者本樹不在作結(jié)構(gòu)改變,允許其它訪問者并發(fā)地使用這個索引樹。但是在這個S型鎖松開之前不能作別的改變操作。不論是否有S型或X型鎖橫切一棵樹的操作總可發(fā)生,橫切樹的操作可包括鍵記錄的刪除和插入。
在114步,如果這個樹上著鎖,或者在112步當(dāng)這個鍵不大于該子節(jié)點中的最高鍵,那么該程序進到116步來確定該子節(jié)點是否是葉子,若不是,下一步就是115步來松開父節(jié)點上的鎖之后回到103步。但是,這個子節(jié)點如果是葉子,程序就進到120步,以便松開父節(jié)點的鎖,然后再到122、124和126步以便確定該操作是取、插入還是刪除操作。在這個例子中,如果上述三種操作哪個都不是,那么本程序就在130步返回到用戶。實際上這種返回將包括一個出錯指示,它表明這個訪問處理程序不能識別所要執(zhí)行的操作。
如果要執(zhí)行的操作是取數(shù)操作,那么該程序進入到如圖6所示的200步。在這一步中,該程序找出正在被搜索的所需要的鍵或者起碼是相鄰的那個最高鍵。在202那一步,該程序接著請求對此鍵記錄有條件地上鎖,在本例中,有條件的上鎖是請求對各記錄鍵實施上鎖管理的程序來執(zhí)行的。所謂“有條件”指的是如果這個鎖不能立即被答應(yīng),那么將對提出請求的訪問者給出一個回答以指出這樣的一種鎖不能被答應(yīng)。在204步中使用這一回答。如果這個鎖至今還不被答應(yīng),該程序就轉(zhuǎn)到206步來松開這個子節(jié)點的鎖,然后再轉(zhuǎn)到208步,對此鍵記錄請求無條件上鎖。在208這一步,訪問者一直等到這樣一種鎖被許可后才往下進行。一旦上鎖條件滿足后,該程序通過轉(zhuǎn)接符213轉(zhuǎn)到圖5中所示的102步,以便重新開始搜索。讓我們回到204步,如果已經(jīng)允許上鎖,該程序便進到209步以便送回這個鍵記錄的數(shù)據(jù)。在210步,子節(jié)點的鎖被松開。在211步松開鍵記錄的鎖。內(nèi)行的人將十分清楚,211這一步將在這個事務(wù)處理完成時或者在略早一些時候發(fā)生。
圖7用來說明插入操作。內(nèi)行人知道,必要時,在插入操作開始前,對要被插入的鍵記錄需要上X型鎖。這一操作將把一個記錄插入到計算機內(nèi)存中并在索引中增加一個插入鍵,以便更新該索引中的有關(guān)節(jié)點,從而使其它事務(wù)處理能夠使用新插入的記錄。在300這一步它首先判斷這個鍵能否和底部或葉子節(jié)點相配。如是,該程序轉(zhuǎn)到304步去找高于要被插入的那個鍵的下一相鄰的鍵。如果下一個鍵不在本節(jié)點中,再去訪問下一個相鄰位置的葉子節(jié)點。如果不存在下一相鄰位置的葉子節(jié)點。本次訪問將會得到一個空指示符,從而在308步,該程序針對下一鍵記錄請求一個有條件的X型鎖。接著在312步確定這個鎖是否允許。如被允許,在318步把這個新的鍵插入到第一個底部節(jié)點,這就是在300步到達(dá)的節(jié)點。在324步,下一個記錄和鍵記錄的鎖被松開。此外,在329步把所有鎖著的鎖都松開,接著在325步上程序返回。內(nèi)行人顯然會明白,在事務(wù)處理結(jié)束后,對于被插入的那個鍵記錄的鎖將被放開?,F(xiàn)在回到312步,如果那把鎖不答應(yīng),該程序就進行到316步去松開那個子節(jié)點上的鎖,然后再轉(zhuǎn)到322步請求對這下一個鍵記錄上無條件的X型鎖。然后該程序通過轉(zhuǎn)接符328回到102步(圖5)。
讓我們回到300步,如果這個鍵與該葉子節(jié)點不相配,該程序就轉(zhuǎn)到302步去請求對整棵樹上有條件的X型鎖。在306步確定這個有條件的鎖是否被許可。若不,該程序進入310步去松開這個子節(jié)點的鎖,然后到314步,請求一個對于整個樹的無條件的X型鎖。在允許對整棵樹上無條件的X型鎖之后或者在306步允許上鎖,該程序就繼續(xù)到320步執(zhí)行節(jié)點分裂算法。此算法給出一個新節(jié)點,這個節(jié)點含有從前面的節(jié)點分離出來的部分信息。節(jié)點分裂算法還可能給出外加的中間節(jié)點,這個外加的節(jié)點將可能被更新。父節(jié)點也被修改,使它包含最高鍵記錄和指向新節(jié)點的指針。圖9中說明了一種節(jié)點分裂算法。而且在Addison-Wesley出版公司于1983年出版的名為“數(shù)據(jù)結(jié)構(gòu)和算法”這本書的170-179頁中講述了節(jié)點分裂算法,該書的作者是Aho、Hopcroft和Ullman。節(jié)點分裂算法完成后,該程序轉(zhuǎn)到326步去解開整棵樹的鎖。然后該程序經(jīng)過轉(zhuǎn)接符327回到102步(圖5)。
圖8舉例說明了刪除操作。內(nèi)行人很清楚,要被刪除的那個鍵記錄將被掛上X型鎖,這當(dāng)然是在必要時在作刪除操作之前做的。在400步,該程序?qū)ふ蚁乱粋€相鄰的高于要被刪除的鍵的鍵。在402步,該程序請求對這下一個鍵記錄掛有條件的X型鎖,然后轉(zhuǎn)404步確定這個鎖是否被允許。若不允許,這個程序就轉(zhuǎn)到406步去解下相應(yīng)子節(jié)點的鎖,接著在410步請求對這下一鍵記錄掛無條件的鎖。然后該程序經(jīng)由轉(zhuǎn)接符431回到102步(圖5)。
讓我們回到404步,如果這把鎖被許可,那么在408步,這個鍵就被刪除。然后程序轉(zhuǎn)到412步去確定這下一個節(jié)點是否是空。若不空,該程序在421步解下這個節(jié)點的鎖,在413步解開這下一鍵記錄的鎖之后在414步返回。但是,如若該節(jié)點為空,該程序就進入416步請求對樹作有條件的X型鎖操作。然后在418步確定這個鎖是否被允許,若不,則在420步去解開這個子節(jié)點的鎖。然后在400步請求對樹上無條件的X型鎖,一旦這個鎖被允許,來自422或418的程序前進到424步去執(zhí)行節(jié)點拆除算法,這個算法將從索引樹中移去這個空節(jié)點和從上一節(jié)點指向這個空節(jié)點的引用。圖10是這一拆除算法的圖解說明。在426步,這棵樹的鎖被解開。在429步,被刪除的鍵記錄和下一鍵記錄的鎖被解開。內(nèi)行的人應(yīng)當(dāng)會明白,429步在該事務(wù)處理結(jié)束時發(fā)生。
圖9舉例說明了一種節(jié)點分裂算法。在這個算法中,加到索引樹中的新節(jié)點用來存貯新插入的鍵記錄。而且索引樹中的所有在新節(jié)點之前的節(jié)點或父節(jié)點均可能被修改以反映出這個新加的節(jié)點和其中包含的信息。在500步,得到一個新節(jié)點。在502對這個新節(jié)點掛上X型鎖。在504步,把被分裂的那個節(jié)點中的一部分鍵移到新結(jié)點。顯然,在被分裂的節(jié)點中應(yīng)當(dāng)有一個指針指向這個新節(jié)點。此外,如果需要,在新節(jié)點中也應(yīng)該有一個指針指明對這個新節(jié)點而言的下一個相鄰位置上的節(jié)點。在506步,被分裂的節(jié)點和新節(jié)點都被解鎖。在507步,相對于被分裂節(jié)點的父節(jié)點被掛上X型鎖。在508步,這個父節(jié)點被更新。在10步,解開這個父節(jié)點的鎖。內(nèi)行人應(yīng)當(dāng)明白,父節(jié)點的更新實際上可能涉及這個父節(jié)點的分裂和這棵索引樹上的若干個相繼位置上的父節(jié)點的更新。
圖10舉例說明了一種節(jié)點拆除算法。這個節(jié)點拆除算法的用途是從索引樹中移去一個空節(jié)點,以便貯備存貯空間并提高對鍵的存取效率。在600步,使鄰接這個空節(jié)點一個節(jié)點掛上X型鎖。在602步,這個鄰接節(jié)點的鍵被移到空節(jié)點。在604步,更新接受節(jié)點(即原來的空節(jié)點-譯注)中的指針和其中的鍵,以便用新加載的鍵對這些結(jié)點定位。在606步,它的下一個節(jié)點,即當(dāng)前的空節(jié)點被拆除。在608節(jié),解除這個子節(jié)點上的各個鎖,解除剛被移走鍵的那個節(jié)點的鎖以及那個相鄰節(jié)點(目前已經(jīng)被拆除)上的鎖。然后在610步對各個父節(jié)點掛上X型鎖。在612步,修改各個父節(jié)點,目的是拆除指向被拆除節(jié)點的指針和調(diào)整與從被拆除的節(jié)點中得到鍵的那個節(jié)點相關(guān)的鍵。在614步,解除各個父節(jié)點上的鎖。正如在圖9中所講過的一樣,各個父節(jié)點的更新可能會引起一種遞歸處理,這對內(nèi)行的人來說是不難理解的。
本發(fā)明是用于這樣一個系統(tǒng)的該系統(tǒng)為若干個數(shù)據(jù)庫事務(wù)處理提供并發(fā)地存取其索引樹的能力。本發(fā)明的目標(biāo)是在下述意義下提供并發(fā)存取的能力,即如果認(rèn)為有必要,在單個事務(wù)處理中執(zhí)行重復(fù)的存取將會得到一致的結(jié)果。換句話說,前面解釋過的存取過程使得一個事務(wù)處理在另一個事務(wù)處理正在改變索引樹期間去訪問這個索引樹時不會送回錯誤的或無效的信息,但在改變索引樹期間去存取索引樹的一部分則可能導(dǎo)致錯誤,因為索引樹可以上鎖,所以上述結(jié)果是可能的。使用索引樹鎖的目的是使得索引樹改變期間能夠并發(fā)地存取這棵樹。但是,事務(wù)處理協(xié)議要求當(dāng)存在一個可能導(dǎo)致錯誤的條件時,碰到這種條件的事務(wù)處理請求對這棵樹上鎖以阻止送回錯誤條件或錯誤的數(shù)據(jù)。當(dāng)一個事務(wù)處理請求對索引樹上鎖時,如果有另一個事務(wù)請求正在修改這棵索引樹結(jié)構(gòu),那么發(fā)出上鎖請求的事務(wù)處理必須等待,因為早先那個事務(wù)處理已經(jīng)用了這棵樹的鎖。等到允許使用這個樹的鎖時,發(fā)出請求的事務(wù)處理將得到保證在它訪問期間將不會再有別的事務(wù)處理對這個索引樹結(jié)構(gòu)作任何改變。這種處理方法要比對索引樹執(zhí)行互斥訪問好,因為它允許并發(fā)存取并提供一種機構(gòu)來保證事務(wù)處理不在索引樹結(jié)構(gòu)改變期間取回正在改變的信息。
本發(fā)明防止第一個事務(wù)處理在并發(fā)的第二個事務(wù)處理完成它的插入和刪除操作之前看到其操作結(jié)果。
雖然上面對于本發(fā)明的描述是相對于說明性的實施例的,但是這個描述并不局限于此。熟悉本行的人看了上述說明之后將會明白對本實施例的各種改變以及其它一些實施例。因此,可以予料,附加的權(quán)利要求將包括屬于本發(fā)明范圍的上述這種修改和實施例。
權(quán)利要求
1.在一個系統(tǒng)中執(zhí)行一個事務(wù)處理時利用通過索引樹的一個鍵記錄的一部分從一組記錄鍵中取出鍵記錄數(shù)據(jù)的一種方法,在這個系統(tǒng)中,另一些事務(wù)處理可以通過所說的索引樹并發(fā)地存取所說的記錄鍵,所說的索引樹至少有一個根節(jié)點,每個節(jié)點有一鍵記錄指針指向下一較低的有序的層次中的一個或多個節(jié)點,所說的索引樹還有一些底部節(jié)點,用它們可以訪問所說的鍵記錄數(shù)據(jù),其特征在于下述步驟(a)利用所述的鍵記錄部分從所說的根節(jié)點出發(fā)穿越所述的各個節(jié)點直到抵達(dá)底部的一個節(jié)點;(b)限制其它并發(fā)的事務(wù)處理對正在被穿過的節(jié)點和前已訪問過的節(jié)點作讀操作以外的訪問;(c)在所述的底部節(jié)點中標(biāo)識出所述的鍵記錄;(d)對所述的鍵記錄限制對它作讀操作以外的訪問;(e)對被穿越的節(jié)點撤消對它的所有訪問限制;(f)取出鍵記錄數(shù)據(jù);和(g)在記錄數(shù)據(jù)被取出后,撤消對此鍵記錄的訪問限制。
2.如權(quán)利要求1所述的方法,其特征在于步驟(c)進一步包括下列步驟(c1)標(biāo)識出所述的節(jié)點中所述記錄的各個鍵;(c2)根據(jù)該節(jié)點中所述記錄的各鍵確定是否要穿越另一個節(jié)點;(C3)如果要穿越另一節(jié)點,則回到(a)步;(C4)如果不要穿越另一節(jié)點,則按照這個鍵記錄的那一部分來標(biāo)識出這一鍵記錄數(shù)據(jù)。
3.如權(quán)利要求2所述的方法,其特征在于所表述的步驟(f)包括下列分步(f1)從所述的節(jié)點中取出所說的鍵記錄;(f2)根據(jù)所述節(jié)點中的那個鍵記錄存取一個記錄;和(f)從所述的記錄中得到記錄數(shù)據(jù)。
4.如權(quán)利要求3所述的方法,其特征在于所表述的步驟(g)進一步包括要等到取鍵記錄數(shù)據(jù)的事務(wù)處理完成之后才能撤消對此鍵記錄的訪問限制。
5.在一個系統(tǒng)中執(zhí)行一個事務(wù)處理期間按照通過索引樹的一個鍵記錄的格式插入一個由一組記錄鍵組成的鍵記錄的一種方法,在插入過程中有其它的事務(wù)處理通過所述的索引樹并發(fā)地存取所述的記錄鍵,所述的索引樹至少有一個根節(jié)點,每一節(jié)點有一鍵記錄指針指向下一相鄰層次中的一個或多個節(jié)點,還有一些底部節(jié)點,它們被用來存取所述記錄的各個鍵,其特征在于下列步驟(a)根據(jù)所述的鍵從所說的根節(jié)點出發(fā)穿過所有節(jié)點直到一個底部節(jié)點為止;(b)在穿越上述節(jié)點時對其它并發(fā)的事務(wù)處理而言禁止它們對正在被穿過的節(jié)點和不超過一個的前面節(jié)點作讀以外的所有訪問;(c)標(biāo)識出與要被插入到所述的底部節(jié)點的那個鍵記錄有關(guān)的下一相鄰位置的鍵記錄并禁止對此底部節(jié)點的所有訪問;(d)限制對所述的下一個相鄰位置的鍵記錄的所有訪問,(e)插入所述的鍵記錄;(f)撤消對下一個相繼位置的記錄鍵的訪問限制;以及(g)撤消對于被穿越節(jié)點的所有訪問限制。
6.如權(quán)利要求5所述的方法,其特征在于所表達(dá)的步驟(e)包括下列分步(e1)判斷在所述的節(jié)點中能否插入此鍵記錄;(e2)如果能把這個鍵插入該節(jié)點,轉(zhuǎn)到(e6)步;(e3)如果這個鍵不能被插入到該節(jié)點中,則給出一種指示,表明該索引樹結(jié)構(gòu)正在改變;(e4)更改這個索引樹結(jié)構(gòu),增加一個節(jié)點來接收這個鍵記錄;(e5)去掉索引樹結(jié)構(gòu)改變的指示;以及(e6)把所述的鍵記錄插入該節(jié)點。
7.在一個系統(tǒng)中作一個事務(wù)處理期間按照通過索引樹的一個鍵記錄刪除一個由一組記錄鍵組成的鍵記錄的方法,在刪除操作期間,可能有其它的事務(wù)處理通過所述的索引樹并發(fā)地存取所說的記錄鍵,所說的索引樹有一根結(jié)點,根節(jié)點之下至少還有一層節(jié)點,每個節(jié)點都有一鍵記錄指針指向下一相鄰層次上的一個或多個節(jié)點,還有一些底部節(jié)點,它們被用來存取所述的記錄鍵,其特征在于下列步驟(a)根據(jù)所給的鍵,從所述的根節(jié)點開始穿過所說的各個節(jié)點直到底部節(jié)點為止;(b)在穿越諸節(jié)點時阻止其它并發(fā)的事務(wù)處理對正在被穿越的節(jié)點和不超過一個的前頭節(jié)點作讀以外的訪問;(c)標(biāo)識出在底部節(jié)點中與要被刪除的鍵記錄相關(guān)的下一相鄰位置的鍵記錄并禁止對此底部節(jié)點作任何存取;(d)禁止對所說的下一相鄰位置上的鍵記錄的任何訪問;(e)刪除所述的鍵記錄;(f)撤消對被穿越節(jié)點的所有訪問限制;及(g)解除對下一相鄰位置上鍵記錄的訪問限制。
8.如權(quán)利要求7所述的方法,其特征在于所說的步驟(e)包括下列子步(e1)判斷要被刪去的鍵記錄是不是所述節(jié)點中的唯一鍵記錄;(e2)如果要被刪除的鍵不是該節(jié)點中的唯一的鍵,那么刪除該節(jié)點中所說的鍵記錄,然后轉(zhuǎn)到(f)步;(e3)如果要被刪除的鍵是該節(jié)點中唯一的鍵,那么給出一種指示,指明該索引樹結(jié)構(gòu)正在被改變;(e4)刪除該節(jié)點中的所述的鍵記錄;(e5)修改索引樹結(jié)構(gòu),拆除此節(jié)點;及(e6)抹去索引樹在改變的指示。
9.如權(quán)利要求8所述的方法,其特征在于講到的步驟(g)進一步涉及要等到請求刪除該鍵記錄的事務(wù)處理結(jié)束后才能撤消對此鍵記錄的訪問限制
10.關(guān)于修改索引樹結(jié)構(gòu)的一種方法,該方法在一個系統(tǒng)中的一次事務(wù)處理期間根據(jù)一個鍵記錄來存取至少一個由一組記錄鍵組成的鍵記錄,在這個系統(tǒng)中還有別的事務(wù)處理通過所述的索引樹并發(fā)地訪問所述的記錄鍵,所說的索引樹結(jié)構(gòu)至少有一個節(jié)點,該節(jié)點有一鍵記錄指針,指向任何一個別的節(jié)點或者指向可以被直接存取的所述的鍵記錄,其特征在于下列步驟(a)判斷索引樹是否正在被改變的指示;(b)給出一個索引樹在改變的指示,以便允許對此索引樹進行并發(fā)存取;(c)更改所述的索引樹節(jié)點,以及(d)撤消索引樹在改變的指示。
全文摘要
一種利用索引樹進行并發(fā)存取的方法包括步驟(1)利用所說的鍵記錄從所說的根節(jié)點開始穿越所述各個節(jié)點直到一個底部節(jié)點;(2)禁止別的并發(fā)的事務(wù)處理對正在被穿越的節(jié)點和在它之前被訪問過的節(jié)點的讀之外的訪問;(3)指出在底部節(jié)點中的所說的鍵記錄;(4)限制對所述的鍵記錄只能作讀操作;(5)解除對被穿過的諸節(jié)點的所有訪問限制;(6)取出這個鍵記錄數(shù)據(jù);以及(7)在取出記錄數(shù)據(jù)后撤消對此鍵記錄的訪問限制。
文檔編號G06F17/30GK1035193SQ88107439
公開日1989年8月30日 申請日期1988年10月29日 優(yōu)先權(quán)日1987年10月30日
發(fā)明者弗蘭克·埃利奧特·萊溫尼, 卡德萊斯卡納·莫漢 申請人:國際商用機器公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1
延边| 莲花县| 项城市| 昂仁县| 古蔺县| 岳阳县| 远安县| 军事| 陵水| 岳阳县| 自治县| 班戈县| 岳普湖县| 东方市| 灵山县| 石狮市| 宁德市| 河曲县| 阳春市| 吐鲁番市| 巧家县| 改则县| 黎城县| 平果县| 丹东市| 宁乡县| 咸阳市| 都安| 茶陵县| 平和县| 彭水| 井冈山市| 拉萨市| 宣化县| 河北区| 十堰市| 司法| 杨浦区| 靖宇县| 建阳市| 荃湾区|