存儲記錄間的結構形式
對定長記錄
若記錄都是一樣長的,則頁的槽也是統一的,此時存儲記錄在頁中的安置可以有下列幾種方式。
(1)記錄鄰接。以ACDD方式安置記錄,N個記錄占據頁的連續N個槽。
這種結構的維護原則是,要插入一個記錄就插到一個空槽中,刪除一個記錄就留下一個空槽。這樣要考慮兩個問題:第一,查找機制必須能識別一個空槽,從而允許記錄占有的槽不一定連續,否則,每當刪除一個記錄,其後的所有記錄都得向前移一個槽,或者按下面第二點所述處理;第二,記錄要能夠是無序的,如此,則刪除一個記錄時,不必移動其後所有記錄,而只需將最後一個記錄移到此空槽即可,否則必須重新排序。所以這種結構適合於靜態、連續查找的檔案,對動態維護不利。
(2)記錄連結。解決上述兩個問題的一種方法就是用指針連結代替記錄的鄰接,即以
PCDD方式安置記錄。這樣,動態維護頁的記錄很方便,插入或刪除記錄時,只需適當維護鏈的結構即可。但它的時間(搜尋鏈)代價與空間(鏈的指針)代價都要高些。
(3)槽陣列。建立一個槽的數據指示陣列,陣列的每一項包含對應槽所存儲的記錄號或記錄的標識符(rid),或者為“0”,標明該槽為空。這種結構與上面的記錄鏈的空間開銷一樣,但查找與維護的性能更高。它的數據安置方式是PCDI,故其優缺點也一樣。
對變長記錄
若記錄的長度是變化的,那么頁就不能靜態地劃分成固定長度的槽,而必須在記錄插入時動態地劃分合適長度的槽來存放相應記錄。關鍵是如何管理頁中的自由空間,當一個記錄被刪除,如何處理留下的“空洞”。變長記錄的頁結構典型地有下列幾種形式。
(1)記錄槽連結。這是組織變長記錄的一種常用方法,所有的記錄槽組成一個鏈,空槽組成另一個鏈。每頁有一“頁頭”(page header),它包含兩個鏈的鏈頭指針,也許還有記錄的個數等信息。
每當插人記錄R,時,在空槽鏈上找一個或從自由空區劃出一個合適的空槽,將其放入,並在“槽頭”記錄下它的長度li,再維護好兩個鏈的結構。刪除記錄時,將該空槽自記錄鏈中移入空槽鏈,並將相鄰空槽合併成更大的槽,以免出現更多的無法使用的小“空洞”,從而提高空間的利用率。
這種結構的優缺點就是PCDD方式所有的,前面已談到,這裡不再重複。必須要注意的是要小心管理自由空間,儘量不要出現無用的“空洞”(完全不出現是很難的)。
(2)槽目錄。這是組織變長記錄最靈活的一種方法。每頁有一個槽目錄,每一目錄項是一個二元組,l為該槽中記錄的長度,pt為指向該記錄的指針,就是頁的數據區首址開始的位移量(位元組數)。
當刪除一個記錄時,則置其槽目錄項中的pt(即記錄的位移量)為負。當插入一個記錄時,將其存入合適的空槽或自由空間區的適當區域中,在槽目錄中建立一槽目錄項。若要插入的記錄太長,連自由空間都容納不下,但整個頁的剩餘空間是足夠大的(即在頁的數據區域中包含了大量的小“空洞”),則必須整理頁空問,使空區都並人自由空間區,並相應地維護槽目錄。注意,刪除記錄時,不能隨意刪除槽目錄中的相應項,因為那樣會改變一些槽的編號,而這個槽(目錄)號是記錄的標識符Rid(F#,P#,S#)即(檔案號,頁號,槽號)的組成部分。
存儲記錄格式
有三種類型的記錄:
邏輯記錄、存儲記錄、
物理記錄,從數據抽象的角度來看,它們分屬不同的抽象層,而邏輯記錄又進一步分為“外部記錄”(外部或子模式)和“概念記錄”(概念模式)兩層。
一個存儲記錄是對應一個或多個概念記錄的存儲數據項及實現其存儲管理的有關信息的集合。下面介紹幾種典型的存儲記錄結構,它們有不同的格式,需要不同的管理信息。
定位式
顧名思義,
定位式(position mode)就是固定各域(或存儲數據項)的位置。當然這也就固定了各域的長度和域的個數,所以它比較適合於定長記錄的存儲。在一個域的存儲數據項的長度變化不太大,且知道其最大值的情況下,也可用於存儲變長域(因而變長記錄)。
它採用ACDD數據安置方式,其記錄頭與記錄尾,就是有關管理的信息,包括記錄間的連線信息,如指針等。域的長度為對應數據項所取值的最大者。當數據項值被存儲時,以左或右對齊,不足的未用空間以空格填充。這種格式最簡單,很常用。但它很可能浪費大量存儲空間,尤其對於很大的資料庫,這個代價是很大的。
關係式
關係式(relational mode)使用一專門
字元(但必須是合法的)作域的界限符,域的相對排序固定,例如,字元“$”就是界限符。顯然,這種格式支持變長記錄的存儲,它可消除用作填充的空格串和
Null值(也是空格字元串),從而節省了空間。
索引式
索引式(indexed mode)一般在記錄的開端使用一個索引(或
指針陣列),其中每一指針指明一個數據項值在記錄中的位移量,各指針與數據項值在記錄中的排序是相對的。與關係式一樣,它支持變長記錄且消除了無用(包括填充用的和Null值的)空間,但它比關係式花費空間略多,因為指針可能比一個字元大。然而,它可以進行域的直接存取,關係式卻不能。
分離式
一個記錄的變長是由於包含了變長的數據項,一般一個記錄型中變長數據項的個數總是少數。分離式(separated mode)存儲記錄結構的基本思想就將變長的域分離出來單獨存儲,再和主記錄以指針相連。
標記式
標記式(1abeled mode)存儲記錄結構在每_數據項值之前綴以指明該數據項型的標號,它們類似於關係式中的界限符的作用,但對各域是唯一的,即還具有數據項或域型的標識作用,且是在域的前頭(而不是末尾)。標記式結構有三個優點,一是域值的順序可以是任意的;二是可以方便地處理“重複組”數據項(使用同一標識符即可);三是省空間,對無值(即Null值)的域不需要任何空間,甚至界限符或指針都不要。其缺點是不能直接存取一個域值;若記錄域的個數較多時,則標號會比界限符更大。
存儲記錄設計
存儲記錄結構設計包括存儲記錄本身的內容與格式的確定和記錄之間結構(聯繫)的確定,而後者實際就是存儲檔案結構的選擇。存儲檔案結構在一定程度上決定著存儲記錄的格式,如記錄是變長還是定長,是否有連結指針等。所以應該先選擇存儲檔案結構。
存儲檔案自身的結構分為定長和變長記錄兩種形式,而檔案記憶體儲記錄的組織結構可以有:堆檔案(地址鄰接、數據直接定位);有序檔案(記錄按主關鍵字值排序,其餘同堆檔案);索引檔案,包括B一樹、Bt樹(地址鄰接、數據指針定位);
Hash檔案(地址連線,數據指針定位);連結檔案(指針連線,數據直接定位)等。由此,可以看出,存儲檔案結構不但在一定程度上決定了存儲記錄的格式,而且也決定了後面存取方法的選擇。
一個存儲記錄格式通常由三部分組成:記錄管理開銷、各
數據項及連線指針。記錄管理開銷包括控制位、記錄長度等信息,其具體內容與存儲格式有關。各數據項及其類型、長度等在邏輯結構設計期間已經確定,問題是它們如何以符合系統硬軟體實現的方式來存儲。這些方式可以是定位式、關係式、索引式、標誌式等。指針可以有多種形式,可以是絕對地址,也可以是相對地址,即關於一共同基的相對位移等。
無論是存儲檔案結構還是存儲記錄結構的確定,要考慮的一方面是套用語義,各類主要套用對資料庫的存取需求;另一方面是所選定的目標
DBMS提供的數據存儲的功能特性,即存儲結構方式。設計者的決策就在於這兩方面的最佳匹配,即依據用戶的數據存取需求選擇最合適的存儲數據結構。
存儲記錄的安置
如何將各檔案的存儲記錄在物理設備上實現,物理設計者要做兩方面的決策:一是以整個記錄為單位來存放還是分割成片來分別存放,即記錄的分割問題;二是一個檔案整體地存放於連續物理區域,還是將那些緊密關聯的不同檔案的記錄集群在一起來存放於連續的物理區域,即記錄的集群問題。
記錄的分割
存儲記錄的分割其實也屬於存儲記錄格式設計範疇,只是從其目的來看,更偏重於存儲記錄的安置。分割的理由是:
(1)存在80一20規律。即80%的數據存取常常集中在約占20%的那些活躍數據項上。
(2)支持用戶視圖或子模式的高效實現。
(4)有利於數據安全和可靠性。
分割的方式一般有兩種:
水平分割。這實際上是檔案的分裂。這種形式特別有利於關係資料庫,因為它典型地按關鍵字值來劃分記錄,這實質上等於已進行了查詢的預處理。
垂直分割。這典型地將存儲記錄分成兩片,其主片為20%的那些活躍數據項,次片為剩餘80%的那些數據項。它們分別存於不同的位置,使主片能得以更快速地存取,從而提高資料庫的性能。
記錄集群
記錄集群就是將存儲記錄或片段(同一記錄型或不同記錄型的)按某種標準進行排列和安置,使得具有共同或相似性(相對給定的標準而言)的記錄組合成群(cluster)而存放在一塊(或相連的幾塊)內。其目的是最大地發揮連續存儲的優越性和最小化存取時間。例如,在商場管理中,一個商場有數以千計的商品種類,而每一類又有數以百計的品種。假設電器類商品有900種,在極端情況下,它們的記錄分布存儲於900個不同的物理塊上。這樣,要查詢所有電器商品信息則要900次I/(),每次的磁頭要重新定位。若將其集群存放在連續的90塊(設組塊因子為10)上,則查詢所有電器商品的時問遠不到前者的十分之一。
集群的方法可以多種多樣,典型的有:
按屬性集群。即對於某(一或多)個屬性一稱為“集群關鍵字”(cluster key),讓具有相同值的記錄(或元組)集中在一起存放。這是單個檔案的記錄集群。
基於公共屬性集群。對兩個或多個具有公共屬性的不同記錄類型(它們必然是緊密關聯且往往被同時存取),其公共屬性(也是上述的集群關鍵字)值相同的不同類型的記錄(或元組)集群在一起存放。顯然,這特別有利於關係的連線運算,這種集群實際已進行了連線的預運算。
基於存取路徑集群。針對主要的資料庫套用,其主存取路徑上的相關記錄經常頻繁地被一起存取,故將其集群在一起存放。
集群對關係資料庫非常有用,所以像
Oracle資料庫就提供了CLUSTER相關的子句。當經由集群關鍵字查詢或連線查詢是主要套用,而與集群關鍵字無關的其他存取很少或不需要時,使用集群就很有好處,尤其是當查詢中含有關於集群關鍵字的ORDER BY、GROUP BY、UNI()N、DISTINCT等成分時,集群的受益會格外突出。
在層次資料庫中,一般將樹結構的片段按“由上到下,由左到右”的層次順序存放,經集群,則可將樹中存取路徑上某些相連記錄片集成在一起存放。
在網狀資料庫中,記錄集群就更直接明確.以C()DASYI。模型為例,它用DSDI。語言的存儲記錄說明來定位記錄。記錄的定位就包含記錄的集群,它由DSDL的PI,AYCEMENT子句控制。其定位形式有三種:
CALC。這就是Hashing定位,它經Hash函式計算後,由記錄關鍵字值產生一個存儲地址。相同或相近關鍵字值的記錄必然集成在一起。
CI.USTERED VIA SET。它把一個系中的成員記錄值集群在一起,且往往就在系主記錄值的附近。
SEQUENTIAL。把一個記錄型的所有記錄值按主關鍵字值順序存儲。
必須指出的是,記錄集群往往總是有利於某些套用,並非對所有的套用有利,而且其維護開銷是相當大的。當建立集群時,原有的索引可能變成無效(集群使存儲記錄的物理位置變化),必須重建索引。當多種類型的記錄集群時,對每種類型的記錄的順序掃描和插入、刪除、修改操作都會變慢。尤其是集群關鍵字值變更時,存儲記錄要移動,所以集群關鍵字值應相對穩定。總之,記錄集群適用於
超大型資料庫,對一般資料庫要慎用。
記憶體儲器又稱
主存,用於存放可由CPU直接讀寫的程式和數據。按讀/寫方式的不同可分為隨機讀/寫存儲器RAM和唯讀存儲器ROM,通常均由半導體製成。
隨機讀/寫存儲器
RAM(Randm Access Memory)的特點是可讀可寫,一般存放正在執行的程式和處理的數據。如關機或斷電.則RAM中存儲的數據將會全部丟失。因此,為了妥善保存記憶體中的數據.需要將CPU處理後的結果及時存放到外存儲器中。
唯讀存儲器ROM(Read Only Memory)的特點是只能讀出不能寫入新的信息,通常存儲一些不能改寫的管理機器本身的監控程式和其他基本的服務程式。ROM能長期保存信息,關機或斷電後,存儲的數據不會丟失。
外存儲器
外存儲器又稱
輔助存儲器,能長期存放暫時不用的程式和數據。外存不能由CPU直接讀/寫,而是與記憶體交換數據。與記憶體相比,外存具有存儲容量大,可靠性高,價格低,能長期保存數據的優點,其缺點是數據讀/寫速度較慢。
常用的外存有
磁帶、
磁碟(包括軟碟和硬碟)和光碟等。
軟碟驅動器及軟碟
軟碟驅動器是微型計算機系統中的一個重要部件。軟碟機的規格類型有3.5英寸、2.25英寸兩種,分別用於讀寫3.5英寸/1.44MB軟碟和2.25英寸/1.2MB軟碟。與2.25英寸軟碟相比,3.5英寸/1.44MB軟碟的體積小、容量大、易攜帶,因此在現行品牌機的標準配置中,通常只配有3.5英寸/1.44MB軟碟機,5.25英寸軟碟機已幾乎被淘汰。3.5英寸軟碟機的
數據傳輸率為500KB/S。主軸為轉速300rpm或是360rpm。道對道存取時間為3ms,平均存取時間為90ms左右。
與
軟碟驅動器的尺寸相應,軟碟也分為5.25英寸和3.5英寸兩種。1.44MB的3.5英寸軟碟每面是80個磁軌,有18個
扇區。
微機系統中使用的硬碟均為
溫盤(Winchester),由封裝在鑄鋁膠體中的頭盤組件(Head Disk Assembly)與控制電路印刷電路板組件PCBA(Print Circuit Board Assembly)組成。溫盤是一種可移動頭固定碟片的
磁碟存儲器,磁頭定位的驅動方式主要有
步進電機驅動(已淘汰)和
音圈電機驅動兩種。
隨著移動辦公的風靡,對移動存儲的需求也越來越大,使用
USB接口的
移動硬碟.因其具備與台式硬碟一樣的大容量、體積小、攜帶方便等眾多優點,已逐漸成為移動存儲所選用的產品。其常見的容量為4GB.40GB,60GB,80GB等,符合USB2.0標準。