国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

面向?qū)ο髷?shù)據(jù)庫(kù)技術(shù)引擎設(shè)計(jì)

2010-06-01 06:29:10劉海蓉朱永昌胡善岳
關(guān)鍵詞:數(shù)據(jù)庫(kù)系統(tǒng)字段文件夾

劉海蓉,朱永昌,胡善岳

(1.黃岡職業(yè)技術(shù)學(xué)院,湖北黃岡438002;2.甘肅省金昌市公安局龍首分局武威路派出所,甘肅金昌737100;

1 總體設(shè)計(jì)

本設(shè)計(jì)模仿關(guān)系數(shù)據(jù)庫(kù)中關(guān)于模式的定義與劃分也分為三個(gè)模式:內(nèi)模式、模式和外模式。內(nèi)模式主要和底層數(shù)據(jù)文件打交道,它接受來(lái)自模式的命令并執(zhí)行相關(guān)的操作。模式則是連接外模式和內(nèi)模式之間的橋梁。模式將對(duì)來(lái)自外模式的指令轉(zhuǎn)譯成內(nèi)模式的執(zhí)行命令,并組織和返回適當(dāng)?shù)男畔⒔o外模式。模式是數(shù)據(jù)庫(kù)引擎中最重要的部分,它包含了主要的操作邏輯和對(duì)OQL的編譯功能,以及組織數(shù)據(jù)的功能,是本設(shè)計(jì)中最復(fù)雜的一部分,詳情請(qǐng)見(jiàn)具體設(shè)計(jì)。外模式負(fù)責(zé)與用戶打交道,相當(dāng)于客戶端,但又不是客戶端。它實(shí)際上接受來(lái)自客戶端的指令信息經(jīng)組織后傳達(dá)給模式。設(shè)計(jì)上將采用的是網(wǎng)絡(luò)編程技術(shù)和客戶端進(jìn)行信息交流,詳情如圖1。

圖1 系統(tǒng)架構(gòu)圖

2 內(nèi)模式(底層設(shè)計(jì))

本部分用于探討數(shù)據(jù)庫(kù)的物理存取方案,[1]將提供一套接口(見(jiàn)外部接口)用來(lái)與模式交互,接受模式發(fā)來(lái)的指令進(jìn)行操作。具體邏輯見(jiàn)圖2。

圖2 內(nèi)模式時(shí)序圖

2.1 系統(tǒng)配置設(shè)計(jì)

(1)系統(tǒng)配置主文件(見(jiàn)表1):這是一張屬性表,將包含以下信息(為簡(jiǎn)易起見(jiàn),僅包含一些基本信息),在數(shù)據(jù)庫(kù)系統(tǒng)安裝時(shí)進(jìn)行初始化,數(shù)據(jù)庫(kù)系統(tǒng)啟動(dòng)時(shí)將其讀取到內(nèi)存中并長(zhǎng)久保留。

表1 系統(tǒng)配置表

該配置文件使用的是XML格式來(lái)存儲(chǔ),下面是一個(gè)簡(jiǎn)單的樣例文件:

520

d4gg542af4f458g4asfsd84sfsa874d1saf5652dfa1af4

E:lujijiangdata

E:lujijiangdata2

(2)庫(kù)(包)配置文件(見(jiàn)表2):這也是一個(gè)屬性表,包含的是數(shù)據(jù)庫(kù)的ID 、名稱、物理存儲(chǔ)路徑、用戶信息、可用空間。每個(gè)數(shù)據(jù)庫(kù)一個(gè)表,也是在系統(tǒng)啟動(dòng)時(shí)即初始化到內(nèi)存中。[2]

表2 庫(kù)配置表

以下是該配置文件的一個(gè)示例:

2.2 模式設(shè)計(jì)(即類的設(shè)計(jì))

每個(gè)類其實(shí)也是一個(gè)XML文件,在每次系統(tǒng)啟動(dòng)時(shí)加載到內(nèi)存中,格式如下(具體標(biāo)簽含義請(qǐng)見(jiàn)格式樣例中的注釋):

其中的方法(即操作)又鏈接到方法描述文件。

方法描述文件也是一個(gè)XML文件,格式如下(具體標(biāo)簽含義請(qǐng)見(jiàn)格式樣例中的注釋):

1

函數(shù)體描述文件直接就是方法描述,如:

number a = 0;

string b = “123456789”;

return b+a;

2.3 存儲(chǔ)設(shè)計(jì)

(1)包的存儲(chǔ)[3]

一個(gè)包是一個(gè)文件夾,包中根下有一個(gè)配置文件package.xml,該文件包含了該包的配置信息,就是上述的庫(kù)(包)配置文件。除了該文件外,還有各種類的文件夾(下面會(huì)提到)。

(2)類的存儲(chǔ)

一個(gè)類是一個(gè)名為*.class的文件夾,就存放在包文件夾的根下。其中*號(hào)是該類的標(biāo)識(shí)符。類文件夾的根下有一個(gè)類配置文件,就是以上所說(shuō)的class.xml,可能還有方法描述文件夾*.method。該文件夾根下有一個(gè)方法描述文件method.xml,還有方法體描述文件如*.body文件。除此之外,就是該類的各個(gè)實(shí)例對(duì)象文件夾了。

(3)對(duì)象的存儲(chǔ)

每個(gè)對(duì)象也是一個(gè)文件夾,就存放在類文件夾的根下,命名規(guī)則是*.object,其中*表示該對(duì)象的標(biāo)識(shí)號(hào)。該文件夾的根下是各種字段文件。[4]

(4)字段的存儲(chǔ)

字段文件的文件名是*.field,其中*是字段名。

2.4 加載策略

系統(tǒng)采用的是深度遍歷樹(shù)的方式遍歷加載數(shù)據(jù)庫(kù)信息的,即必須先把一個(gè)包中的類的實(shí)例全部加載完畢后才可能加載其他的包信息。

系統(tǒng)配置加載:數(shù)據(jù)庫(kù)系統(tǒng)啟動(dòng)之初,系統(tǒng)將事先加載系統(tǒng)配置文件,即sys.xml文件,該文件位于源根目錄下(Java版本)。通過(guò)加載此文件,系統(tǒng)將獲知系統(tǒng)的一些屬性信息如系統(tǒng)名、端口號(hào)、管理員信息以及包的存儲(chǔ)路徑。

包信息加載:在獲取了各包的存儲(chǔ)路徑后,系統(tǒng)將開(kāi)始掃描這個(gè)包路徑。首先先加載包配置文件——即包文件夾根下的package.xml文件,從而獲取該包的相關(guān)信息,包括包的ID號(hào)、包名、用戶列表、可用最大空間等。然后掃描該文件夾下所有以“.class”結(jié)尾的文件夾,開(kāi)始加載類的信息。[5]

類信息加載:緊接著上一步,系統(tǒng)開(kāi)始從類文件夾中加載類的信息。首先讀取類文件夾根下的class.xml文件,并獲取類的字段,方法等信息。然后開(kāi)始掃描所有以“.object”結(jié)尾的文件夾,開(kāi)始加載對(duì)象信息。

對(duì)象信息加載:粗略地將對(duì)象的ID信息與地址的對(duì)應(yīng)的信息加載到內(nèi)存中即完成本次深度遍歷加載過(guò)程。然后開(kāi)始加載其它類,其它包的信息。

提供服務(wù):當(dāng)系統(tǒng)全部加載所有信息后開(kāi)始提供數(shù)據(jù)庫(kù)系統(tǒng)服務(wù)。

2.5 外部接口

從模式中獲取相關(guān)操作信息,然后掃描內(nèi)存獲取數(shù)據(jù)庫(kù)系統(tǒng)信息,再根據(jù)這些信息進(jìn)行相關(guān)操作,最后將操作的結(jié)果返回給模式。

3 模式(中層設(shè)計(jì))

3.1 內(nèi)部接口

本接口主要是用來(lái)與內(nèi)模式打交道的。接口將從管理者那里接受指令并轉(zhuǎn)換為內(nèi)模式可識(shí)別的具體操作,交由內(nèi)模式處理,然后將結(jié)果返回給管理者。

3.2 管理者

在系統(tǒng)啟動(dòng)時(shí)便加載了必要的信息并保存在內(nèi)存中,主要供編譯器調(diào)用相關(guān)信息。

3.3 執(zhí)行者

相應(yīng)編譯器發(fā)來(lái)的偽字節(jié)碼,采用命令模式生成一些調(diào)用策略。這里指的是為將編譯器發(fā)來(lái)的具體操作通過(guò)反射模式調(diào)用Java中的相關(guān)類的相關(guān)方法執(zhí)行調(diào)用方法,其中還要引用管理者持有的數(shù)據(jù)庫(kù)信息資源。

3.4 編譯器

編譯器是本系統(tǒng)的重頭戲,主要包括以下幾個(gè)功能(編譯器的具體設(shè)計(jì)見(jiàn)系統(tǒng)實(shí)現(xiàn),因?yàn)槠浔容^依賴于語(yǔ)言以及技巧):

(1)詞法分析器

這是OODB語(yǔ)言語(yǔ)句進(jìn)入的第一步。首先,識(shí)別所有標(biāo)識(shí)符和關(guān)鍵字,將其返回給語(yǔ)法分析器。詞法分析器將使用外部描述文件來(lái)定義,該文件是一個(gè)XML文件,文件示例如下:

(2)語(yǔ)法分析器

檢查看有沒(méi)有缺括號(hào),漏定義等。如果成功,則進(jìn)入語(yǔ)義分析器。

(3)語(yǔ)義分析器

對(duì)照管理者提供的數(shù)據(jù)庫(kù)系統(tǒng)信息,看有沒(méi)有語(yǔ)義錯(cuò)誤,沒(méi)有則進(jìn)行優(yōu)化處理。

(4)生成偽字節(jié)碼

如果以上幾關(guān)都過(guò)了,則生成字節(jié)碼文件。

3.5 外部接口

用于接收來(lái)自外模式的信息(信息僅包含OODB語(yǔ)言程序),然后轉(zhuǎn)發(fā)給編譯器。

4 外模式(外層設(shè)計(jì))

4.1 內(nèi)部接口

用于將信息轉(zhuǎn)發(fā)給模式中的外部接口。

4.2 組織者

獲取操作信息,提取信息,包括提取OQL程序、用戶名、密碼、IP和時(shí)間等信息并進(jìn)行驗(yàn)證,通過(guò)則命令內(nèi)部接口將OQL程序轉(zhuǎn)發(fā)給模式,并記錄日志。

4.3 接收者

通過(guò)Socket接受來(lái)自客戶端的命令。

5 OODB語(yǔ)言設(shè)計(jì)

5.1 數(shù)據(jù)查詢(OQL)

作為數(shù)據(jù)庫(kù),最重要的估計(jì)是數(shù)據(jù)查詢了,面向?qū)ο髷?shù)據(jù)庫(kù)同樣如此。在這里,我設(shè)計(jì)了以下查詢語(yǔ)法:get(…)if(…),其中g(shù)et里面是要查詢的類,類的屬性等,相當(dāng)于SQL里面的select … where …。比如有類A,A中有一個(gè)屬性a(數(shù)字型,關(guān)于類型后面再講)。則獲取所有A類實(shí)例中所有a的值小于0的實(shí)例集合的查詢語(yǔ)句是:

get(A)if(A.a<0);

執(zhí)行該語(yǔ)句應(yīng)該要返回所有類A實(shí)例中所有a小于0的實(shí)例集合。具體使用方法如下:

(1)單類查詢

即在一個(gè)類中進(jìn)行查詢。如:get(A)if(A.a<0);返回的是所有類A實(shí)例中所有a小于0的實(shí)例集合。而不帶條件的查詢是get(A);這將返回類A的所有實(shí)例。

(2)多類查詢

如:get(A,B);將返回類A和類B的所有實(shí)例的數(shù)據(jù)。

(3)方法查詢(暫不實(shí)現(xiàn))

(4)表達(dá)式計(jì)算

如:get(3+3);返回的將是6。

(5)復(fù)雜查詢

如:get(A.a+B.b,C,C.a/A.a)if(A.a5);這個(gè)查詢語(yǔ)句將返回的是類A的a字段和類B的b字段的相加之和,類C的實(shí)例以及C類字段a與A類字段a的商,并且盡在類A的a字段小于類B的b字段并且(##是并號(hào))類C的字段a的值小于5。此類操作可能比較耗時(shí),并且可能返回重復(fù)的數(shù)據(jù)。如在A類實(shí)例和B類實(shí)例確定的情況下C類實(shí)例變化時(shí)將返回多個(gè)相同結(jié)果的A.a+B.b的值。注意返回的都是集合。

5.2 數(shù)據(jù)操作(OML)

(1)插入數(shù)據(jù):new 類名(構(gòu)造函數(shù)參數(shù)列表);這樣即生成了一個(gè)實(shí)例(即插入一個(gè)實(shí)例)。舉例如下:

Test t = new Test(1,2,3);//假如類Test的構(gòu)造參數(shù)是三個(gè)數(shù)字類型的參數(shù)。

(2)更新數(shù)據(jù):直接調(diào)用該類實(shí)例引用的屬性復(fù)制即可實(shí)現(xiàn)更新。舉例如下:

t.a(chǎn) = 3;//假如類Test有個(gè)公有成員a且是數(shù)字型的。

可以有更復(fù)雜的、有邏輯的更新,如:

if(Test.a>3){

Test.a = 1;//將所有符合條件的Test類的實(shí)例的a字段復(fù)制為1,是集合操作。

};

又如:

while(t.a>0){

Test.a --;

//只要實(shí)例t的字段a的值還大于0,則所有Test的實(shí)例的值繼續(xù)減一。

}

(3)刪除數(shù)據(jù):free(類名)if(刪除條件表達(dá)式)。如果沒(méi)有if,則刪除此類的所有實(shí)例。

free(Test)if(Test.a>0);這將刪除類Test的實(shí)例t。

(4)數(shù)據(jù)定義(ODL)

定義語(yǔ)言包括類的定義和對(duì)象的定義,其語(yǔ)法模仿Java的語(yǔ)法。具體如下:

定義類:

class :定義類,語(yǔ)法如下:class 類名{

屬性定義:其中包括變量權(quán)限聲明,值定義,類型聲明,目前僅支持三種類型,字符串型,數(shù)字型和比特型。

方法定義:方法定義,跟Java類似,但目前僅留接口,不做實(shí)現(xiàn)。

}

下面是一個(gè)實(shí)例:

class Test{

private num a;//數(shù)字型

public str b;//字符串型

protected byte c;//比特型,變長(zhǎng)比特型,用來(lái)存儲(chǔ)大容量數(shù)據(jù)

public void testMethod(num a){//方法定義,目前暫不實(shí)現(xiàn)

a++;

this.a = a;

}

};//一定要加;號(hào),否則不能結(jié)束

alter:更新類。語(yǔ)法如下:alter 類名.字段名或者方法名 =

{//字段或者方法的新式描述,如果沒(méi)有任何信息,則表示刪除該字段或者方法};舉例如下:

alter Test.a {

public num a;//如果不是命名為a,而是b,則將刪除a字段,新建b字段。

}//該語(yǔ)句將把字段a的訪問(wèn)權(quán)限從私有變?yōu)楣小O旅媸歉路椒ǎ?/p>

alter Test. testMethod {

public void testMethod(num a){//方法更新,目前暫不實(shí)現(xiàn)

a++;

this.a = a--;

}

};

drop:刪除類。此關(guān)鍵字只有一個(gè)語(yǔ)法,即:

drop 類名;如:

drop Test;//即表示刪除Test類。

(5)數(shù)據(jù)控制

使用

try{

//行為

}catch(){

}

的語(yǔ)法形式,用來(lái)控制事務(wù)。在try塊中的行為必須全部執(zhí)行成功數(shù)據(jù)庫(kù)才會(huì)更改,相當(dāng)于事務(wù)提交。如果發(fā)生異常(即不能全部執(zhí)行成功),則事務(wù)回滾。同時(shí)還要執(zhí)行catch塊中的信息。一般說(shuō)來(lái),catch塊中留空則只回滾事務(wù)。

由于應(yīng)用的日趨復(fù)雜和智能化,面向?qū)ο髷?shù)據(jù)庫(kù)技術(shù)可以作為適應(yīng)這種形勢(shì)的一種解決方案,有可能成為今后數(shù)據(jù)庫(kù)發(fā)展的方向。本人由于時(shí)間和精力有限,無(wú)法完成一個(gè)完整的面向?qū)ο蟮臄?shù)據(jù)庫(kù)系統(tǒng),所做的僅僅是數(shù)據(jù)庫(kù)底層實(shí)現(xiàn)和編譯器的部分實(shí)現(xiàn)。我國(guó)目前在數(shù)據(jù)庫(kù)系統(tǒng)方面嚴(yán)重依賴于他國(guó),缺少自己成功的作品,需要志同道合者能夠相互協(xié)作,設(shè)計(jì)和實(shí)現(xiàn)完整的、功能強(qiáng)大的面向?qū)ο髷?shù)據(jù)庫(kù)系統(tǒng)。

參考文獻(xiàn):

[1]Silberschatz A,Korth H F,Sudarshan S.數(shù)據(jù)庫(kù)系統(tǒng)概念(第三版).楊冬青,唐世渭 等譯[M]. 北京:機(jī)械工業(yè)出版社,2000.58-69.

[2]ElmasriRA,Navathe S B.數(shù)據(jù)庫(kù)系統(tǒng)基礎(chǔ)(第三版).邵配英,張坤龍 等譯[M]. 北京:人民郵電出版社,2002.220-247.

[3]Dittrich K(Editor).Advances in Object-Oriented Database Systems.Lecture Nodes in Computer Science 334,Springer-Verlag,1988.

[4]KimW.Introduction to Object-Oriented Databases.MITPress,Cambridge,1990.223-289.

[5]Maier D,Stein J.Indexing in an Object-Oriented DBMS.Proceedings of the International Workshop on Object-Oriented Database Systems,1986.

猜你喜歡
數(shù)據(jù)庫(kù)系統(tǒng)字段文件夾
磁力文件夾
圖書館中文圖書編目外包數(shù)據(jù)質(zhì)量控制分析
數(shù)據(jù)庫(kù)系統(tǒng)shell腳本應(yīng)用
調(diào)動(dòng)右鍵 解決文件夾管理三大難題
微細(xì)銑削工藝數(shù)據(jù)庫(kù)系統(tǒng)設(shè)計(jì)與開(kāi)發(fā)
實(shí)時(shí)數(shù)據(jù)庫(kù)系統(tǒng)數(shù)據(jù)安全采集方案
核反應(yīng)堆材料數(shù)據(jù)庫(kù)系統(tǒng)及其應(yīng)用
TC一鍵直達(dá)常用文件夾
電腦迷(2015年1期)2015-04-29 21:24:13
CNMARC304字段和314字段責(zé)任附注方式解析
無(wú)正題名文獻(xiàn)著錄方法評(píng)述
富民县| 石阡县| 阿克陶县| 张掖市| 班玛县| 绵竹市| 东乌珠穆沁旗| 德安县| 敦煌市| 桂阳县| 福海县| 瑞安市| 安阳市| 新龙县| 揭阳市| 大新县| 阳朔县| 峨山| 周至县| 革吉县| 望谟县| 深圳市| 遂宁市| 始兴县| 吴江市| 长海县| 陇川县| 柘荣县| 长治市| 拉萨市| 南昌市| 贵德县| 湖口县| 黔南| 仪征市| 彭山县| 平罗县| 衢州市| 仙桃市| 辉县市| 克什克腾旗|