- 數(shù)據(jù)庫系統(tǒng)原理及應(yīng)用教程(第5版)
- 苗雪蘭 劉瑞新等編著
- 3509字
- 2020-09-18 17:44:22
3.5 數(shù)據(jù)庫物理結(jié)構(gòu)的設(shè)計
數(shù)據(jù)庫物理結(jié)構(gòu)的設(shè)計是對于給定的邏輯數(shù)據(jù)模型,選取一個最適合應(yīng)用環(huán)境的物理結(jié)構(gòu)。數(shù)據(jù)庫的物理結(jié)構(gòu)指的是數(shù)據(jù)庫在物理設(shè)備上的存儲結(jié)構(gòu)與存取方法,它依賴于給定的計算機系統(tǒng)。
數(shù)據(jù)庫物理的結(jié)構(gòu)設(shè)計可以分為兩步進行:首先確定數(shù)據(jù)的物理結(jié)構(gòu),即確定數(shù)據(jù)庫的存取方法和存儲結(jié)構(gòu);然后對物理結(jié)構(gòu)進行評價。對物理結(jié)構(gòu)評價的重點是時間和效率。如果評價結(jié)果滿足原設(shè)計要求,則可以進行物理實施;否則應(yīng)該重新設(shè)計或修改物理結(jié)構(gòu),有時甚至要返回邏輯設(shè)計階段修改數(shù)據(jù)模型。
3.5.1 數(shù)據(jù)庫物理結(jié)構(gòu)設(shè)計的內(nèi)容和方法
由于不同的數(shù)據(jù)庫產(chǎn)品所提供的物理環(huán)境、存取方法和存儲結(jié)構(gòu)各不相同,供設(shè)計人員使用的設(shè)計變量、參數(shù)范圍也各不相同,所以數(shù)據(jù)庫的物理設(shè)計沒有通用的設(shè)計方法可遵循,僅有一般的設(shè)計內(nèi)容和設(shè)計原則供數(shù)據(jù)庫設(shè)計者參考。
數(shù)據(jù)庫設(shè)計人員都希望自己設(shè)計的數(shù)據(jù)庫物理結(jié)構(gòu)能滿足事務(wù)在數(shù)據(jù)庫上運行時響應(yīng)時間少、存儲空間利用率高和事務(wù)吞吐率大的要求。為此,設(shè)計人員應(yīng)該對要運行的事務(wù)進行詳細(xì)的分析,獲得選擇數(shù)據(jù)庫物理結(jié)構(gòu)設(shè)計所需要的參數(shù),并且應(yīng)當(dāng)全面了解給定的DBMS的功能、DBMS提供的物理環(huán)境和工具,尤其是存儲結(jié)構(gòu)和存取方法。
數(shù)據(jù)庫設(shè)計者在確定數(shù)據(jù)存取方法時,必須清楚3種相關(guān)信息。
1)數(shù)據(jù)庫查詢事務(wù)的信息,它包括查詢所需要的關(guān)系、查詢條件所涉及的屬性、連接條件所涉及的屬性、查詢的投影屬性等信息。
2)數(shù)據(jù)庫更新事務(wù)的信息,它包括更新操作所需要的關(guān)系、每個關(guān)系上的更新操作所涉及的屬性、修改操作要改變的屬性值等信息。
3)每個事務(wù)在各關(guān)系上運行的頻率和性能要求。
例如,某個事務(wù)必須在5秒內(nèi)結(jié)束,這對于存取方法的選擇有直接影響。這些事務(wù)信息會不斷地發(fā)生變化,故數(shù)據(jù)庫的物理結(jié)構(gòu)要能夠做適當(dāng)?shù)恼{(diào)整,以滿足事務(wù)變化的需要。
關(guān)系數(shù)據(jù)庫物理結(jié)構(gòu)設(shè)計的內(nèi)容主要指選擇存取方法和存儲結(jié)構(gòu),包括確定關(guān)系、索引、聚簇、日志、備份等的存儲安排和存儲結(jié)構(gòu),確定系統(tǒng)配置等。
3.5.2 存取方法的選擇
由于數(shù)據(jù)庫是為多用戶共享的系統(tǒng),它需要提供多條存取路徑才能滿足多用戶共享數(shù)據(jù)的要求。數(shù)據(jù)庫物理結(jié)構(gòu)設(shè)計的任務(wù)之一就是確定建立哪些存取路徑和選擇哪些數(shù)據(jù)存取方法。關(guān)系數(shù)據(jù)庫常用的存取方法有索引方法、聚簇方法和HASH方法等。
1.索引存取方法的選擇
選擇索引存取方法實際上就是根據(jù)應(yīng)用要求確定對關(guān)系的哪些屬性列建立索引,哪些屬性列建立組合索引,哪些索引建立唯一索引等。選擇索引方法的基本原則如下。
1)如果一個屬性經(jīng)常在查詢條件中出現(xiàn),則考慮在這個屬性上建立索引;如果一組屬性經(jīng)常在查詢條件中出現(xiàn),則考慮在這組屬性上建立組合索引。
2)如果一個屬性經(jīng)常作為最大值和最小值等聚集函數(shù)的參數(shù),則考慮在這個屬性上建立索引。
3)如果一個屬性經(jīng)常在連接操作的連接條件中出現(xiàn),則考慮在這個屬性上建立索引;同理,如果一組屬性經(jīng)常在連接操作的連接條件中出現(xiàn),則考慮在這組屬性上建立索引。
4)關(guān)系上定義的索引數(shù)要適當(dāng),并不是越多越好,因為系統(tǒng)為維護索引要付出代價,查找索引也要付出代價。例如,更新頻率很高的關(guān)系上定義的索引,數(shù)量就不能太多。因為更新一個關(guān)系時,必須對這個關(guān)系上有關(guān)的索引做相應(yīng)的修改。
2.聚簇存取方法的選擇
為了提高某個屬性或?qū)傩越M的查詢速度,把這個屬性或?qū)傩越M上具有相同值的元組集中存儲在連續(xù)的物理塊上的處理稱為聚簇,這個屬性或?qū)傩越M稱為聚簇碼。
(1)建立聚簇的必要性
聚簇功能可以大大提高按聚簇碼進行查詢的效率。例如,要查詢計算機系的所有學(xué)生名單,假設(shè)計算機系有200名學(xué)生,在極端情況下,這200名學(xué)生所對應(yīng)的數(shù)據(jù)元組分布在200個不同的物理塊上。盡管對學(xué)生關(guān)系已按所在系建有索引,由索引會很快找到計算機系學(xué)生的元組標(biāo)識,避免了全表掃描。然而再由元組標(biāo)識去訪問數(shù)據(jù)塊時就要存取200個物理塊,執(zhí)行200次I/O操作。如果將同一系的學(xué)生元組集中存儲,則每讀一個物理塊就可得到多個滿足查詢條件的元組,從而可以顯著地減少訪問磁盤的次數(shù)。聚簇功能不但適用于單個關(guān)系,而且適用于經(jīng)常進行連接操作的多個關(guān)系。即把多個連接關(guān)系的元組按連接屬性值聚集存儲,聚集中的連接屬性稱為聚簇碼。這就相當(dāng)于把多個關(guān)系按“預(yù)連接”的形式存儲,從而大大提高連接操作的效率。
(2)建立聚簇的基本原則
一個數(shù)據(jù)庫可以建立多個聚簇,但一個關(guān)系只能加入一個聚簇。選擇聚簇存取方法就是確定需要建立多少個聚簇,確定每個聚簇中包括哪些關(guān)系。聚簇設(shè)計時可分兩步進行:先根據(jù)規(guī)則確定候選聚簇,再從候選聚簇中去除不必要的關(guān)系。
設(shè)計候選聚簇的原則如下。
1)對經(jīng)常在一起進行連接操作的關(guān)系可以建立聚簇。
2)如果一個關(guān)系的一組屬性經(jīng)常出現(xiàn)在相等、比較條件中,則該單個關(guān)系可建立聚簇。
3)如果一個關(guān)系的一個(或一組)屬性上的值重復(fù)率很高,則此單個關(guān)系可建立聚簇。也就是說對應(yīng)每個聚簇碼值的平均元組不能太少,太少了,聚簇的效果不明顯。
4)如果關(guān)系的主要應(yīng)用是通過聚簇碼進行訪問或連接,而其他屬性訪問關(guān)系的操作很少時,可以使用聚簇。尤其當(dāng)SQL語句中包含有與聚簇有關(guān)的ORDER BY,GROUP BY,UNION,DISTINCT等子句或短語時,使用聚簇特別有利,可以省去對結(jié)果集的排序操作。反之,當(dāng)關(guān)系較少且利用聚簇碼操作時,最好不要使用聚簇。
檢查候選聚簇,取消其中不必要關(guān)系的方法如下。
1)從聚簇中刪除經(jīng)常進行全表掃描的關(guān)系。
2)從聚簇中刪除更新操作遠(yuǎn)多于連接操作的關(guān)系。
3)不同的聚簇中可能包含相同的關(guān)系,一個關(guān)系可以在某一個聚簇中,但不能同時加入多個聚簇。要從這多個聚簇方案(包括不建立聚簇)中選擇一個較優(yōu)的,其標(biāo)準(zhǔn)是在這個聚簇上運行各種事物的總代價最小。
(3)建立聚簇應(yīng)注意的問題
建立聚簇時,應(yīng)注意以下3個問題。
1)聚簇雖然提高了某些應(yīng)用的性能,但是建立與維護聚簇的開銷是相當(dāng)大的。
2)對已有的關(guān)系建立聚簇,將導(dǎo)致關(guān)系中的元組移動其物理存儲位置,這樣會使關(guān)系上原有的索引無效,要想使用原索引就必須重建原有索引。
3)當(dāng)一個元組的聚簇碼值改變時,該元組的存儲位置也要做相應(yīng)移動,所以聚簇碼值應(yīng)當(dāng)相對穩(wěn)定,以減少修改聚簇碼值所引起的維護開銷。
3.5.3 確定數(shù)據(jù)庫的存儲結(jié)構(gòu)
確定數(shù)據(jù)的存儲位置和存儲結(jié)構(gòu)要綜合考慮存取時間、存儲空間利用率和維護代價3個方面的因素。這3個方面常常相互矛盾,需要進行權(quán)衡,選擇一個折中方案。
1.確定數(shù)據(jù)的存儲位置
為了提高系統(tǒng)性能,應(yīng)根據(jù)應(yīng)用情況將數(shù)據(jù)的易變部分與穩(wěn)定部分、經(jīng)常存取部分和存取頻率較低部分分開存儲。有多個軟盤的計算機,可以采用下面幾種存取位置的分配方案。
1)將表和索引放在不同的軟盤上,這樣在查詢時,由于兩個軟盤驅(qū)動器并行工作,可以提高物理I/O讀寫的效率。
2)將比較大的表分別放在兩個軟盤上,以加快存取速度,這在多用戶環(huán)境下特別有效。
3)將日志文件、備份文件與數(shù)據(jù)庫對象(表、索引等)放在不同的軟盤上,以改進系統(tǒng)的性能。
4)對于經(jīng)常存取或存取時間要求高的對象(如表、索引)應(yīng)放在高速存儲器(如硬盤)上,對于存取頻率小或存取時間要求低的對象(如數(shù)據(jù)庫的數(shù)據(jù)備份和日志文件備份等只在故障恢復(fù)時才使用),如果數(shù)據(jù)量很大,可以存儲在低速存儲設(shè)備上。
由于各個系統(tǒng)所能提供的對數(shù)據(jù)進行物理安排的手段、方法差異很大,因此設(shè)計人員應(yīng)仔細(xì)了解給定的DMBS提供的方法和參數(shù),針對具體應(yīng)用環(huán)境的要求,對數(shù)據(jù)進行適當(dāng)?shù)奈锢戆才拧?/p>
2.確定系統(tǒng)配置
DBMS產(chǎn)品一般都提供了一些系統(tǒng)配置變量和存儲分配參數(shù)供設(shè)計人員和DBA對數(shù)據(jù)庫物理結(jié)構(gòu)進行優(yōu)化。在初始情況下,系統(tǒng)都為這些變量賦予了合理的默認(rèn)值。但是這些默認(rèn)值不一定適合每一種應(yīng)用環(huán)境。在進行數(shù)據(jù)庫的物理結(jié)構(gòu)設(shè)計時,還需要重新對這些變量賦值,以改善系統(tǒng)的性能。
系統(tǒng)配置變量很多。例如,同時使用數(shù)據(jù)庫的用戶數(shù)、同時打開的數(shù)據(jù)庫對象數(shù)、內(nèi)存分配參數(shù)、緩沖區(qū)分配參數(shù)(使用的緩沖區(qū)長度、個數(shù))、存儲分配參數(shù)、物理塊的大小、物理塊裝填因子、時間片大小、數(shù)據(jù)庫的大小和鎖的數(shù)目等,這些參數(shù)值影響存取時間和存儲空間的分配。物理結(jié)構(gòu)設(shè)計時需要根據(jù)應(yīng)用環(huán)境確定這些參數(shù)值,以使系統(tǒng)性能最佳。
物理結(jié)構(gòu)設(shè)計時對系統(tǒng)配置變量的調(diào)整只是初步的,在系統(tǒng)運行時還要根據(jù)實際運行情況做進一步的參數(shù)調(diào)整,以改進系統(tǒng)性能。
3.評價物理結(jié)構(gòu)
物理結(jié)構(gòu)設(shè)計過程中需要對時間效率、空間效率、維護代價和各種用戶要求進行權(quán)衡,其結(jié)果可能會產(chǎn)生多種設(shè)計方案。數(shù)據(jù)庫設(shè)計人員必須對這些方案進行詳細(xì)的評價,從中選擇一個較優(yōu)的方案作為數(shù)據(jù)庫的物理結(jié)構(gòu)。評價數(shù)據(jù)庫物理結(jié)構(gòu)的方法完全依賴于所選用的DBMS,主要是從定量估算各種方案的存儲空間、存取時間和維護代價入手,對估算結(jié)果進行權(quán)衡和比較,選擇出一個較優(yōu)的、合理的物理結(jié)構(gòu)。如果該物理結(jié)構(gòu)不符合用戶需求,則需要修改設(shè)計。
- 輕松學(xué)PHP
- 空間機器人遙操作系統(tǒng)及控制
- Learning Apache Cassandra(Second Edition)
- 統(tǒng)計學(xué)習(xí)理論與方法:R語言版
- 自動控制理論(非自動化專業(yè))
- Grome Terrain Modeling with Ogre3D,UDK,and Unity3D
- 貫通Java Web開發(fā)三劍客
- Mastering GitLab 12
- 和機器人一起進化
- 傳感器原理與工程應(yīng)用
- EJB JPA數(shù)據(jù)庫持久層開發(fā)實踐詳解
- 數(shù)據(jù)清洗
- ARM體系結(jié)構(gòu)與編程
- Proteus從入門到精通100例
- Kibana 7 Quick Start Guide