6.語言處理
語言翻譯處理層的任務(wù)就是把用戶在這兩種方式下提交給DBMS的數(shù)據(jù)庫語句轉(zhuǎn)換成對DBMS內(nèi)層可執(zhí)行的基本存取模塊的調(diào)用序列。數(shù)據(jù)庫語言通常包括DDL,DML,DCL三部分語句。DDL語句處理相對獨立和簡單。DML和DCL則較為復(fù)雜。具體來說,對DDL語句,語言翻譯處理層首先把它翻譯成內(nèi)部表示,然后把它存儲在系統(tǒng)的數(shù)據(jù)字典中。對DCL語句的定義部分,如安全保密定義、存取權(quán)限定義、完整性約束條件定義等處理與DDL相同。在RDBMS中數(shù)據(jù)字典通常采用和普通數(shù)據(jù)同樣的表示方式。數(shù)據(jù)字典包括關(guān)系定義表、屬性表、視圖表、視圖屬性表、視圖表達(dá)式表、用戶表、存取權(quán)限表、……。
(1)解釋方法一些數(shù)據(jù)庫系統(tǒng)(如dBASEⅢ)對上述方法進(jìn)行了改進(jìn),通過盡量推遲聚束過程來贏得數(shù)據(jù)獨立性。具體做法是:直到執(zhí)行前,數(shù)據(jù)庫DML語句都以原始字符串的形式保存。隨著數(shù)據(jù)庫系統(tǒng)的發(fā)展,這種方法已逐步為預(yù)編譯技術(shù)所取代。
(2)預(yù)編譯方法已經(jīng)看到,將聚束過程提前,固然可達(dá)到系統(tǒng)的高效率,但失去了數(shù)據(jù)庫的一個主要優(yōu)點———數(shù)據(jù)獨立性;將聚束時間推遲,贏得了數(shù)據(jù)性,卻增加了執(zhí)行高效率的代價。預(yù)編譯方法就是為了克服它們的缺點,保持兩者的優(yōu)點而提出的。其基本思想是,在用戶提供了DML語句后,在運行前對它進(jìn)行翻譯處理,保存產(chǎn)生好的執(zhí)行代碼,運行時加以執(zhí)行。但是,使用這種方法會遇到這樣的問題:在聚束過程中進(jìn)行優(yōu)化所依據(jù)的條件可能在運行前已不存在,或者數(shù)據(jù)結(jié)構(gòu)被修改,因而導(dǎo)致已作出的規(guī)劃在執(zhí)行時不再有效。例如,假設(shè)在聚束過程中決定使用某一索引來加快存取速度,而在程序編譯完成之后,運行之前,該索引被刪除了。那么,運行時就會出現(xiàn)不可預(yù)測的現(xiàn)象。為了解決這類問題,采用了重編譯方法。即當(dāng)數(shù)據(jù)庫中某些成分的改變而使一些程序的編譯結(jié)果無效時,再對它們執(zhí)行一次編譯。重編譯可在不同時刻進(jìn)行。為了提高整個系統(tǒng)的效率,不應(yīng)在數(shù)據(jù)庫某一成分改變后就馬上對受影響的那些源程序重編譯,較好的方法是將受影響的編譯結(jié)果置“無效”標(biāo)志,在其被執(zhí)行時才進(jìn)行自動重編譯。自動重編譯技術(shù)使得編譯方法既擁有了編譯時進(jìn)行束縛所帶來的高效率,又具備了執(zhí)行時束縛所帶來的數(shù)據(jù)獨立性。實踐證明,預(yù)編譯方法的效率比其它方法高兩倍以上。
7.數(shù)據(jù)存取層
數(shù)據(jù)存取層介于語言處理層和數(shù)據(jù)存儲之間。它向上提供單元組接口,即導(dǎo)航式的一次一個元組的存取操作。向下則以系統(tǒng)緩沖區(qū)的存儲器接口作為實現(xiàn)基礎(chǔ)。
(1)提供一次一個元組的查找、插入、刪除、修改等基本操作。
(2)提供元組查找所循的存取路徑以及對存取路徑的維護(hù)操作。如對索引記錄的查找、插入、刪除、修改。
(3)對記錄和存取路徑的封鎖、解鎖操作。
(4)日志文件的登記和讀取操作。
(5)輔助操作。如掃描、合并/排序,其操作對象有關(guān)系、有序表、索引等。為了完成上述功能,通常把存取層又劃分為若干功能子系統(tǒng)加以實現(xiàn)。
8.緩沖區(qū)管理
數(shù)據(jù)存取層的下面是數(shù)據(jù)存儲層(簡稱存儲層)。存儲層的主要功能是存儲管理。包括緩沖區(qū)管理、內(nèi)外存交換、外存管理等。其中緩沖管理是最主要的。存儲層向存取層提供的接口是由定長頁面組成的系統(tǒng)緩沖區(qū)。系統(tǒng)緩沖區(qū)的設(shè)立是出于兩方面的原因:一是它把存儲層以上各系統(tǒng)成分和實在的外存設(shè)備隔離。外存設(shè)備的變更不會影響其它系統(tǒng)成分,使DBMS具有設(shè)備獨立性。二是提高存取效率。DBMS利用系統(tǒng)緩沖區(qū)滯留數(shù)據(jù)。當(dāng)存取層需要讀取數(shù)據(jù)時存儲子系統(tǒng)首先到系統(tǒng)緩沖區(qū)中查找。只有當(dāng)緩沖區(qū)不存在該數(shù)據(jù)時才真正從外存讀入該數(shù)據(jù)所在的頁面。當(dāng)存取層寫回一元組到數(shù)據(jù)庫中時,存儲子系統(tǒng)并不把它立即寫回外存,僅把該元組所在的緩沖區(qū)頁面作一標(biāo)志,表示可以釋放。只有當(dāng)該用戶事務(wù)結(jié)束或結(jié)束緩沖區(qū)已滿需要調(diào)入新頁時才按一定的淘汰策略把緩沖區(qū)中已有釋放標(biāo)志的頁面寫回外存。這樣可以減少內(nèi)外存交換的次數(shù),提高存取效率。系統(tǒng)緩沖區(qū)可由內(nèi)存或虛存組成。由于內(nèi)存空間緊張,緩沖區(qū)的大小、緩沖區(qū)內(nèi)存和虛存部分的比例要精心設(shè)計。針對不同的應(yīng)用和環(huán)境按一定的模型進(jìn)行調(diào)整。既不能讓緩沖區(qū)占據(jù)太大內(nèi)存空間,也不能因空間太小而頻頻缺頁調(diào)頁,造成“抖動”,影響效率。緩沖區(qū)由控制信息和若干定長頁面組成。緩沖區(qū)管理模塊向上層提供的操作是緩沖區(qū)的讀(READBUF)、寫(WRITEBUF)。緩沖區(qū)內(nèi)部的管理操作有:查找頁、申請頁、淘汰頁。緩沖區(qū)管理調(diào)用OS的操作有:讀(READ)、寫(WEITE)。
9.數(shù)據(jù)庫的物理組織
數(shù)據(jù)庫是大量數(shù)據(jù)的有結(jié)構(gòu)的綜合性的集合,如何將這樣一個龐大的數(shù)據(jù)集合以最優(yōu)的形式組織起來存放在外存上是一個非常重要的問題。所謂“優(yōu)”應(yīng)包括兩方面:一是存儲效率高,節(jié)省存儲空間;二是讀取效率高,速度快、代價小。數(shù)據(jù)庫實現(xiàn)的基礎(chǔ)是文件,對數(shù)據(jù)庫的任何操作最終要轉(zhuǎn)化為對文件的操作。所以在數(shù)據(jù)庫物理組織中,基本的問題是如何設(shè)計文件組織或者利用操作系統(tǒng)提供的基本的文件組織方法。但是,在數(shù)據(jù)庫中表和文件不必具有一一對應(yīng)關(guān)系。這和操作系統(tǒng)中不一樣。DBMS可以建立只能自己讀寫的文件,在其中存儲多個表的數(shù)據(jù)。數(shù)據(jù)系統(tǒng)是文件系統(tǒng)的發(fā)展。文件系統(tǒng)中每個文件存儲同質(zhì)實體的數(shù)據(jù),各文件是孤立的,沒有體現(xiàn)實體之間的聯(lián)系。數(shù)據(jù)庫系統(tǒng)中數(shù)據(jù)的物理組織必須體現(xiàn)實體之間的聯(lián)系,支持?jǐn)?shù)據(jù)庫的邏輯結(jié)構(gòu)———各種數(shù)據(jù)模型。因此數(shù)據(jù)庫中要存儲4個方面的數(shù)據(jù):數(shù)據(jù)描述。即數(shù)據(jù)外模式、模式、內(nèi)模式。數(shù)據(jù)本身。數(shù)據(jù)之間的聯(lián)系。存取路徑。這4個方面的數(shù)據(jù)內(nèi)容都要采用一定的文件組織方式組織、存儲起來。
(1)數(shù)據(jù)字典(DD)的組織 有關(guān)數(shù)據(jù)的描述存儲在數(shù)據(jù)庫的數(shù)據(jù)字典中。數(shù)據(jù)字典的特點是數(shù)據(jù)量比較小(與數(shù)據(jù)本身比)、使用頻繁,因為任何數(shù)據(jù)庫操作都要參照數(shù)據(jù)字典的內(nèi)容。數(shù)據(jù)字典在網(wǎng)狀、層次數(shù)據(jù)中常常用一個特殊的文件來組織。所有關(guān)于數(shù)據(jù)的描述信息存放在一個文件中。
(2)數(shù)據(jù)及數(shù)據(jù)聯(lián)系的組織 關(guān)于數(shù)據(jù)自身的組織,DBMS可以根據(jù)處理的要求自己設(shè)計文件結(jié)構(gòu),也可以從操作系統(tǒng)提供的文件結(jié)構(gòu)中選擇合適的加以實現(xiàn)。目前,操作系統(tǒng)提供的常用文件結(jié)構(gòu)有:順序文件、索引文件、索引順序文件、HASH文件(雜湊文件)和B樹類文件等等。數(shù)據(jù)庫中數(shù)據(jù)組織與數(shù)據(jù)之間聯(lián)系是緊密結(jié)合的。在數(shù)據(jù)的組織和存儲中必須直接或間接、顯式或隱含地體現(xiàn)數(shù)據(jù)之間的聯(lián)系,這是數(shù)據(jù)庫物理組織中主要考慮和設(shè)計的內(nèi)容。關(guān)系數(shù)據(jù)庫中實現(xiàn)了數(shù)據(jù)表示的單一性。實體及實體之間的聯(lián)系都用一種數(shù)據(jù)結(jié)構(gòu)———“表”來表示。在數(shù)據(jù)庫的物理組織中,每一個表通?梢詫(yīng)一種文件結(jié)構(gòu)。因此數(shù)據(jù)和數(shù)據(jù)之間的聯(lián)系兩者組織方式相同。
(3)存取路徑的組織 關(guān)系數(shù)據(jù)庫中,存取路徑和數(shù)據(jù)是分離的,對用戶是隱蔽的。存取路徑可以動態(tài)建立、刪除。存取路徑的物理組織通常采用B樹類文件結(jié)構(gòu)和HASH文件結(jié)構(gòu)。在一個關(guān)系上可以建立若干個索引。有的系統(tǒng)支持組合屬性索引,即在兩個或兩個以上的屬性上建立索引。索引可以由用戶用CRETR INDEX語句建立,用DROP INDEX語句刪除。在執(zhí)行查詢時,DBMS查詢優(yōu)化模塊也會根據(jù)優(yōu)化策略自動地建立索引,以提高查詢效率。由此可見,關(guān)系數(shù)據(jù)庫中存取路徑的建立是十分靈活的。
相關(guān)推薦: 軟考數(shù)據(jù)庫系統(tǒng)師歷年真題匯總(2007年-2010年)北京 | 天津 | 上海 | 江蘇 | 山東 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
廣東 | 河北 | 湖南 | 廣西 | 河南 |
海南 | 湖北 | 四川 | 重慶 | 云南 |
貴州 | 西藏 | 新疆 | 陜西 | 山西 |
寧夏 | 甘肅 | 青海 | 遼寧 | 吉林 |
黑龍江 | 內(nèi)蒙古 |