Jasmine KBMS系統(tǒng)的實現(xiàn)
2024-07-21 02:08:49
供稿:網(wǎng)友
本文來源于網(wǎng)頁設(shè)計愛好者web開發(fā)社區(qū)http://www.html.org.cn收集整理,歡迎訪問。
jasmine 系統(tǒng)的實現(xiàn)
用戶
數(shù)據(jù)管理
對象管理
應(yīng)用軟件
知識庫
1、jasmine系統(tǒng)的總體結(jié)構(gòu)
jasmine是個由數(shù)據(jù)管理子系統(tǒng)和對象管理子系統(tǒng)組成的層次結(jié)構(gòu)系統(tǒng)。數(shù)據(jù)管理系統(tǒng)用來有效的存儲和訪問輔存上的對象。數(shù)據(jù)管理系統(tǒng)為嵌套關(guān)系、元組和頁提供操作接口,它是關(guān)系數(shù)據(jù)庫的擴(kuò)展xrdb。而
對象管理系統(tǒng)為這個可擴(kuò)展的數(shù)
據(jù)庫系統(tǒng)提供對象模型和語言接
口,語言接口包括語言編譯器、
執(zhí)行期支持庫、語言解釋器。
我這所要介紹的是對象管理
子系統(tǒng)。
2、對象存儲結(jié)構(gòu)
在jasmine中類與實例的存儲結(jié)構(gòu)
不相同,對象到關(guān)系的轉(zhuǎn)換是通過系統(tǒng)
完成的,有關(guān)轉(zhuǎn)換的信息也存儲在類中。
(1)、通過利用關(guān)系來存儲實例
根據(jù)元組的實例和域的屬性,所有參照類自身的實例存儲在關(guān)系中。多值屬性存儲在多值域中,這是最簡單的嵌套關(guān)系的形式。另一種方法,通過分離關(guān)系實現(xiàn)多值屬性將引起額外的開銷。我們在分離關(guān)系中存儲一個超類自身的實例和超類的子類的實例。如果我們實例化或釋放一個類的自身的實例,我們不必到它的超類或子類中去修改任何地方,從而使我們可以有效率地修改對象。
固定長度的字符串和數(shù)字存儲在固長域中,變長字符串和數(shù)字存儲在變長域中。而就參考屬性,我們僅將對象標(biāo)志號(oid)存儲在固長域中,這實現(xiàn)了非簇聚化的復(fù)雜對象。非簇聚化的復(fù)雜對象是cad應(yīng)用軟件所需要的,在cad應(yīng)用軟件中復(fù)雜對象是自底向上創(chuàng)建的,這樣組件對象就可以被重用。當(dāng)然,用戶可以邏輯上對非簇聚化的復(fù)雜對象強(qiáng)制實行復(fù)雜對象的完整性。具體實現(xiàn)可以通過“after” demon 為整個對象的實例化方法來實例化各個組件對象,也可以增加”befor” demon為整體對象的銷毀方法來銷毀各組件對象。在屬性中,作為關(guān)系對象,我們充分使用嵌套關(guān)系,將關(guān)系對象與內(nèi)部嵌套關(guān)系和他們內(nèi)部關(guān)系域的屬性相關(guān)聯(lián)。相應(yīng)的,關(guān)系對象的組件對象不可能脫離他們的整體對象而存在。簇聚化復(fù)雜對象通過關(guān)系對象來實現(xiàn),能邏輯上和物理上以單元形式來管理。
oid屬性與一個域相關(guān)聯(lián),但這個類的屬性和通用屬性不被存儲在實例關(guān)系中,這是為了增加空間的效率。一個oid由一個知識庫id號、一個類號和一個實例id號組成,oid能獨(dú)自地直接傳遞給知識庫和類信息。根據(jù)用戶說明,系統(tǒng)在隊列、b樹和哈希關(guān)系中選擇用來存儲實例。
(2)、用關(guān)系來存儲類
因為class是class的實例,我們將所有的classes存儲在一個關(guān)系中,這樣有助于有效地訪問類對象。然而,類有異種結(jié)構(gòu),所以我們必須設(shè)計一個模式,用來在一個關(guān)系中有效地存儲類對象。根本上,我們有類對象與一個元組(tuple)相關(guān)聯(lián)。屬性分類,如枚舉和過程屬性,這對所有類是通用的,并且屬性有一組固定的側(cè)面(facet),我們在內(nèi)部關(guān)系域中在不同的內(nèi)部關(guān)系和facet中存儲枚舉和過程屬性。
3、面向集合的訪問支持
面向集合訪問和單值訪問都被編譯以早綁定并減少執(zhí)行期費(fèi)用,然而,一個交互式查詢需要解釋器來處理而不是編譯器。jasmine編譯器是用一個c編譯器來實現(xiàn)的,在jasmine/c中寫的應(yīng)用程序被預(yù)編譯成c 程序,產(chǎn)生的c 程序被編譯并鏈接上執(zhí)行期支持庫。預(yù)處理被用來達(dá)到最優(yōu)輕便性和c 編譯器的代碼優(yōu)化目的。
應(yīng)用軟件
預(yù)編譯
c 程序
c編譯器和鏈接
執(zhí)行期支持庫
目標(biāo)代碼
(編譯)
jasmine
目標(biāo)代碼
知識庫
jasmine
用戶查詢
知識庫
(執(zhí)行) (解釋器)
應(yīng)用程序在三個階段被翻譯成c程序,這三個階段是:查詢圖生成、存取方案生成和代碼生成。第一個階段,從用戶查詢到生成一個查詢圖,并且將查詢圖轉(zhuǎn)化為根據(jù)使用用戶定義的對象模型的一個更有效的查詢圖。第二個階段根據(jù)查詢圖生成一系列關(guān)系運(yùn)算和一個最優(yōu)的方案,這個階段使用規(guī)則庫優(yōu)化技術(shù),最后一個階段c代碼被生成c編譯器。
(1)、查詢圖生成
這個階段參照對象模型,將查詢圖與用戶查詢相關(guān)聯(lián)。這個查詢圖是一個對象模型的子圖,這個對象模型注解有對象和條件信息。在這個階段,包含不完整的知識訪問的用戶查詢被轉(zhuǎn)換為一個更有效的形式。在jasmine中,用戶根據(jù)具體化通用類而不是這個具體類來形成一個查詢。根據(jù)歸類原理,用戶能用條件來具體化一個非葉節(jié)點類,如果給定的條件與一些歸類條件相匹配,那么非葉節(jié)點類被具體化成一些符合歸類條件的組件成員。
(2)、訪問方案生成
這個階段以直接模式方式將查詢圖翻譯成對象運(yùn)算。翻譯規(guī)則構(gòu)建在查詢語義學(xué)基礎(chǔ)上。通過使用對象模型信息如統(tǒng)計數(shù)據(jù)、訪問方法、類到關(guān)系的映射,對象運(yùn)算別轉(zhuǎn)化為擴(kuò)展關(guān)系運(yùn)算。對象表達(dá)式是不同處理的,這依賴于它是否包含有過程屬性。
4、單值存取訪問和對象緩沖
與面向集合的訪問一樣,單值存取訪問也被編譯成c程序,編譯時需要連接運(yùn)行期支持庫。
第一次訪問一個對象時,會從二級存儲器取出對象到頁面緩沖區(qū)。這樣對象就被緩沖存放在活動對象表(aot)中。實際上aot是一個內(nèi)部哈希表。aot有一個oid鍵和入口。該入口含有一個指向內(nèi)部實例結(jié)構(gòu)的指針tid和幾個更新標(biāo)志位。一個實例的內(nèi)部結(jié)構(gòu)與一個元組類似,這使參考其它對象和修改變得容易。當(dāng)一個事務(wù)結(jié)束時,具有更新標(biāo)志的對象從aot中轉(zhuǎn)存到頁面緩沖區(qū)和二級存儲器。用戶可以通過說明aot大小來控制aot中的沖突處理。為了更加有效地存儲空間,對象可以從aot中刪除,但oid組和tid組仍直接從數(shù)據(jù)庫中取出,這些對象先前從內(nèi)存中已經(jīng)丟失。我們將單值存取訪問對象表達(dá)式翻譯成基于aot的訪問。例如對象表達(dá)式 obj.attr變量obj具有aot的指針。首先,檢查aot入口的更新標(biāo)志位,如果標(biāo)志指出這個對象已經(jīng)被刪除了,則發(fā)生錯誤。如果一個對象從內(nèi)存中清除是為了進(jìn)行空間的管理,那么這個對象會通過tid直接從二級存儲器中取出。其它情況下系統(tǒng)會從由aot指針指向的內(nèi)部實例結(jié)構(gòu)中取attr,對象表達(dá)式返回這個值。如果這個屬性域含有一個參考對象,即另一個oid。系統(tǒng)通過哈希表在aot中查找具有這個oid的對象。若沒有,再通過aot中緩沖存放的oid或tid到二級存儲器中查找。這樣對象表達(dá)式的值是一個指向參考對象的入口指針,它將成為attr屬性的值。一般對象表達(dá)式obj.attr-1.iattr-n被遞歸的解釋。對象變量具有一個指向aot入口的指針,不是延遲訪問的oid。由于避免了基于哈希表的搜索,因此對象存取速度得到了提高。對于基于連接的訪問比如超媒體應(yīng)用,這一點很好。
一般來說,緩沖區(qū)和對象存取模式直接相關(guān)。頁面緩沖具有適合相同類的不同實例存取的結(jié)構(gòu)。aot,對象緩沖區(qū)具有適用與不同類的相關(guān)實例的存取結(jié)構(gòu)。高級應(yīng)用例如cad具有這兩種模式。就就需要雙緩沖策略,包括頁面緩沖和對象緩沖,而不僅僅是一個單一緩沖策略,它會包含不必要的對象,也會降低內(nèi)存利用率。然而,雙緩沖方法使得同樣一個對象以不同的格式同時出現(xiàn)在不同的緩沖區(qū)中,因此我們不得不維護(hù)說明同一個實體的兩個對象的內(nèi)部一致性。
5、解釋器
系統(tǒng)為程序的高效運(yùn)行提供了編譯器,為應(yīng)用的快速開發(fā)和處理特殊的查詢提供了解釋器。編譯器將查詢語句翻譯成擴(kuò)展的關(guān)系操作符。解釋器將查詢語句翻譯為擴(kuò)展的操作符并執(zhí)行。考慮到實用性,解釋器只能執(zhí)行面向集合的存取,查詢的結(jié)果送到由一個編譯好的程序引用的集合變量。用戶可以在一個集成的環(huán)境里使用解釋器和編譯好的程序。由于程序存在與實例中,所以他們可以在一個面向查詢中交互訪問。程序可以在動態(tài)編譯之后相互激活,編譯器和解釋器共享代碼,解釋器 編譯解析器分析輸入的查詢語句。解釋器使用運(yùn)行時支持庫提供的功能產(chǎn)生中間代碼。
本文敘述了一個知識庫管理系統(tǒng)kbms---jasmine,重點談?wù)摿藢ο蠊芾碜酉到y(tǒng)。