數(shù)據(jù)庫系統(tǒng)是文件系統(tǒng)的發(fā)展,它把文件及其中獨立的數(shù)據(jù)建立起聯(lián)系。數(shù)據(jù)庫實現(xiàn)的基礎是文件,對數(shù)據(jù)庫的任何操作最終要轉(zhuǎn)化為對文件的操作。
數(shù)據(jù)的組織
數(shù)據(jù)庫要存儲的內(nèi)容包括:數(shù)據(jù)描述(數(shù)據(jù)外模式、模式、內(nèi)模式)、數(shù)據(jù)本身、數(shù)據(jù)之間的聯(lián)系、存取路徑等。
數(shù)據(jù)描述,存儲在數(shù)據(jù)庫的數(shù)據(jù)字典中,數(shù)據(jù)量少且頻繁訪問,所以單獨放在一個特殊的物理文件中。
數(shù)據(jù)及其聯(lián)系,這兩種數(shù)據(jù)是緊密結(jié)合的,在關系數(shù)據(jù)庫中使用了“表”來表示。可以一個表一個物理文件,由OS管理,也可以多個表一個物理文件,由DBMS來管理。
存取路徑,關系數(shù)據(jù)庫中存取路徑和數(shù)據(jù)是分離的,可以動態(tài)建立與刪除,存取路徑的物理組織通常采用B樹類文件結(jié)構(gòu)和hash文件結(jié)構(gòu)。
存儲管理器
存儲管理器組件是負責管理數(shù)據(jù)庫中存儲的底層數(shù)據(jù),并提供接口。接口包括:存儲的底層數(shù)據(jù)向應用程序接口、系統(tǒng)提交的查詢接口。它將各種DML語句翻譯為底層文件系統(tǒng)命令,也就是數(shù)據(jù)庫中數(shù)據(jù)的存儲、檢索和更新。
包括的子組件有:
權限及完整性管理器,檢查權限,檢查約束。
事務管理器,保證數(shù)據(jù)的一致的狀態(tài),保證并發(fā)事務的不沖突。
文件管理器,管理存儲空間的分配,管理存儲信息的數(shù)據(jù)結(jié)構(gòu)。
緩沖區(qū)管理器,負責將磁盤上的數(shù)據(jù)取到內(nèi)存中,并決定哪些數(shù)據(jù)需要緩沖在內(nèi)存中。
存儲管理器實現(xiàn)了幾種數(shù)據(jù)結(jié)構(gòu),作為系統(tǒng)物理實現(xiàn)的一部分:
數(shù)據(jù)文件(data file),存儲數(shù)據(jù)庫自身。
數(shù)據(jù)字典(data dictionary),存儲關于數(shù)據(jù)庫結(jié)構(gòu)的元數(shù)據(jù),尤其是數(shù)據(jù)庫模式。
索引(index),提供對數(shù)據(jù)項的快速訪問。
文件組織
一個數(shù)據(jù)庫被映射到多個不同的文件,這些文件與結(jié)構(gòu)由底層的操作系統(tǒng)來維護。文件在邏輯上是數(shù)據(jù)記錄的集合,數(shù)據(jù)在文件中存儲和讀取的基本單元是塊(block)。
塊的大小固定,大多數(shù)數(shù)據(jù)庫默認使用4~8KB的塊大小。創(chuàng)建實例時就固定下來了。
一個塊可能包含多條記錄,每條記錄包含在單個塊中,但大數(shù)據(jù)需要單獨存儲,在記錄中只保存地址指針。
不同的表記錄具有不同的大小,數(shù)據(jù)庫可以選擇映射到多個文件中,每個文件都存儲固定長度的記錄?;蛘呤褂锰厥獾奈募?,保存不定長度的記錄。
定長記錄,占用固定大小的存儲空間,記錄不跨塊,文件中的記錄是連續(xù)的,刪除也會進行整理。整理使用的方式有刪除時移動剩余記錄填充,或者刪除時記錄空閑列表,新插入時填充。
變長記錄,讓多種記錄類型在一個文件中存儲,或者有變長字段,或復合記錄類型。
變長記錄的實現(xiàn)有不同的技術,都需要解決的是如何描述一條記錄和在塊中如何存儲變長記錄。
記錄表示為先定長屬性,再是變長屬性,頭部有變長的偏移量,變長屬性開始處使用空值位圖,用來表示記錄中的哪些屬性是空值。
分槽的頁結(jié)構(gòu)(slotted-page structure)組織塊中變長記錄,塊頭記錄了記錄數(shù)、空閑空間的末尾地址、條目數(shù)組(記錄大小和地址)。記錄數(shù)據(jù)連續(xù)添加到空閑空間的末尾。
文件中記錄的組織
操作系統(tǒng)提供的常用文件結(jié)構(gòu)有順序文件、索引文件、索引順序文件、hash文件和B樹類文件等。
對應到數(shù)據(jù)庫的文件中,記錄的組織方式有多種方式,通常每種方式用一個獨立的文件,但是在多表聚簇文件組織中,將相關的多種記錄存儲在同一塊中,可以一次性讀出。
堆文件組織,一條記錄可以放在文件中的任何位置。但是每個關系一個獨立文件。
順序文件組織,根據(jù)記錄的某個屬性(一般是主鍵)順序存儲記錄。
散列文件組織,根據(jù)每條記錄的某個屬性的hash值確定存儲位置(文件中的塊位置)。
多表聚簇文件組織,在一個文件塊中保存兩個或更多關系的記錄。
B樹類結(jié)構(gòu)文件組織,就是B樹以及它的變種B+,B-樹,是順序文件組織改進,記錄以某個屬性或?qū)傩约癁樗阉鞔a存放在B+樹中,每個節(jié)點是文件的一個塊。索引數(shù)據(jù)主要使用此類文件組織。