• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看

      ?

      面向?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)楣?。下面是更新方法?/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)述
      孟连| 邵东县| 区。| 江永县| 青岛市| 来安县| 广平县| 耒阳市| 吴江市| 科尔| 尤溪县| 吐鲁番市| 宜良县| 秭归县| 集安市| 延津县| 洛隆县| 罗甸县| 临洮县| 平阴县| 彰化市| 宁国市| 潞城市| 靖宇县| 闸北区| 砚山县| 天门市| 嘉黎县| 绍兴市| 辰溪县| 九龙县| 馆陶县| 比如县| 常山县| 饶平县| 南充市| 绥阳县| 自治县| 曲靖市| 家居| 阳江市|