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

數(shù)據(jù)庫中對象標(biāo)識符回收再利用的方法

文檔序號:6417178閱讀:218來源:國知局
專利名稱:數(shù)據(jù)庫中對象標(biāo)識符回收再利用的方法
技術(shù)領(lǐng)域
本發(fā)明涉及計(jì)算機(jī)數(shù)據(jù)庫,具體涉及數(shù)據(jù)庫中對象標(biāo)識符(OID),特別是數(shù)據(jù)庫中對象標(biāo)識符回收再利用的方法。
背景技術(shù)
OID(object-identifier)是面向?qū)ο髷?shù)據(jù)庫(OODBs)中提出的新概念。面向?qū)ο髷?shù)據(jù)庫中采用了“面向?qū)ο蟆钡姆椒?,即?shí)體類型用“類”表示,實(shí)體用“對象”表示,系統(tǒng)給數(shù)據(jù)庫中的每個(gè)對象賦予一個(gè)“對象標(biāo)識符”(OID),起唯一標(biāo)識作用。這種實(shí)現(xiàn)方法在語義上克服了以往“面向值”數(shù)據(jù)模型的缺點(diǎn)。OID的引入,避免了數(shù)據(jù)庫系統(tǒng)的變量冗余,使對象可以方便地被引用并共享。
但就現(xiàn)在看來,OODBs還不成熟,遠(yuǎn)不能完全替代關(guān)系數(shù)據(jù)庫系統(tǒng)。因而人們轉(zhuǎn)入將面向?qū)ο髷?shù)據(jù)庫的優(yōu)點(diǎn)(OID是其中必不可少的一部分)引入到關(guān)系數(shù)據(jù)庫中,形成了功能強(qiáng)大的對象關(guān)系數(shù)據(jù)庫。這種新型的數(shù)據(jù)模型中,OID的概念消除了傳統(tǒng)關(guān)系數(shù)據(jù)庫系統(tǒng)中存在的數(shù)據(jù)模型的缺陷。
OID作為面向?qū)ο髷?shù)據(jù)庫以及對象關(guān)系數(shù)據(jù)庫中的一項(xiàng)非常重要的技術(shù),也存在形式各樣的實(shí)現(xiàn)方法。目前使用廣泛的一種方法為句柄(handle)維護(hù)法,該系統(tǒng)每次生成新的對象,都將該句柄的值加一并賦給對象作為對象標(biāo)志符,由于它簡單易行(編程簡單且管理方便且移植性強(qiáng)),因而適用廣泛,能夠有效應(yīng)用于ORDBs和OODBs中。
然而,在句柄維護(hù)法中,位長的限制決定了數(shù)據(jù)庫中可用OID的個(gè)數(shù),一旦所有OID全部分配,則數(shù)據(jù)庫將面臨崩潰。為了避免OID資源耗盡而產(chǎn)生系統(tǒng)崩潰,目前一般采用以下兩種方法1、采用擴(kuò)展OID的長度來增加可用OID的個(gè)數(shù)方法。但是該方案會引起OID對資源耗費(fèi)的增加,而且實(shí)現(xiàn)更復(fù)雜。
2、對已廢棄的OID進(jìn)行回收。就目前來看,回收不失為一種很好的方法。它可不需要考慮在整個(gè)數(shù)據(jù)庫生存周期中所需要的OID個(gè)數(shù),而將考慮范圍縮小為某個(gè)時(shí)間周期內(nèi)所需的OID,對有限的OID進(jìn)行循環(huán)使用。只要OID的數(shù)量滿足某段時(shí)間內(nèi)數(shù)據(jù)庫的需要即可。
現(xiàn)有的OID回收方法為首先,在數(shù)據(jù)庫中設(shè)置兩個(gè)表①HighestObj(Obj)存放下一個(gè)可用的對象標(biāo)識符;②Free(Obj)用于回收已刪除的對象標(biāo)識符。
一旦刪除對象,則用戶手動將其OID插入到表Free中一旦創(chuàng)建對象,則先查詢Free中是否有可用OID。如果有,則從其中分配一個(gè)OID給對象,并手動將該OID從Free中刪除;如果沒有,則從表HighestObj中分配一個(gè)給對象并手動將該OID從HighestObj中刪除。
該回收方案雖然能夠?qū)崿F(xiàn)OID的回收,但是卻將繁重的工作交與用戶手動實(shí)現(xiàn),每刪除一個(gè)對象即將對應(yīng)的OID進(jìn)行回收。用戶不僅需要自行分配OID,而且還要根據(jù)資源回收情況決定采取哪種方式進(jìn)行分配;由于用戶不清楚數(shù)據(jù)庫內(nèi)部具體的情況,使數(shù)據(jù)庫的管理變得比較復(fù)雜且效率比較低。

發(fā)明內(nèi)容
本發(fā)明所要解決的技術(shù)問題是提供一種在采用句柄維護(hù)法的數(shù)據(jù)庫中使用的對象標(biāo)識符回收再利用的方法,在該方法中,OID的回收與對象物理空間的回收過程相一致,能自動回收對象標(biāo)識符,可充分利用現(xiàn)有的計(jì)算機(jī)資源并提高系統(tǒng)性能。
本發(fā)明解決上述技術(shù)問題所采用的技術(shù)方案是數(shù)據(jù)庫中對象標(biāo)識符回收再利用的方法包括建立數(shù)據(jù)結(jié)構(gòu)的步驟、對象標(biāo)識符回收的步驟、對象標(biāo)識符再利用的步驟;建立數(shù)據(jù)結(jié)構(gòu)的步驟包括(1)在磁盤中建立一個(gè)用于存貯回收對象標(biāo)識符的回收文件,該文件分為若干個(gè)塊,每一個(gè)塊都具有一個(gè)頭信息,頭信息中至少包括該塊的塊號、該塊中對象標(biāo)識符的個(gè)數(shù);回收文件以棧的方式存儲塊;塊以棧的方式存儲對象標(biāo)識符;(2)在共享內(nèi)存中增加存放兩個(gè)變量的域,其中一個(gè)變量為塊變量,它指向?qū)ο髽?biāo)識符回收文件中最后一個(gè)可用塊;另一個(gè)變量為對象標(biāo)識符變量,它指向?qū)ο髽?biāo)識符回收文件中最后一個(gè)可用塊的最后一個(gè)對象標(biāo)識符。兩個(gè)變量始終表示工作的開始位置;(3)在內(nèi)存中建立一個(gè)用于存放回收文件中的最后一個(gè)有效塊的拷貝的緩沖區(qū);對象在數(shù)據(jù)庫中的存在形式有兩種①live對象——有效對象;②dead對象——不再被使用的舊版本對象,包括被邏輯刪除的對象和被更新的對象。被邏輯刪除的對象稱為廢棄對象。
對象標(biāo)識符回收的步驟為物理上刪除廢棄對象時(shí),將其對象標(biāo)識符存貯到回收文件的步驟;物理上刪除對象包括①單個(gè)對象的刪除、②整個(gè)類的刪除。
上述方案中,在單個(gè)對象的刪除時(shí)(在清理類中的已廢棄對象時(shí))進(jìn)行對象標(biāo)識符回收的步驟為(1)邏輯刪除對該刪除對象加邏輯刪除(根據(jù)相應(yīng)情況區(qū)分刪除和更新)標(biāo)記;(2)物理刪除掃描到該對象的邏輯刪除標(biāo)記,將被刪除對象的對象標(biāo)識符回收,存貯到回收文件中;上述方案中,直接清理整個(gè)類的所有對象時(shí)回收對象標(biāo)識符的步驟為(1)為該事務(wù)分配一個(gè)臨時(shí)文件;
(2)在刪除該類的過程中,掃描該類所有對象,并將其中的live對象和廢棄對象的OID存放在該臨時(shí)文件中;當(dāng)在事務(wù)提交時(shí),將該臨時(shí)文件中的所有對象標(biāo)識符全部導(dǎo)入回收文件;當(dāng)事務(wù)發(fā)生回滾時(shí),將該臨時(shí)文件中的內(nèi)容拋棄。
上述方案中,對象標(biāo)識符再利用的步驟包括(1)將塊變量所指向的文件塊拷貝到該緩沖區(qū)中;(2)當(dāng)對新的對象分配對象標(biāo)識符時(shí),系統(tǒng)從緩沖區(qū)中取出對象標(biāo)識符變量所對應(yīng)的對象標(biāo)識符,同時(shí)將對象標(biāo)識符變量減1;當(dāng)對象標(biāo)識符變量為空時(shí),將該緩沖區(qū)在磁盤上對應(yīng)的塊清空,并從回收文件中拷貝出前一個(gè)塊到緩沖區(qū)中,同時(shí)將塊變量減1;當(dāng)塊變量為空時(shí),則轉(zhuǎn)入到原對象標(biāo)識符分配機(jī)制。
上述方案中,它還包括系統(tǒng)恢復(fù)處理的步驟,系統(tǒng)恢復(fù)處理的步驟包括將兩個(gè)變量記錄到檢查點(diǎn)中的步驟。
上述方案中,它還包括系統(tǒng)恢復(fù)處理的步驟,系統(tǒng)恢復(fù)處理的步驟為包括(1)將兩個(gè)變量記錄在日志中;(2)系統(tǒng)恢復(fù)時(shí),根據(jù)日志找到最后一次分配的對象標(biāo)識符,當(dāng)在系統(tǒng)對象標(biāo)識符的原分配模式之下,直接將該對象標(biāo)識符變量加1,作為下一個(gè)可分配的對象標(biāo)識符;當(dāng)在回收對象標(biāo)識符的分配模式,還要在日志記錄中找到最后分配的對象標(biāo)識符對應(yīng)的塊變量,然后根據(jù)該對象標(biāo)識符和塊變量在回收文件中匹配,確定下一個(gè)可分配的對象標(biāo)識符。
本發(fā)明方法與現(xiàn)有的對象標(biāo)識符回收再利用的方法相比,具有以下優(yōu)點(diǎn)1、能自動回收對象標(biāo)識符。不需要用戶決定如何回收、回收后的OID如何放置以及如何分配已回收OID。一旦系統(tǒng)開始進(jìn)行物理空間回收,即會同步回收對應(yīng)的無用的對象標(biāo)識符,使得回收對象標(biāo)識符的過程對用戶透明。
2、根據(jù)數(shù)據(jù)庫系統(tǒng)中不同的對象刪除策略對OID的進(jìn)行相應(yīng)的回收處理,使之與對象物理空間的回收工作同步。
對于一般數(shù)據(jù)庫系統(tǒng),對象刪除包括邏輯刪除和物理刪除兩個(gè)部分。其中,邏輯刪除對象只是將其標(biāo)記為不可見,但該對象仍然占用物理空間,如果需要,可以通過修改相關(guān)域使得該對象重新可見;物理刪除即真正的將對象從磁盤中刪除并回收其物理空間。在這種情況下,本發(fā)明將OID的回收放到對象物理刪除時(shí)進(jìn)行。
如果數(shù)據(jù)庫中對象的刪除是一次性的,即直接物理刪除該對象,則直接在這一步回收該對象的OID。一般而言,這種一次性刪除情況出現(xiàn)比較少。
3、為了便于回收OID的再利用,減少磁盤輸入/輸出(I/O)并有效實(shí)現(xiàn)回收再利用的同步,在內(nèi)存中開辟一塊專門緩沖區(qū)用于進(jìn)行OID的分配工作。
由于回收的OID是無序的,不能使用數(shù)值遞加的策略來管理回收的OID,而必須在文件中準(zhǔn)確定位下一個(gè)可分配OID。在內(nèi)存中開辟一塊緩沖區(qū)buffer_for_oid(BFO),以塊為單位對OID回收文件(ORF)進(jìn)行讀取,有效的減少磁盤I/O并提高效率。
采用棧機(jī)制對ORF進(jìn)行管理。從前往后存放回收的OID并從后往前分配OID。BFO總是記錄回收文件中最后一個(gè)塊,并從該塊的末端向前分配。這樣可以有效避免塊內(nèi)部空洞情況的出現(xiàn)。
4、在事務(wù)中加入OID處理模塊,使得在故障出現(xiàn)時(shí)避免OID的重復(fù)分配,并盡可能地減少OID損失。
在故障出現(xiàn)時(shí),內(nèi)存中的信息包括BFO內(nèi)容以及定位BFO中OID位置的變量(包括SBN和SROC。SBNORF中最后一頁的塊號,SROC最后一個(gè)可用OID在塊中的位置)將會全部丟失。在這種情況下,可通過引入事務(wù)的恢復(fù)策略(具體為檢查點(diǎn)和回滾恢復(fù)算法)將損失降到最小。
檢查點(diǎn)恢復(fù)檢查點(diǎn)(checkpoint)是指在磁盤中對某些請求作記錄的一種狀態(tài)。系統(tǒng)會定期地或在系統(tǒng)關(guān)閉時(shí)做檢查點(diǎn),一旦發(fā)生故障,能夠自動地從最后一個(gè)檢查點(diǎn)開始進(jìn)行恢復(fù)工作。我們在檢查點(diǎn)中加入記錄OID分配位置的兩個(gè)變量(SBN和SROC)。按照這種機(jī)制,在系統(tǒng)正常關(guān)閉時(shí)檢查點(diǎn)中記錄的是當(dāng)前SBN和SROC,系統(tǒng)重啟時(shí)能夠恢復(fù)到關(guān)閉前的狀態(tài),不會出現(xiàn)任何損失。
普通日志恢復(fù)每當(dāng)系統(tǒng)從回收文件中取出一個(gè)塊時(shí),即將該塊的塊號記錄到日志文件中,稱為PR(PageRecord)。一旦系統(tǒng)發(fā)生故障,即從日志記錄中的最后一個(gè)檢查點(diǎn)開始向后掃描,在該掃描過程中記錄下最后的一個(gè)PR以及最后一次分配的OID(后面簡稱為LOID),然后根據(jù)這兩項(xiàng)日志記錄值在ORF中進(jìn)行匹配,得到故障前的OID分配情況。這樣一來,就可以避免故障恢復(fù)后OID的重復(fù)分配并將損失降低為0。


圖1為本發(fā)明的實(shí)施方案回收OID建立的數(shù)據(jù)結(jié)構(gòu)框架圖2為本發(fā)明的實(shí)施方案OID回收機(jī)制圖3為本發(fā)明的實(shí)施方案OID分配流程4為本發(fā)明的實(shí)施方案事務(wù)恢復(fù)流程圖具體實(shí)施方式
本發(fā)明的實(shí)施方案僅包括在PostgreSQL數(shù)據(jù)庫中的實(shí)現(xiàn)。但是本領(lǐng)域的技術(shù)人員會了解到對于其它的數(shù)據(jù)庫系統(tǒng)本發(fā)明也可以通過調(diào)整具體方案得以實(shí)現(xiàn)。
PostgreSQL數(shù)據(jù)庫是一個(gè)使用句柄維護(hù)策略的典型對象關(guān)系數(shù)據(jù)庫,它使用32位的無符號整數(shù)作為OID,最多可以分配4G個(gè)OID。
本發(fā)明的實(shí)施方案包括建立數(shù)據(jù)結(jié)構(gòu)的步驟、對象標(biāo)識符回收的步驟、對象標(biāo)識符再利用的步驟、系統(tǒng)恢復(fù)處理的步驟;1、建立數(shù)據(jù)結(jié)構(gòu)的步驟由于不同的數(shù)據(jù)庫系統(tǒng)會采取不同的刪除、更新策略,因而需要調(diào)整具體策略對OID加以回收。為了實(shí)現(xiàn)OID的回收和再利用,本發(fā)明方法建立了如下三個(gè)數(shù)據(jù)結(jié)構(gòu)(如圖1)(1)在磁盤中建立一個(gè)用于存貯回收OID的ORF,用于記錄收集的OID。該文件分為若干個(gè)塊(block),每一個(gè)塊都有一個(gè)頭信息(head information),頭信息中包括該塊的塊號(block_num)、該塊中OID的個(gè)數(shù)(oid_num)。在該ORF中,每一個(gè)塊除去相應(yīng)的頭信息,最多可以存放255個(gè)OID。ORF以棧的方式存儲塊;塊以棧的方式存儲OID。
(2)在共享內(nèi)存ShareMemory中的ShmemVariableCache結(jié)構(gòu)體中增加存放兩個(gè)變量的域其中一個(gè)變量為塊變量block_num(以下簡稱為SBN),用于記錄對應(yīng)于OID文件中的最后一個(gè)有效塊的塊號,另一個(gè)變量為對象標(biāo)識符變量reclaim_oid_count(以下簡稱為SROC),用于記錄該塊中當(dāng)前可用OID。無論對于OID的回收還是OID的再利用操作來說,它們總是表示工作的開始位置。它們各自擁有一個(gè)特殊的Invalid值SBN等于Invalid表示整個(gè)OID文件為空;SROC為Invalid表示當(dāng)前的OID文件塊為空。在系統(tǒng)的運(yùn)行過程中,這兩個(gè)變量始終指向OID回收文件中最后一個(gè)可用塊的最后一個(gè)OID。
(3)在內(nèi)存中建立一個(gè)存放ORF中的最后一個(gè)有效塊拷貝文件的緩沖區(qū)BFO(其結(jié)構(gòu)和和大小都同于OID文件的一個(gè)塊)。分配回收的OID時(shí),系統(tǒng)會把OID文件中的最后一個(gè)有效塊拷貝到BFO中。
2、對象標(biāo)識符回收的步驟對象標(biāo)識符回收的步驟為將物理上刪除對象的對象標(biāo)識符回收并存貯到回收文件中的步驟,物理上刪除對象包括物理上刪除的清理表中的所有廢棄對象、物理空間刪除整個(gè)關(guān)系的所有對象。
對象的刪除分為邏輯上的刪除和物理上的刪除,邏輯刪除只是將對象標(biāo)記為無效,使得對象不可見,在用戶輸入delete或是update命令時(shí),只是邏輯刪除對象;而物理刪除才真正釋放對象占有的物理空間。邏輯刪除的對象,稱為舊版本對象,在某種情況下,舊版本對象可能被重新置為有效??紤]到上述對象恢復(fù)的情況,我們將OID的回收工作推遲到物理刪除時(shí)進(jìn)行。在PostgreSQL系統(tǒng)中,有下面兩種操作會導(dǎo)致對象的物理空間刪除(1)vaccum操作(2)drop_class操作其中,vacuum的作用是集中清理表中的所有廢棄對象,回收物理空間;而drop_class是指系統(tǒng)直接刪除關(guān)系對應(yīng)的文件,相當(dāng)于物理上刪除了整個(gè)關(guān)系的所有對象并回收磁盤空間。
Vacuum操作下的OID的步驟為(1)對廢棄對象加標(biāo)記;回收OID時(shí)需要區(qū)分兩種dead對象,一種為被邏輯刪除對象,另一種為被更新對象,其中被邏輯刪除的對象稱為廢棄對象。廢棄對象的OID已經(jīng)失效,可以回收;而對于被更新的對象來說,在更新時(shí)它的OID被賦給更新后的對象,該OID仍然有效,不能回收。為了區(qū)分這兩種對象,本發(fā)明實(shí)施方案對廢棄對象加上標(biāo)記,而對被更新對象不加標(biāo)記。
當(dāng)然也可以只對被更新對象加標(biāo)記,其目的只是為了區(qū)分“被刪除對象”和“被更新對象”。
(2)在掃描單個(gè)對象時(shí),將被刪除對象的對象標(biāo)識符回收,并放到對象標(biāo)識符回收文件中(如圖2);將回收OID的工作放在關(guān)系掃描的過程時(shí),如果它的物理空間可以回收(說明這個(gè)對象已經(jīng)被刪除或是已經(jīng)被更新),則檢查它的可回收標(biāo)記,如果有該標(biāo)記,則回收它的OID,放到OID回收文件中。
在drop_class情況下對OID回收的步驟為一旦事務(wù)結(jié)束,該類所對應(yīng)文件的空間將會全部回收。表面看來,這種情況下邏輯刪除與物理空間刪除是同時(shí)進(jìn)行的,但是事實(shí)上,在事務(wù)內(nèi)部會出現(xiàn)對象回滾情況,即將該事務(wù)中前面的動作置為無效,還可以將類刪除的內(nèi)部動作分為邏輯刪除和物理刪除,與Vacuum不同的是這兩部分動作在同一個(gè)事務(wù)內(nèi)部進(jìn)行。
考慮到多進(jìn)程情況,每當(dāng)一個(gè)drop_class事務(wù)開始時(shí),(1)為該事務(wù)分配一個(gè)臨時(shí)文件;(2)在刪除該類的過程中,掃描該類所有對象——包括有效對象和無效對象(在不同數(shù)據(jù)庫中對于update操作是不同,根據(jù)不同的數(shù)據(jù)庫策略決定是否需要回收update對象的OID),并將這些對象OID存放到該進(jìn)程的臨時(shí)文件中;當(dāng)在事務(wù)提交時(shí),將該臨時(shí)文件中的所有OID全部導(dǎo)入ORF的末尾處;當(dāng)事務(wù)發(fā)生回滾時(shí),直接將該臨時(shí)文件中的內(nèi)容拋棄即可。
3、回收OID再利用的步驟本發(fā)明實(shí)施分方案采用優(yōu)先使用ORF中OID的原則進(jìn)行分配OID?;厥誒ID的再利用,即將回收得到的OID從磁盤文件中提取出來并進(jìn)行重新分配的過程?;厥瘴募詶5姆绞酱鎯K,塊以棧的方式存儲對象標(biāo)識符;在OID文件中由前往后記錄回收的OID,由后往前分配回收的OID,回收OID類似于壓棧,而分配類似于出棧。
OID再利用的流程圖如圖3,圖中,B為block_num變量,R為reclaim_oid_count變量,Inv為變量的無效值。
OID再利用的具體步驟為(1)在進(jìn)行分配之前,將SBN所指向的文件塊拷貝到該緩沖區(qū)中。此時(shí)SROC指向緩沖區(qū)中最后一個(gè)有效的OID。
(2)當(dāng)對某個(gè)新對象分配OID時(shí),系統(tǒng)從OID緩沖區(qū)中取出SROC所對應(yīng)的OID,同時(shí),將SROC變量減1。
當(dāng)該變量SROC為0時(shí),表示本塊中的OID已經(jīng)分配完。此時(shí)將該緩沖區(qū)在磁盤上對應(yīng)的塊清空(oid_num置為0),并從文件中拷貝出前一個(gè)塊,同時(shí)將變量SBN減1。
如果SBN為0,說明文件中的OID已經(jīng)分配完畢,則轉(zhuǎn)入到原OID分配機(jī)制中,即目前使用的OID分配機(jī)制中(句柄加一方式)。
4、系統(tǒng)恢復(fù)處理的步驟系統(tǒng)恢復(fù)處理的事務(wù)恢復(fù)流程如圖4,圖中,ORF為OID回收文件,BFO為專門為OID再利用而分配的緩沖區(qū),SROC為共享內(nèi)存中記錄最后一個(gè)可用OID的位置,PR為日志中記錄ORF中最后一可用頁面的頁號,LOID為日志中記錄的最后一次分配的OID,CBN,CROC為檢查點(diǎn)中分別對應(yīng)共享內(nèi)存中對SBN和SROC值的拷貝,BX為事務(wù)恢復(fù)時(shí),用于進(jìn)行頁面內(nèi)OID匹配的參照頁面號由于記錄OID分配的關(guān)鍵變量放置在共享內(nèi)存中,一旦系統(tǒng)出現(xiàn)故障,這些數(shù)據(jù)將會全部丟失。為了解決系統(tǒng)故障并降低損失,本發(fā)明實(shí)施方案在OID回收機(jī)制中擴(kuò)展了系統(tǒng)恢復(fù)模塊。系統(tǒng)恢復(fù)分為正常關(guān)機(jī)后的恢復(fù)和非正常關(guān)機(jī)后的恢復(fù)。
檢查點(diǎn)系統(tǒng)恢復(fù)處理的步驟在正常關(guān)機(jī)時(shí)的系統(tǒng)恢復(fù)處理的步驟為系統(tǒng)自動做一個(gè)檢查點(diǎn),記錄當(dāng)前內(nèi)存中某些關(guān)鍵變量。參照原系統(tǒng)的做法,我們將回收中涉及OID的兩個(gè)關(guān)鍵變量(SBN和SROC)記錄到檢查點(diǎn)中。系統(tǒng)重新啟動時(shí)可以完全恢復(fù)到關(guān)機(jī)前的狀態(tài),因而在這種情況下不會出現(xiàn)OID的損耗;對于非正常關(guān)機(jī)后的恢復(fù),系統(tǒng)檢測到的檢查點(diǎn)為定期檢查點(diǎn),記錄的是下一分配單位OID。按照原系統(tǒng)的恢復(fù)機(jī)制一次最多可能會損失8191個(gè)OID——即剛分配了該塊中的第一個(gè)OID就出現(xiàn)非正常關(guān)機(jī)的故障。
針對上述這種缺陷,本發(fā)明實(shí)施方案還可采用增加記錄當(dāng)前OID文件最后一塊的塊號日志的系統(tǒng)恢復(fù)處理方法。
日志系統(tǒng)恢復(fù)處理的步驟(1)將兩個(gè)變量記錄在日志中;(2)系統(tǒng)恢復(fù)時(shí),根據(jù)日志找到最后一次分配的OID,當(dāng)在系統(tǒng)OID的原分配模式之下,直接將該SROC加1,作為下一個(gè)可分配的OID;
當(dāng)在回收OID的分配模式,還要在日志記錄中找到最后分配的OID對應(yīng)的SBN,然后根據(jù)該SBN和SROC在回收文件中匹配,確定下一個(gè)可分配的OID。
這樣一來,可以將故障恢復(fù)時(shí)OID的損失降低為0。
權(quán)利要求
1.數(shù)據(jù)庫中對象標(biāo)識符回收再利用的方法,其特征在于它包括建立數(shù)據(jù)結(jié)構(gòu)的步驟、對象標(biāo)識符回收的步驟、對象標(biāo)識符再利用的步驟;建立數(shù)據(jù)結(jié)構(gòu)的步驟包括(1)在磁盤中建立一個(gè)用于存貯回收對象標(biāo)識符的回收文件,該文件分為若干個(gè)塊,每一個(gè)塊都具有一個(gè)頭信息,頭信息中至少包括該塊的塊號、該塊中對象標(biāo)識符的個(gè)數(shù);回收文件以棧的方式存儲塊;塊以棧的方式存儲對象標(biāo)識符;(2)在共享內(nèi)存中增加存放兩個(gè)變量的域,其中一個(gè)變量為塊變量,它指向?qū)ο髽?biāo)識符回收文件中最后一個(gè)可用塊;另一個(gè)變量為對象標(biāo)識符變量,它指向?qū)ο髽?biāo)識符回收文件中最后一個(gè)可用塊的最后一個(gè)對象標(biāo)識符;兩個(gè)變量始終表示工作的開始位置;(3)在內(nèi)存中建立一個(gè)緩沖區(qū),用于存放回收文件中的最后一個(gè)有效塊的拷貝;對象標(biāo)識符回收的步驟為物理上刪除廢棄對象時(shí),將其對象標(biāo)識符存貯到回收文件的步驟;物理上刪除對象包括單個(gè)對象的刪除、整個(gè)類的刪除。
2.如權(quán)利要求1所述的方法,其特征在于在刪除單個(gè)對象時(shí)回收對象標(biāo)識符的步驟為(1)對類中的被刪除對象或被更新對象加標(biāo)記;(2)掃描單個(gè)對象的標(biāo)記,將被刪除對象的對象標(biāo)識符回收,并存貯到回收文件中。
3.如權(quán)利要求1所述的方法,其特征在于直接清理整個(gè)類的所有對象時(shí)回收對象標(biāo)識符的步驟為(1)為該事務(wù)分配一個(gè)臨時(shí)文件;(2)在刪除該類的過程中,掃描該類所有對象,并將其中的live對象和廢棄對象的OID存放在該臨時(shí)文件中;當(dāng)在事務(wù)提交時(shí),將該臨時(shí)文件中的所有對象標(biāo)識符全部導(dǎo)入回收文件;當(dāng)事務(wù)發(fā)生回滾時(shí),將該臨時(shí)文件中的內(nèi)容拋棄。
4.如權(quán)利要求1所述的方法,其特征在于對象標(biāo)識符再利用的步驟包括(1)將塊變量所指向的文件塊拷貝到該緩沖區(qū)中;(2)當(dāng)對新的對象分配對象標(biāo)識符時(shí),系統(tǒng)從緩沖區(qū)中取出對象標(biāo)識符變量所對應(yīng)的對象標(biāo)識符,同時(shí)將對象標(biāo)識符變量減1;當(dāng)對象標(biāo)識符變量為空時(shí),將該緩沖區(qū)在磁盤上對應(yīng)的塊清空,并從回收文件中拷貝出前一個(gè)塊到緩沖區(qū)中,同時(shí)將塊變量減1;當(dāng)塊變量為空時(shí),則轉(zhuǎn)入到原對象標(biāo)識符分配機(jī)制。
5.如權(quán)利要求1所述的方法,其特征在于它還包括系統(tǒng)恢復(fù)處理的步驟,系統(tǒng)恢復(fù)處理的步驟包括將兩個(gè)變量記錄到檢查點(diǎn)中的步驟。
6.如權(quán)利要求1所述的方法,其特征在于它還包括系統(tǒng)恢復(fù)處理的步驟,系統(tǒng)恢復(fù)處理的步驟為包括(1)將兩個(gè)變量記錄在日志中;(2)系統(tǒng)恢復(fù)時(shí),根據(jù)日志找到最后一次分配的對象標(biāo)識符,當(dāng)在系統(tǒng)對象標(biāo)識符的原分配模式之下,直接將該對象標(biāo)識符變量加1,作為下一個(gè)可分配的對象標(biāo)識符;當(dāng)在回收對象標(biāo)識符的分配模式,還要在日志記錄中找到最后分配的對象標(biāo)識符對應(yīng)的塊變量,然后根據(jù)該對象標(biāo)識符和塊變量在回收文件中匹配,確定下一個(gè)可分配的對象標(biāo)識符。
全文摘要
本發(fā)明涉及數(shù)據(jù)庫中對象標(biāo)識符回收再利用的方法,它包括建立數(shù)據(jù)結(jié)構(gòu)的步驟、對象標(biāo)識符回收的步驟、對象標(biāo)識符再利用的步驟。在本發(fā)明方法中,OID的回收與對象物理空間的回收過程相一致,能自動回收對象標(biāo)識符,可充分利用現(xiàn)有的計(jì)算機(jī)資源并提高系統(tǒng)性能。
文檔編號G06F11/07GK1588359SQ200410060940
公開日2005年3月2日 申請日期2004年10月9日 優(yōu)先權(quán)日2004年10月9日
發(fā)明者彭智勇, 施源, 翟博譞, 莊繼峰 申請人:武漢大學(xué)
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點(diǎn)贊!
1
保亭| 西安市| 历史| 宜黄县| 肇源县| 巨野县| 嘉禾县| 高平市| 崇仁县| 四川省| 聂拉木县| 洛南县| 香格里拉县| 屏南县| 金山区| 巴彦淖尔市| 梧州市| 房产| 泌阳县| 松桃| 青川县| 华池县| 海宁市| 萍乡市| 神池县| 巴南区| 久治县| 阳山县| 云梦县| 府谷县| 双柏县| 肃宁县| 扎囊县| 阿城市| 遂溪县| 雷波县| 德庆县| 无锡市| 呼图壁县| 长岭县| 达尔|