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