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