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