朱東
摘要:隨著互聯(lián)網(wǎng)技術(shù)的高速發(fā)展,海量數(shù)據(jù)庫(kù)的設(shè)計(jì)成為大型軟件系統(tǒng)不得不面對(duì)的棘手難題。在一個(gè)每天數(shù)千萬(wàn)甚至數(shù)億條數(shù)據(jù)量的軟件系統(tǒng)中,海量的數(shù)據(jù)對(duì)于系統(tǒng)的平穩(wěn)運(yùn)行造成了非常大的問題。
關(guān)鍵詞:海量數(shù)據(jù);設(shè)計(jì);優(yōu)化
中圖分類號(hào):TP311 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1009-3044(2016)28-0024-01
數(shù)據(jù)庫(kù)技術(shù)是信息技術(shù)的基礎(chǔ)和核心,隨著各種應(yīng)用的數(shù)據(jù)量飛速增長(zhǎng),海量數(shù)據(jù)不斷產(chǎn)生,在對(duì)穩(wěn)定性,實(shí)時(shí)性要求高的系統(tǒng)中,良好的數(shù)據(jù)庫(kù)設(shè)計(jì)變得非常迫切。
1 數(shù)據(jù)庫(kù)設(shè)計(jì)
在軟件系統(tǒng)處于開發(fā)階段,往往對(duì)系統(tǒng)功能的實(shí)現(xiàn)關(guān)心較多,而對(duì)系統(tǒng)的性能關(guān)心較少,等系統(tǒng)上線運(yùn)行后發(fā)現(xiàn)系統(tǒng)的性能在不斷降低,這時(shí)候再去考慮系統(tǒng)的完善,則需要花費(fèi)更多的時(shí)間和財(cái)力。因此我們?cè)诜治鰪?fù)雜的軟件系統(tǒng)需求時(shí),需要確保即使發(fā)生高并發(fā)的存取情況,系統(tǒng)也不能癱瘓,而要能夠保持平穩(wěn)的運(yùn)行。
在設(shè)計(jì)數(shù)據(jù)庫(kù)的時(shí)候,必須確保數(shù)據(jù)庫(kù)的一致性和完整性,確認(rèn)數(shù)據(jù)表之間的相互關(guān)系,存儲(chǔ)空間畢竟是有限的,還要盡可能地降低數(shù)據(jù)的冗余。數(shù)據(jù)的冗余度越低、,系統(tǒng)的完整性越容易得到保證,反過來(lái),數(shù)據(jù)的完整性越好,也更能清楚地表達(dá)數(shù)據(jù)元素之間的相互關(guān)系。在大型系統(tǒng)中,經(jīng)常需要對(duì)于多個(gè)數(shù)據(jù)表進(jìn)行的連接查詢,關(guān)聯(lián)的數(shù)據(jù)表越多,其查詢的效率必然會(huì)降低,同時(shí)應(yīng)用程序的編程復(fù)雜度也相應(yīng)增加,因此,數(shù)據(jù)庫(kù)設(shè)計(jì)需要均衡考慮。根據(jù)系統(tǒng)業(yè)務(wù)邏輯,確定關(guān)聯(lián)數(shù)據(jù)表的數(shù)據(jù)量大小、字段被訪問頻率,如果某些字段被訪問的頻率非常高,可以對(duì)這些常用的數(shù)據(jù)表適當(dāng)提高冗余設(shè)計(jì),雖然提高冗余度可能會(huì)增加軟件系統(tǒng)編程的復(fù)雜性,但可以極大提高系統(tǒng)的響應(yīng)時(shí)間,用戶體驗(yàn)會(huì)變得更好,所以合理的數(shù)據(jù)冗余也是很有必要的。
數(shù)據(jù)表在設(shè)計(jì)時(shí)應(yīng)注意以下問題:
1)通過分區(qū)視圖可以把一個(gè)數(shù)據(jù)庫(kù)中的一個(gè)大表按照一定的規(guī)則分布到不同的數(shù)據(jù)庫(kù)中,這樣可以減少服務(wù)器的壓力。但這種分區(qū)視圖在網(wǎng)絡(luò)狀況不好時(shí),效率比較差。
2)數(shù)據(jù)表中字段的數(shù)據(jù)類型能夠用數(shù)字類型也能用字符型時(shí),則盡量選擇數(shù)字類型,因?yàn)閿?shù)據(jù)庫(kù)管理系統(tǒng)在執(zhí)行查詢時(shí)會(huì)依次比較字符串中所有字符,所花時(shí)間比較長(zhǎng),而對(duì)于數(shù)字型的字段,只需要一次比較就可以了,效率高。
3)對(duì)于定長(zhǎng)字符型和變字符型,定長(zhǎng)字符型類型查詢效率高,速度快,但是所占存儲(chǔ)空間比較大,而變長(zhǎng)字符型在查詢時(shí)速度可能會(huì)慢一點(diǎn),但是可以節(jié)省存儲(chǔ)空間。因此需要靈活選擇字段的數(shù)據(jù)類型,對(duì)于存儲(chǔ)的數(shù)據(jù)長(zhǎng)度有特定規(guī)則的,每次存儲(chǔ)數(shù)據(jù)量變化不大的字段可以選擇定長(zhǎng)字符型,長(zhǎng)度變化大的字段可以選擇變長(zhǎng)字符型。
4)字段的長(zhǎng)度在在滿足條件的情況下,最好短一些,這樣可以提高查詢的效率,同時(shí)在此字段上建立索引的時(shí)候也可以減少資源的消耗。
2 數(shù)據(jù)庫(kù)優(yōu)化
1)有時(shí)候?yàn)榱酥鹦刑幚頂?shù)據(jù),需要定義游標(biāo),但在使用游標(biāo)時(shí)要慎重,因?yàn)橛螛?biāo)的執(zhí)行效率比較差,如果游標(biāo)操作的數(shù)據(jù)非常多,比如超過萬(wàn)行,那么最好考慮其他方式。游標(biāo)雖然提供了對(duì)特定數(shù)據(jù)集合進(jìn)行逐行掃描的手段,但基于多個(gè)表和大數(shù)據(jù)表定義的游標(biāo),往往會(huì)使系統(tǒng)程序進(jìn)入一個(gè)較長(zhǎng)的等特過程,用戶體驗(yàn)不是很好,這個(gè)時(shí)候可將符合條件的數(shù)據(jù)行存入到臨時(shí)表中,然后再對(duì)臨時(shí)表定義游標(biāo),進(jìn)行相關(guān)操作,這樣可使系統(tǒng)的性能得到較大的提高。
2)索引是數(shù)據(jù)庫(kù)中非常重要的一個(gè)對(duì)象,使用索引可以提高數(shù)據(jù)表中數(shù)據(jù)的訪問速度,另外沒有索引的數(shù)據(jù)表是按堆結(jié)構(gòu)存儲(chǔ)數(shù)據(jù)的,后續(xù)增加的數(shù)據(jù)都將添加到數(shù)據(jù)表的后面,建立索引的數(shù)據(jù)表,表中數(shù)據(jù)在物理上會(huì)按照索引鍵的順序存儲(chǔ),大大提高數(shù)據(jù)的讀取速度。
3)數(shù)據(jù)隨著時(shí)間持續(xù)增長(zhǎng),然而有時(shí)候只有近期的數(shù)據(jù)才是最常用的。定期清除較早數(shù)據(jù)到歷史表中,將業(yè)務(wù)數(shù)據(jù)分級(jí)存儲(chǔ),一個(gè)較小規(guī)模的近期表是一種很好的提高查詢效率的方法。
3 結(jié)束語(yǔ)
隨著信息技術(shù)的快速發(fā)展,越來(lái)越多的軟件系統(tǒng)需要應(yīng)對(duì)海量的數(shù)據(jù),系統(tǒng)性能受到嚴(yán)重影響,在現(xiàn)有條件下,充分優(yōu)化數(shù)據(jù)庫(kù)的設(shè)計(jì),可以更好地發(fā)掘系統(tǒng)的潛力,提升軟件系統(tǒng)的性能。
參考文獻(xiàn):
[1] 毛杰,佘名高.海量數(shù)據(jù)庫(kù)查詢優(yōu)化研究[J].軟件導(dǎo)刊,2010(5).
[2] 李蘭,劉洋,邵明文.客戶海量興趣數(shù)據(jù)分類的推薦系統(tǒng)優(yōu)化與仿真[J].計(jì)算機(jī)仿真, 2014,31(9):449-453.