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