詳細(xì)講解大型數(shù)據(jù)庫的設(shè)計原則與開發(fā)技巧
一、成立數(shù)據(jù)小組
大型數(shù)據(jù)庫數(shù)據(jù)元素多,在設(shè)計上有必要成立專門的數(shù)據(jù)小組。由于數(shù)據(jù)庫設(shè)計者不一定是使用者,對系統(tǒng)設(shè)計中的數(shù)據(jù)元素不可能考慮周全,數(shù)據(jù)庫設(shè)計出來后,往往難以找到所需的庫表,因此數(shù)據(jù)小組最好由熟悉業(yè)務(wù)的項目骨干組成。
數(shù)據(jù)小組的職能并非是設(shè)計數(shù)據(jù)庫,而是通過需求分析,在參考其他相似系統(tǒng)的基礎(chǔ)上,提取系統(tǒng)的基本數(shù)據(jù)元素,擔(dān)負(fù)對數(shù)據(jù)庫的審核。審核內(nèi)容包括審核新的數(shù)據(jù)庫元素是否完全、能否實現(xiàn)全部業(yè)務(wù)需求;對舊數(shù)據(jù)庫(如果存在舊系統(tǒng))的分析及數(shù)據(jù)轉(zhuǎn)換;數(shù)據(jù)庫設(shè)計的審核、控制及必要調(diào)整。
二、設(shè)計原則
1、規(guī)范命名
所有的庫名、表名、域名必須遵循統(tǒng)一的命名規(guī)則,并進(jìn)行必要說明,以方便設(shè)計、維護(hù)、查詢。
2、控制字段的引用
在設(shè)計時,可以選擇適當(dāng)?shù)臄?shù)據(jù)庫設(shè)計管理工具,以方便開發(fā)人員的分布式設(shè)計和數(shù)據(jù)小組的集中審核管理。采用統(tǒng)一的命名規(guī)則,如果設(shè)計的字段已經(jīng)存在,可直接引用;否則,應(yīng)重新設(shè)計。
3、庫表重復(fù)控制
在設(shè)計過程中,如果發(fā)現(xiàn)大部分字段都已存在,開發(fā)人員應(yīng)懷疑所設(shè)計的庫表是否已存在。通過對字段所在庫表及相應(yīng)設(shè)計人員的查詢,可以確認(rèn)庫表是否確實重復(fù)。
4、并發(fā)控制
設(shè)計中應(yīng)進(jìn)行并發(fā)控制,即對于同一個庫表,在同一時間只有一個人有控制權(quán),其他人只能進(jìn)行查詢。
5、必要的討論
數(shù)據(jù)庫設(shè)計完成后,數(shù)據(jù)小組應(yīng)與相關(guān)人員進(jìn)行討論,通過討論來熟悉數(shù)據(jù)庫,從而對設(shè)計中存在的問題進(jìn)行控制或從中獲取數(shù)據(jù)庫設(shè)計的必要信息。
6、數(shù)據(jù)小組的審核
庫表的定版、修改最終都要通過數(shù)據(jù)小組的審核,以保證符合必要的要求。
7、頭文件處理
每次數(shù)據(jù)修改后,數(shù)據(jù)小組要對相應(yīng)的頭文件進(jìn)行修改(可由管理軟件自動完成),并通知相關(guān)的開發(fā)人員,以便進(jìn)行相應(yīng)的程序修改。
三、設(shè)計技巧
1、分類拆分?jǐn)?shù)據(jù)量大的表
對于經(jīng)常使用的表(如某些參數(shù)表或代碼對照表),由于其使用頻率很高,要盡量減少表中的記錄數(shù)量。例如,銀行的戶主賬表原來設(shè)計成一張表,雖然可以方便程序的設(shè)計與維護(hù),但經(jīng)過分析發(fā)現(xiàn),由于數(shù)據(jù)量太大,會影響數(shù)據(jù)的迅速定位。如果將戶主賬表分別設(shè)計為活期戶主賬、定期戶主賬及對公戶主賬等,則可以大大提高查詢效率。
2、索引設(shè)計
應(yīng)挑選重復(fù)值較少的字段;在對建有復(fù)合索引的字段進(jìn)行檢索時,應(yīng)注意按照復(fù)合索引字段建立的順序進(jìn)行。例如,如果對一個5萬多條記錄的流水表以日期和流水號為序建立復(fù)合索引,由于在該表中日期的重復(fù)值接近整個表的記錄數(shù),用流水號進(jìn)行查詢所用的時間接近3秒;而如果以流水號為索引字段建立索引進(jìn)行相同的查詢,所用時間不到1秒。因此在大型數(shù)據(jù)庫設(shè)計中,只有進(jìn)行合理的索引字段選擇,才能有效提高整個數(shù)據(jù)庫的操作效率。
3、數(shù)據(jù)操作的優(yōu)化
在大型數(shù)據(jù)庫中,如何提高數(shù)據(jù)操作效率值得關(guān)注。例如,每在數(shù)據(jù)庫流水表中增加一筆業(yè)務(wù),就必須從流水控制表中取出流水號,并將其流水號的數(shù)值加一。正常情況下,單筆操作的反應(yīng)速度尚屬正常,但當(dāng)用它進(jìn)行批量業(yè)務(wù)處理時,速度會明顯減慢。經(jīng)過分析發(fā)現(xiàn),每次對流水控制表中的流水號數(shù)值加一時都要鎖定該表,而該表卻是整個系統(tǒng)操作的核心,有可能在操作時被其他進(jìn)程鎖定,因而使整個事務(wù)操作速度變慢。對這一問題的解決的辦法是,根據(jù)批量業(yè)務(wù)的總筆數(shù)批量申請流水號,并對流水控制表進(jìn)行一次更新,即可提高批量業(yè)務(wù)處理的速度。另一個例子是對插表的優(yōu)化。對于大批量的業(yè)務(wù)處理,如果在插入數(shù)據(jù)庫表時用普通的Insert語句,速度會很慢。其原因在于,每次插表都要進(jìn)行一次I/O操作,花費較長的時間。改進(jìn)后,可以用Put語句等緩沖區(qū)形式等滿頁后再進(jìn)行I/O操作,從而提高效率。對大的數(shù)據(jù)庫表進(jìn)行刪除時,一般會直接用Delete語句,這個語句雖然可以進(jìn)行小表操作,但對大表卻會因帶來大事務(wù)而導(dǎo)致刪除速度很慢甚至失敗。解決的方法是去掉事務(wù),但更有效的辦法是先進(jìn)行Drop操作再進(jìn)行重建。
4、數(shù)據(jù)庫參數(shù)的調(diào)整
數(shù)據(jù)庫參數(shù)的調(diào)整是一個經(jīng)驗不斷積累的過程,應(yīng)由有經(jīng)驗的系統(tǒng)管理員完成。以Informix數(shù)據(jù)庫為例,記錄鎖的數(shù)目太少會造成鎖表的失?。贿壿嬋罩镜奈募?shù)目太少會造成插入大表失敗等,這些問題都應(yīng)根據(jù)實際情況進(jìn)行必要的調(diào)整。
5、必要的工具
在整個數(shù)據(jù)庫的開發(fā)與設(shè)計過程中,可以先開發(fā)一些小的應(yīng)用工具,如自動生成庫表的頭文件、插入數(shù)據(jù)的初始化、數(shù)據(jù)插入的函數(shù)封裝、錯誤跟蹤或自動顯示等,以此提高數(shù)據(jù)庫的設(shè)計與開發(fā)效率。
6、避免長事務(wù)
對單個大表的刪除或插入操作會帶來大事務(wù),解決的辦法是對參數(shù)進(jìn)行調(diào)整,也可以在插入時對文件進(jìn)行分割。對于一個由一系列小事務(wù)順序操作共同構(gòu)成的長事務(wù)(如銀行交易系統(tǒng)的日終交易),可以由一系列操作完成整個事務(wù),但其缺點是有可能因整個事務(wù)太大而使不能完成,或者,由于偶然的意外而使事務(wù)重做所需的時間太長。較好的解決方法是,把整個事務(wù)分解成幾個較小的事務(wù),再由應(yīng)用程序控制整個系統(tǒng)的流程。這樣,如果其中某個事務(wù)不成功,則只需重做該事務(wù),因而既可節(jié)約時間,又可避免長事務(wù)。
7、適當(dāng)超前
計算機(jī)技術(shù)發(fā)展日新月異,數(shù)據(jù)庫的設(shè)計必須具有一定前瞻性,不但要滿足當(dāng)前的應(yīng)用要求,還要考慮未來的業(yè)務(wù)發(fā)展,同時必須有利于擴(kuò)展或增加應(yīng)用系統(tǒng)的處理功能。
與小型數(shù)據(jù)庫相比,大型數(shù)據(jù)庫的設(shè)計與開發(fā)要復(fù)雜得多,因此在設(shè)計、開發(fā)過程中,除了要遵循數(shù)據(jù)庫范式理論、增加系統(tǒng)的一致性和完整性外,還要在總體上根據(jù)具體情況進(jìn)行分布式設(shè)計,緊緊把握集中控制、統(tǒng)一審核的基本原則,保證數(shù)據(jù)庫設(shè)計結(jié)構(gòu)緊湊、分布平衡、定位迅速。在數(shù)據(jù)庫操作上,要采用一定的技巧提高整個應(yīng)用系統(tǒng)的執(zhí)行效率,并注意適當(dāng)超前,以適應(yīng)不斷變化的應(yīng)用及系統(tǒng)發(fā)展的要求。
評論