劉一鷗
(西安外事學院,陜西西安,710077)
同傳統(tǒng)數(shù)據(jù)庫管理系統(tǒng)一樣,對象代理數(shù)據(jù)庫系統(tǒng)TOTEM 主要由儲存管理、查詢處理、事務(wù)管理等幾部分組成,各部分通過系統(tǒng)表聯(lián)系成一個整體。
首先,對象代理數(shù)據(jù)庫的代理對象的屬性值經(jīng)常來源于相關(guān)對象。其次,對象之間具有語義聯(lián)系。最后,對象代理數(shù)據(jù)庫存在虛屬性和實屬性之分,在虛屬性上建立索引時,該屬性只有模式?jīng)]有真實的值,這與傳統(tǒng)的建立索引放法有很大區(qū)別。
在對象代理數(shù)據(jù)庫中存在對象和代理對象、類和代理類以及它們之間的雙向指針。
TOTEM 采用系統(tǒng)表存儲和管理類、代理類、類和代理類之間的代理關(guān)系、代理類的代理類型、代理規(guī)則以及所有代理類的虛屬性的切換操作表達式。
類似關(guān)系數(shù)據(jù)庫,TOTEM 系統(tǒng)采用表結(jié)構(gòu)來存儲對象和代理對象。為了存儲和管理對象和代理對象之間的雙向指針,需要設(shè)計一個系統(tǒng)表,作為對象oid 和對象存儲物理地址的對照表,將對象的代理對象的oid 和源對象的oid 也存儲在這個系統(tǒng)表,并通過系統(tǒng)表中的OID 來指示源類和代理類。
由于對象的復(fù)雜性,對象之間復(fù)雜的語義聯(lián)系使得傳統(tǒng)關(guān)系數(shù)據(jù)庫的頁面緩沖區(qū)管
管理不再滿足TOTEM 系統(tǒng)要求,所以采用雙緩沖區(qū)管理機制,它由定長頁面緩沖區(qū)和對象緩沖區(qū)組成,對象緩沖區(qū)是不定長的,它的存儲單元是一個個的對象。由于對象大小的差異性,使得管理對象緩沖區(qū)要必定長的頁面緩沖區(qū)復(fù)雜得多,對新檢索對象的安置也比較麻煩,系統(tǒng)需要在共享對象緩沖區(qū)中找到一片足夠大的連續(xù)空間來放置該對象。
對象代理數(shù)據(jù)庫中對象的屬性有擴展屬性即真實屬性和代理屬性即虛屬性兩種。在實屬性上建立索引,將所有單向代理該屬性和所有經(jīng)過多層單向代理該屬性,并且有屬性上寫方法的代理類上都作上該代理類上在該屬性上已經(jīng)建有索引的標志,并且索引為源類實屬性上建立的那個索引。通過這個標志,可以實現(xiàn)索引共享機制。在虛屬性上建立索引,此時在索引上沒有值,在形成索引元組的時候,需要通過切換操作的讀方法將該被索引的屬性的實質(zhì)值計算出來,然后存入到索引元祖中去。
TOTEM 處理代理類虛屬性的查詢時,建立了一套完善的查詢機制,是代理類的查詢能采用與一般查詢一致的形式描述和實現(xiàn)。
代理類的定義中,代理規(guī)則實際上只定義了本代理類和其直接父類之間的關(guān)系,而不管這些父類是否也是代理類,因此有可能代理規(guī)則中的目標表達式含有源類的虛屬性。因此生成新的switching 表達式時,首先要把目標表達式中虛屬性的Var 節(jié)點用其對應(yīng)的switching 表達式替換,即通過嵌套的switching 表達式實現(xiàn)任何代理類層次上的虛屬性的計算。這種表達式將可以從代理對象出發(fā),一直到最上層的源對象中的實屬性值并得到最終的計算結(jié)果。
在查詢編譯階段,如果查詢語句中出現(xiàn)了代理類和對虛屬性的引用,查詢編譯器將通過查元數(shù)據(jù),找出這些虛屬性的切換表達式,放入查詢樹中,供查詢優(yōu)化器和執(zhí)行器使用。
除了虛屬性的透明性之外,OD-SQL 查詢語句的另外一個特點在于路徑表達式。因為在TOTOEM 系統(tǒng)中,所有相關(guān)的對象都是由系統(tǒng)維護的雙向指針連接在一起的,所以十分快捷的從一個對象導(dǎo)航到與其相連的其他對象。
在TOTEM 系統(tǒng)中,對一個對象的修改操作由兩部分組成,對該對象自身或其源對象的修改以及修改所引起的對象更新遷移。因此,如果將修改過程中所涉及的所有對象都同時加鎖,勢必會造成系統(tǒng)大量事物的阻塞。為此,TOTEM 采用了一種基于原子段的多粒度鎖,它是針對多版本兩階段加鎖方法的改進
在TOTEM 系統(tǒng)中,滿足代理規(guī)則的源對象一定會在代理類中存在代理對象。在類或?qū)ο蟀l(fā)生更新時,系統(tǒng)會產(chǎn)生更新遷移,以維護這種嚴格的代理規(guī)則。
1)類的更新遷移 創(chuàng)建代理類不僅只是模式上的創(chuàng)建,而且需要檢查其源類中是否有滿足代理類的代理規(guī)則對象。如果有,則在新創(chuàng)建的代理類中生成若干對象作為這些對象的代理對象,以維護代理規(guī)則的嚴格性,并建立代理對象和源對象之間的指針。同樣,刪除一個類時,出了刪除自身與其所有的代理類及其中的對象,還要刪除其所有源類中源對象和該類中代理對象之間的雙向指針。
2)對象的更新遷移 對象和代理之間存在各種依賴關(guān)系,他們通過選擇謂詞、組合謂詞和分組謂詞來定義,稱這些謂詞為代理規(guī)則。對象的改變引起其代理對象相應(yīng)的變化,稱之為對象更新遷移。對象更新遷移主要用于維護系統(tǒng)的數(shù)據(jù)一致性和依賴的嚴格性。如果一個對象o 被增加到類Cd 中,然后C 所有的代理類被檢查。
3)索引的更新遷移 在虛屬性上建立索引時,就涉及到索引的更新遷移。類中增加一個對象,根據(jù)代理規(guī)則判斷哪些代理類上需要增加相應(yīng)的代理對象,然后在這些代理類的索引上分別插入一個索引對象。刪除一個類中的對象,其所有的代理類中都要刪除相應(yīng)的代理對象,然后在代理類的索引上刪除對象的代理類,修改類中一個對象,根據(jù)代理類的代理規(guī)則判斷需要刪除對象的代理類,需要插入對象的代理類和不需要施加任何操作的代理類。如果是插入和刪除,那么在相應(yīng)的代理類的索引上執(zhí)行對應(yīng)的插入或刪除索引對象的操作。
在TOTEM 系統(tǒng)中,提出了一種基于原子段的多版本動態(tài)優(yōu)先并發(fā)調(diào)度的算法,該算法將對象的更新操作分成多個原子段依次枷鎖的方式,而不必一次將更新過程涉及到的對象以及該對象的源對象和代理對象都封裝在一起,一旦原子段執(zhí)行完畢,就釋放數(shù)據(jù)對象上的鎖,即通過松弛事物原子性和隔離性來最大成都的提高系統(tǒng)的并發(fā)度。
TOTEM 的并發(fā)控制分成類和對象兩個層次,只有在類級別獲得了相應(yīng)的鎖,事務(wù)才有權(quán)對屬于該類的對象進行訪問。
1)類層次 在TOTEM 系統(tǒng)中,查詢代理類如果涉及虛屬性,則在層次對代理類及虛屬性所涉及的源類加查詢鎖。更新代理類則分兩種情況考慮:where 字句的判斷條件如果涉及讀取虛屬性,則將該虛屬性所涉及的源類和代理類加查詢鎖;如果更新虛屬性,則將該虛屬性所涉及的源類和代理類加更新鎖。
2)對象層次 為了保證數(shù)據(jù)的一致性,以及防止死鎖的產(chǎn)生,TOTEM 將更新操作分成多個源子段,采用多個源子段一次加鎖的方式。如果修改代理對象的虛屬性或where 字句的判斷條件涉及讀取虛屬性,則將修改涉及到的源對象和代理對象作為一個邏輯整體同時加對象更新鎖,該源子段稱為更新段。
如果修改、插入或刪除對象引起了對象更新遷移,則將遷移過程中遍歷的所有對象形成一棵遷移樹,樹的上層對象被修改或刪除,則它子樹上的部分對象會被修改或刪除,同時還需調(diào)整對象和代理對象之間的指針,即增加或刪除源對象的代理領(lǐng)域。遷移過程需要將一棵遷移樹上涉及的對象加鎖。將每一步遷移涉及的代理對象以及需要調(diào)整代理域的源對象作為一個整體進行加鎖,該原子段成為遷移涉及的代理對象以及需要調(diào)整代理域的源對象作為一個整體進行加鎖,該原子段稱為遷移段。通過采用多個原子段一次加鎖的方式,而不必一次將更新過程涉及到的所有對象以及源對象封裝在一起,阻止事物訪問。
該系統(tǒng)采用對象代理模型,能夠為簡單的結(jié)構(gòu)化數(shù)據(jù)和復(fù)雜的非結(jié)構(gòu)/半結(jié)構(gòu)化數(shù)據(jù)統(tǒng)一建模,又能實現(xiàn)對象視圖、角色多樣性和對象移動等靈活的對象管理功能。它利用雙向指針,支持獨特的跨類查詢,用來實現(xiàn)目前正在興起的跨媒體應(yīng)用,在多媒體、生物、地理等復(fù)雜信息管理領(lǐng)域具有廣泛的應(yīng)用前景。
[1] Michael Stonebreaker,Paul Brown.1999.Object-Relational DBMSs Tracking the next great wave . 2nd ed .CA:Morgan Kaufmann Publisher.