摘 要:常規(guī)的數(shù)據(jù)庫應(yīng)用受制于字段結(jié)構(gòu)的限制,雖然簡(jiǎn)化了處理流程,但處理效率比較低下,往往形成應(yīng)用的瓶頸。使用聯(lián)合字段對(duì)數(shù)據(jù)庫結(jié)構(gòu)進(jìn)行優(yōu)化,使原有的重復(fù)數(shù)據(jù)得以整合,結(jié)合SQL語言與單一類型存儲(chǔ),可以有效提升數(shù)據(jù)的檢索效率,快速產(chǎn)生初級(jí)可選集。對(duì)可選集的操作可以使用原有的數(shù)據(jù)庫系統(tǒng),也可以使用定制的數(shù)據(jù)庫,定制數(shù)據(jù)庫不但可以擺脫數(shù)據(jù)庫系統(tǒng)對(duì)開發(fā)過程的限制,而且在數(shù)據(jù)的處理與加解密方面更加主動(dòng)靈活,是小型數(shù)據(jù)庫應(yīng)用開發(fā)的一個(gè)趨勢(shì)。
關(guān)鍵詞:數(shù)據(jù)庫結(jié)構(gòu);聯(lián)合字段;優(yōu)化;檢索效率;定制數(shù)據(jù)庫
中圖分類號(hào):TP392 文獻(xiàn)標(biāo)識(shí)碼:A
Abstract:Conventional database application is restricted by the field structure,although simplified the processing flow,but the processing efficiency is low,often the bottleneck in the application.Using united fields to optimize the database structure.The original repeating data can be integrated,with the combination of SQL language and the single type of storage,can improve the efficiency of data retrieval,fast generation primary optional set.On the optional set operation can use the original database system,can also use the custom database.Customize database can not only get rid of the limitation of database system development process,but also more initiative and flexibility in the data processing and encryption and decryption,is a development trend in small database application.
Keywords:database structure;united fields;optimize retrieval efficiency;customize database
1 引言(Introduction)
近年來,隨著計(jì)算機(jī)硬件設(shè)備的不斷升級(jí),軟件處理能力顯著提高。然而,在數(shù)據(jù)庫處理方面,卻始終存在著一個(gè)瓶頸,那就是數(shù)據(jù)庫的字段結(jié)構(gòu)一直制約著數(shù)據(jù)的處理速度。目前數(shù)據(jù)庫的主要存儲(chǔ)方式是硬盤設(shè)備,而硬盤設(shè)備本身存在著處理速度的極限。在這種條件下,如何提高數(shù)據(jù)的檢索速度就成為一個(gè)迫切要解決的問題,尤其是在數(shù)據(jù)庫容量越來越大的情況下。
數(shù)據(jù)檢索的核心問題在于,如何在海量數(shù)據(jù)(硬盤存儲(chǔ))中檢索出符合條件的可選集,而不在于對(duì)于可選集的處理(內(nèi)存)上,因?yàn)閮?nèi)存的訪問速度對(duì)于數(shù)據(jù)檢索來說是足夠的。一旦從數(shù)據(jù)庫上獲得可選集,后繼的工作就可以轉(zhuǎn)移到內(nèi)存中工作,處理器的性能就可以得到充分發(fā)揮。因此,在提高數(shù)據(jù)檢索的速度方面,應(yīng)該在優(yōu)化數(shù)據(jù)庫結(jié)構(gòu),快速獲得可選集上面下工夫,其中包括:減少數(shù)據(jù)庫字段與記錄的數(shù)量、簡(jiǎn)化數(shù)據(jù)類型、減少數(shù)據(jù)冗余等方面[1]。
2 數(shù)據(jù)庫結(jié)構(gòu)的優(yōu)化(Optimization of database structure)
常規(guī)的數(shù)據(jù)庫字段是根據(jù)數(shù)據(jù)的內(nèi)容屬性來定義的,用戶對(duì)數(shù)據(jù)的操作界面與數(shù)據(jù)庫結(jié)構(gòu)保持一致,以簡(jiǎn)單的人員信息管理為例,數(shù)據(jù)庫結(jié)構(gòu)如表1所示。
這是一種通用的途徑,也是數(shù)據(jù)庫廠商建議使用的方法,因?yàn)檫@樣可以直接使用數(shù)據(jù)庫訪問的預(yù)定義功能,包括用戶操作界面,同時(shí)簡(jiǎn)化數(shù)據(jù)庫應(yīng)用程序的開發(fā)工作,把程序開發(fā)人員和操作人員與核心數(shù)據(jù)庫隔離開來,充分保證數(shù)據(jù)的安全性[2]。但是,這種使用方法也制約了數(shù)據(jù)庫開發(fā)人員的視野,尤其在大型數(shù)據(jù)庫的應(yīng)用開發(fā)過程中,在數(shù)據(jù)檢索的效率方面顯得無所作為,或者在具體應(yīng)用出現(xiàn)瓶頸時(shí)推卸責(zé)任。
因此,在數(shù)據(jù)庫開發(fā)的規(guī)劃方面,不一定嚴(yán)格遵循數(shù)據(jù)庫廠商建議的方式,可以根據(jù)不同的應(yīng)用場(chǎng)合和數(shù)據(jù)類型,建立靈活的數(shù)據(jù)結(jié)構(gòu),從而提高數(shù)據(jù)檢索的效率[3,4]。
這里給出的一種方案,是在數(shù)據(jù)庫結(jié)構(gòu)方面進(jìn)行的一個(gè)大膽的嘗試,對(duì)于數(shù)據(jù)類型單一、數(shù)據(jù)容量較大的應(yīng)用場(chǎng)合較為適用。它不按數(shù)據(jù)的內(nèi)容屬性來定義具體的字段,而是采取“聯(lián)合字段”的結(jié)構(gòu),將原來多個(gè)單一的字段組合成一個(gè)聯(lián)合字段,從而簡(jiǎn)化了數(shù)據(jù)庫的結(jié)構(gòu),大大提高了可選集的產(chǎn)生過程可數(shù)據(jù)檢索的效率。
表1中的人員信息數(shù)據(jù)庫,變換為組成聯(lián)合字段以后,結(jié)構(gòu)簡(jiǎn)化如表2所示。
從表2可以看出,原來數(shù)據(jù)庫中的一張表,現(xiàn)在被簡(jiǎn)化成了一條記錄。通過這種變換,甚至可以把整個(gè)數(shù)據(jù)庫都整合在一個(gè)字段中,將針對(duì)數(shù)據(jù)庫的操作轉(zhuǎn)換為針對(duì)少量字符串的操作,大大簡(jiǎn)化數(shù)據(jù)的操作過程,提高數(shù)據(jù)的檢索效率。
在這種方案中,當(dāng)可選集產(chǎn)生以后,不再使用數(shù)據(jù)庫系統(tǒng)提供的缺省操作界面,而由數(shù)據(jù)庫應(yīng)用程序開發(fā)人員編制特定的操作界面,當(dāng)然,從外觀上,可以借鑒操作人員已經(jīng)習(xí)慣的系統(tǒng)界面,甚至與系統(tǒng)界面保持一致,但下面的代碼完全由開發(fā)人員自己來完成。這樣的開發(fā)工作并不復(fù)雜,不管在哪種平臺(tái)上,都不會(huì)給開發(fā)人員增加太多的額外工作量。而且,程序使用效率的大幅提高,也會(huì)很快將額外的開發(fā)工作量彌補(bǔ)掉。
聯(lián)合字段的數(shù)據(jù)工作過程如圖1所示。
雖然在界面上可以與數(shù)據(jù)庫系統(tǒng)保持一致,但數(shù)據(jù)庫接口與數(shù)據(jù)庫結(jié)構(gòu)對(duì)用戶來說是完全不透明的,從這個(gè)角度來看,不但沒有降低數(shù)據(jù)的安全性,而且在數(shù)據(jù)轉(zhuǎn)換與存儲(chǔ)的過程中,還可以采取靈活的手段進(jìn)行加解密,提高原有數(shù)據(jù)的安全性。由于變換后的數(shù)據(jù)對(duì)數(shù)據(jù)廠商也是不透明的,因此,就實(shí)現(xiàn)了數(shù)據(jù)的雙向安全性,這正是目前幾乎所有大型數(shù)據(jù)庫應(yīng)用系統(tǒng)一直面臨的困惑。
聯(lián)合字段實(shí)現(xiàn)雙向安全性,如圖2所示。
聯(lián)合字段的作用,是簡(jiǎn)化可選集的產(chǎn)生過程,提高可選集的檢索效率,因?yàn)獒槍?duì)硬盤存儲(chǔ)的數(shù)據(jù)庫檢索,也是以字段為最小單位進(jìn)行的,字段數(shù)量的縮減,以及字段類型的單一化,對(duì)于可選集檢索效率的貢獻(xiàn)是可想而知的。
3 數(shù)據(jù)的處理過程(Data processing procedure)
3.1 數(shù)據(jù)單元的概念
為了闡述方便,首先給出“數(shù)據(jù)單元”的概念,把按規(guī)律排列的格式整齊的重復(fù)性的一組數(shù)據(jù)稱為一個(gè)數(shù)據(jù)單元,在常規(guī)的數(shù)據(jù)庫中,數(shù)據(jù)單元也許是一條記錄,也許是一條記錄中的幾個(gè)字段[5]。例如在上面的人員信息數(shù)據(jù)庫中,每個(gè)人員的信息就可以作為一個(gè)數(shù)據(jù)單元,如:“001王勇男”,姓名在中間,左側(cè)是編號(hào)(占三個(gè)字符),右側(cè)是性別(占兩個(gè)字符),格式整齊,排列有規(guī)律。在這樣的一個(gè)數(shù)據(jù)單元中,編號(hào)數(shù)據(jù)可以從單元數(shù)據(jù)的左側(cè)選取,性別數(shù)據(jù)可以從單元的右側(cè)選取,中間剩下的就是姓名的數(shù)據(jù),這樣的選取方法,不要求位于單元中間的姓名數(shù)據(jù)為特定的長(zhǎng)度。
利用數(shù)據(jù)單元,可以對(duì)原有的字段進(jìn)行初步的整合,減少字段的數(shù)量,簡(jiǎn)化字段的類型,精簡(jiǎn)數(shù)據(jù)庫的原有結(jié)構(gòu)。這樣變換后,并不影響對(duì)原有數(shù)據(jù)庫的常規(guī)操作,因?yàn)橛脩艚缑媸歉鶕?jù)功能而重新開發(fā)的,不依賴于數(shù)據(jù)庫系統(tǒng),它所使用的是內(nèi)存中的數(shù)據(jù),已經(jīng)把磁盤中的存儲(chǔ)數(shù)據(jù)庫恢復(fù)為原有結(jié)構(gòu)的工作數(shù)據(jù)庫[6]。工作數(shù)據(jù)庫根據(jù)操作需要,只選取全部數(shù)據(jù)的一個(gè)子集,所以,對(duì)于處理速度與實(shí)時(shí)性的影響有限,這與系統(tǒng)數(shù)據(jù)庫的工作原理是一樣的,見圖1。只是在得到可選集的條件上,要進(jìn)行相應(yīng)的變換,由于數(shù)據(jù)單元并不復(fù)雜,而且是大量的重復(fù)性數(shù)據(jù),所以在原理上可以保證可選集的確定性。
如果數(shù)據(jù)單元的變換已經(jīng)能夠滿足應(yīng)用的需要,優(yōu)化過程就可以就此為止,有時(shí)候,為了簡(jiǎn)化開發(fā)工作,甚至可以將工作數(shù)據(jù)庫與存儲(chǔ)數(shù)據(jù)庫保持一致,這樣,應(yīng)用效率的提高,只體現(xiàn)在可選集的產(chǎn)生過程中,盡管如此,變換前后的效率差異還是顯而易見的。
3.2 數(shù)據(jù)整合
如果要進(jìn)一步提升系統(tǒng)的功能,可以在數(shù)據(jù)單元的基礎(chǔ)上,在兩個(gè)層面上繼續(xù)對(duì)數(shù)據(jù)進(jìn)行整合[7]。
第一個(gè)層面,對(duì)數(shù)據(jù)單元進(jìn)行整合。把多個(gè)數(shù)據(jù)單元連接在一起,進(jìn)行聯(lián)合操作。實(shí)現(xiàn)的方法是多種多樣的,比如,可以使用特定的分隔連接符,把單元數(shù)據(jù)連接起來,上面的人員信息數(shù)據(jù)庫,整合以后簡(jiǎn)化成一條記錄:
001王勇男-002李小萌女-003張虹男-…
上例中分隔符的選擇不能與數(shù)據(jù)庫中的任何數(shù)據(jù)重復(fù),當(dāng)數(shù)據(jù)庫的性質(zhì)與內(nèi)容確定后,找到合適的分隔符并不困難,它的作用只是單純地將數(shù)據(jù)單元分隔開來,并且在數(shù)據(jù)處理以雙向過程中作為定位符,實(shí)現(xiàn)工作數(shù)據(jù)庫與存儲(chǔ)數(shù)據(jù)庫之間的數(shù)據(jù)傳遞。
第二個(gè)層面,是對(duì)字段進(jìn)行聯(lián)合。這可以打破數(shù)據(jù)庫系統(tǒng)對(duì)字段容量的限制。數(shù)據(jù)單元整合后得到的數(shù)據(jù),具有單一的字符串類型,跨字段存儲(chǔ)只涉及到簡(jiǎn)單的分割問題,這是稍有編程經(jīng)驗(yàn)的開發(fā)人員都可以完成的工作。在數(shù)據(jù)處理的過程中,直接對(duì)多個(gè)字段進(jìn)行聯(lián)合操作,處理過程并不復(fù)雜,由自主開發(fā)的用戶接口程序完成這一工作,應(yīng)用人員不必關(guān)心其中的細(xì)節(jié)。
數(shù)據(jù)庫系統(tǒng)在進(jìn)行數(shù)據(jù)處理時(shí),往往以字符類型為主,如果數(shù)據(jù)庫中存在多種數(shù)據(jù)類型,在進(jìn)行數(shù)據(jù)處理時(shí)也會(huì)在內(nèi)部先轉(zhuǎn)換為字符類型,然后再進(jìn)行相應(yīng)的操作。對(duì)數(shù)據(jù)庫結(jié)構(gòu)進(jìn)行優(yōu)化后,聯(lián)合字段類型可以全部設(shè)置為字符串類型,這樣就簡(jiǎn)化了內(nèi)部的類型轉(zhuǎn)換,提高了處理效率,檢索速度也是最快的。
要注意的是,最好不要讓整合后的聯(lián)合數(shù)據(jù)超過操作系統(tǒng)平臺(tái)所允許的長(zhǎng)度,否則在開發(fā)時(shí)就要面臨來自操作系統(tǒng)的種種限制,會(huì)影響到用戶程序開發(fā)的效率。
3.3 整合數(shù)據(jù)的處理
對(duì)整合數(shù)據(jù)進(jìn)行處理,主要是在工作數(shù)據(jù)庫與存儲(chǔ)數(shù)據(jù)庫之間建立起聯(lián)系的通道,數(shù)據(jù)檢索時(shí),根據(jù)指定的條件,首先從存儲(chǔ)數(shù)據(jù)庫產(chǎn)生可選集,并以此為基礎(chǔ)建立工作數(shù)據(jù)庫,其后的大部分操作都是面向工作數(shù)據(jù)庫的,在內(nèi)存中完成,只有在操作結(jié)束后,或者數(shù)據(jù)出現(xiàn)變動(dòng)的情況下,才與存儲(chǔ)數(shù)據(jù)庫進(jìn)行數(shù)據(jù)交換[8]。
例如,在人員信息數(shù)據(jù)庫中,按姓名查找某個(gè)人員,直接輸入查詢條件,將優(yōu)化后的聯(lián)合字段作為操作對(duì)象即可。如果有多個(gè)查詢條件,比如姓名與性別,可以先對(duì)條件進(jìn)行組合,把“姓名+性別”特征串作為查詢條件,然后在存儲(chǔ)數(shù)據(jù)庫中進(jìn)行檢索。
由于存儲(chǔ)數(shù)據(jù)庫中的字段已經(jīng)被優(yōu)化,字段數(shù)量減少、存儲(chǔ)類型單一,因此,從存儲(chǔ)數(shù)據(jù)庫中檢索出可選集的效率得到大幅度提高。
3.4 注意事項(xiàng)
(1)使用SQL查詢語言
在可選集的產(chǎn)生過程中,應(yīng)該充分利用數(shù)據(jù)系統(tǒng)的技術(shù)支持,比如SQL查詢技術(shù)及數(shù)據(jù)庫索引等技術(shù)。即使數(shù)據(jù)庫結(jié)構(gòu)保持不變,使用SQL查詢語言,也可以成倍提高檢索的效率。在具體的檢索過程中,數(shù)據(jù)庫系統(tǒng)會(huì)自動(dòng)建立索引文件,進(jìn)一步提升數(shù)據(jù)檢索的速度。經(jīng)初步測(cè)算,使用SQL查詢語言比不使用在速度上可以提高幾十倍。
(2)用戶界面與工作數(shù)據(jù)庫
由于數(shù)據(jù)庫系統(tǒng)對(duì)用戶來說是不透明的,所以,應(yīng)該在數(shù)據(jù)庫應(yīng)用層面上建立特定的用戶接口程序,上面已經(jīng)提到,這部分工作是傳統(tǒng)的數(shù)據(jù)庫開發(fā)工作之外的額外工作,主要完成可選集的建立工作,與優(yōu)化后的數(shù)據(jù)庫結(jié)構(gòu)相匹配。此類的開發(fā)工作并不復(fù)雜,主要內(nèi)容是進(jìn)行大量的字符串變換。用戶接口程序是雙向工作的,在工作數(shù)據(jù)庫與存儲(chǔ)數(shù)據(jù)庫之間傳遞用戶的數(shù)據(jù)。應(yīng)用系統(tǒng)對(duì)數(shù)據(jù)操作完成以后,用戶界面負(fù)責(zé)臨時(shí)數(shù)據(jù)庫中的內(nèi)容交換到存儲(chǔ)數(shù)據(jù)庫中,這個(gè)過程只在數(shù)據(jù)存在變換時(shí)進(jìn)行。在用戶操作的過程中,使用的數(shù)據(jù)庫是臨時(shí)的工作數(shù)據(jù)庫,可以建立在原有數(shù)據(jù)庫系統(tǒng)的基礎(chǔ)上,使用臨時(shí)數(shù)據(jù)庫或者數(shù)據(jù)快照,把整合的數(shù)據(jù)重新恢復(fù)成內(nèi)容屬性的字段,這是與存儲(chǔ)數(shù)據(jù)庫無關(guān)的過程,只不過針對(duì)的是內(nèi)存中的臨時(shí)數(shù)據(jù)庫。因此,如果只是使用現(xiàn)有的數(shù)據(jù),而不進(jìn)行數(shù)據(jù)的改動(dòng),這部分操作界面的實(shí)現(xiàn)相對(duì)簡(jiǎn)單[9]。
4 使用定制數(shù)據(jù)庫(Using custom database)
如果數(shù)據(jù)規(guī)模不大,但對(duì)安全性要求較高,可以徹底擺脫數(shù)據(jù)庫系統(tǒng)的限制,采取用戶定制的數(shù)據(jù)庫,從底層上直接對(duì)數(shù)據(jù)進(jìn)行操作,同時(shí)便于數(shù)據(jù)的加解密。目前這類系統(tǒng)在國內(nèi)的應(yīng)用不多,也沒有引起大多數(shù)應(yīng)用人員的重視。近年來,隨著網(wǎng)絡(luò)安全形勢(shì)的日益惡化,對(duì)于涉及國家重大利益的數(shù)據(jù)操作,安全性已經(jīng)成為系統(tǒng)開發(fā)的首要目標(biāo)。因此,使用定制數(shù)據(jù)庫與密文存儲(chǔ)的技術(shù),將是未來一段時(shí)間內(nèi)數(shù)據(jù)庫應(yīng)用開發(fā)的重要方向。
定制數(shù)據(jù)庫的工作過程如圖3所示。
4.1 存儲(chǔ)形式
定制數(shù)據(jù)庫,可以用磁盤文件的形式直接存儲(chǔ)在物理介質(zhì)上。如果數(shù)據(jù)量不大,可以將多張數(shù)據(jù)表格放在一個(gè)文件中,以簡(jiǎn)化存儲(chǔ)結(jié)構(gòu)。如果數(shù)據(jù)量較大,可以將數(shù)據(jù)表格單獨(dú)存儲(chǔ),以提高數(shù)據(jù)處理的速度。
文件的格式可以采用BINARY或者ASCII編碼的形式,使用開發(fā)平臺(tái)下的文件存取指令進(jìn)行操作。在文件的頭部或尾部,添加指定的數(shù)據(jù)表及數(shù)據(jù)塊的索引信息,用以標(biāo)明文件的數(shù)據(jù)屬性。
在數(shù)據(jù)的組織上,仍然延用聯(lián)合字段的思想,只不過不再借用數(shù)據(jù)庫系統(tǒng)的字段結(jié)構(gòu),直接與磁盤文件進(jìn)行數(shù)據(jù)交換。這樣就省去了數(shù)據(jù)的間接操作過程,在底層上控制數(shù)據(jù)的存儲(chǔ),增加了數(shù)據(jù)存儲(chǔ)與處理的靈活性,提高了系統(tǒng)的工作效率。
在此類應(yīng)用中,要求開發(fā)人員對(duì)數(shù)據(jù)庫系統(tǒng)的結(jié)構(gòu)有大致的了解,除了常規(guī)的文件操作外,還應(yīng)考慮大量的容災(zāi)與安分方面的性能。由于對(duì)磁盤文件的操作只包括存儲(chǔ)與產(chǎn)生可選集兩個(gè)方面,類似的開發(fā)過程肯定比專業(yè)的數(shù)據(jù)庫系統(tǒng)簡(jiǎn)化,否則就失去了定制開發(fā)的意義。
4.2 數(shù)據(jù)處理的過程
由于底層數(shù)據(jù)不再依賴數(shù)據(jù)庫系統(tǒng)的支持,在可選集產(chǎn)生之后,工作數(shù)據(jù)庫也沒有必要再使用數(shù)據(jù)庫系統(tǒng)提供的處理功能,而轉(zhuǎn)由常規(guī)的數(shù)據(jù)結(jié)構(gòu)來實(shí)現(xiàn),比如使用動(dòng)態(tài)數(shù)組或容器等結(jié)構(gòu)。
這樣,在用戶界面的開發(fā)方面,就具有了更大的空間和靈活性,打包后的應(yīng)用系統(tǒng)也更加精簡(jiǎn),便于移植與發(fā)行,拓寬了應(yīng)用系統(tǒng)的應(yīng)用領(lǐng)域,特別是對(duì)于一些安全性要求較高的場(chǎng)合較為適用。
在具體數(shù)據(jù)的處理過程中,仍然可以使用前面介紹的方法,只是在用戶界面的修飾方面,要下一定的功夫,達(dá)到與專業(yè)數(shù)據(jù)庫系統(tǒng)同樣的水平,這方面的開發(fā)工作不影響具體的數(shù)據(jù)應(yīng)用,只是照顧用戶的原有操作習(xí)慣。
4.3 加解密過程
定制的本地?cái)?shù)據(jù)庫,只對(duì)存儲(chǔ)環(huán)節(jié)進(jìn)行加解密,正常的使用過程,只有數(shù)據(jù)變動(dòng)時(shí)才需要與存儲(chǔ)數(shù)據(jù)庫進(jìn)行數(shù)據(jù)交換,大部分操作都是針對(duì)內(nèi)存中的工作(臨時(shí))數(shù)據(jù)庫進(jìn)行的。此類數(shù)據(jù)加解密過程如圖4所示。
定制的網(wǎng)絡(luò)數(shù)據(jù)庫,可以通過直接調(diào)用底層的網(wǎng)絡(luò)傳輸協(xié)議進(jìn)行訪問,數(shù)據(jù)加解密的過程在全部在客戶端實(shí)現(xiàn),經(jīng)過網(wǎng)絡(luò)傳輸?shù)臄?shù)據(jù)都是加密后的密文,這樣就有效確保了數(shù)據(jù)傳輸過程的安全性,也不必考慮眾多的網(wǎng)絡(luò)安全設(shè)備(如網(wǎng)絡(luò)防火墻、網(wǎng)絡(luò)安全網(wǎng)關(guān)等)的影響。
定制的網(wǎng)絡(luò)數(shù)據(jù)庫的加解密過程如圖5所示。
4.4 定制數(shù)據(jù)庫的開發(fā)環(huán)境
定制的數(shù)據(jù)庫不依賴于商業(yè)化的數(shù)據(jù)庫系統(tǒng),直接對(duì)磁盤文件進(jìn)行讀寫。因此,在開發(fā)環(huán)境的選擇方面更加自由,包括普通的桌面系統(tǒng)、網(wǎng)絡(luò)化的C/S、B/S系統(tǒng)、移動(dòng)(手機(jī)、平板)平臺(tái)等,都可以完成有效的開發(fā)工作。
而且,當(dāng)基本的應(yīng)用流程固定以后,可以在不同的平臺(tái)之間實(shí)現(xiàn)快速移植。一個(gè)平臺(tái)上開發(fā)完成的代碼,只需改動(dòng)少量的外圍代碼,就可以應(yīng)用到另一個(gè)平臺(tái)上。這樣,就徹底擺脫了平臺(tái)軟件與數(shù)據(jù)庫系統(tǒng)對(duì)用戶程序的開發(fā)限制,也減少了龐大的軟件與系統(tǒng)資源開銷,使開發(fā)工作變得更加簡(jiǎn)單靈活。
IT產(chǎn)業(yè)發(fā)展到現(xiàn)階段,硬件的性能得到了很大的提升,原來依靠專業(yè)數(shù)據(jù)庫來支持的大型數(shù)據(jù)庫應(yīng)用系統(tǒng),現(xiàn)在如果轉(zhuǎn)而使用定制的數(shù)據(jù)庫,可以將其部署在普通的硬件環(huán)境之上,幾百萬上千萬條的數(shù)據(jù)容量,可以輕而易舉地在新平臺(tái)上流暢運(yùn)行。
在移動(dòng)終端平臺(tái)上,使用定制的數(shù)據(jù)庫,能夠大大減少數(shù)據(jù)庫系統(tǒng)占用的開銷,轉(zhuǎn)而支持新的應(yīng)用項(xiàng)目,使有效的硬件資源得到充分合理的運(yùn)用。
5 應(yīng)用實(shí)例 (Application examples)
以上技術(shù)最初應(yīng)用于《列車時(shí)刻表查詢軟件V4.0》(軟著登字第0002941號(hào))中,經(jīng)實(shí)際檢測(cè),使用聯(lián)合字段對(duì)數(shù)據(jù)庫結(jié)構(gòu)進(jìn)行優(yōu)化以后,數(shù)據(jù)檢索的效率比優(yōu)化之前提高了70多倍,較好地解決了數(shù)據(jù)檢索速度的瓶頸。下面簡(jiǎn)要介紹應(yīng)用的過程。
(1)問題分析
交通信息的數(shù)據(jù)具有統(tǒng)一的規(guī)律,就是除了少數(shù)的數(shù)據(jù)以外,大部分?jǐn)?shù)據(jù)都是重復(fù)性的信息,如到達(dá)某個(gè)站點(diǎn)的進(jìn)出站時(shí)間與站名等信息。這種數(shù)據(jù)的特點(diǎn),比較適合采用聯(lián)合字段的優(yōu)化方法。
如果按著常規(guī)的定義方法,每個(gè)班次的數(shù)據(jù)定義成一張獨(dú)立的表格,如果實(shí)現(xiàn)區(qū)域聯(lián)網(wǎng),數(shù)據(jù)量將是驚人的。當(dāng)對(duì)聯(lián)網(wǎng)后的數(shù)據(jù)庫進(jìn)行模糊檢索時(shí),檢索效率低下的問題表現(xiàn)得十分明顯。因此,采用技術(shù)手段對(duì)數(shù)據(jù)庫結(jié)構(gòu)進(jìn)行優(yōu)化,是解決問題的一個(gè)途徑。正是基于這樣的思路,嘗試將聯(lián)合字段技術(shù)應(yīng)用在大范圍交通信息數(shù)據(jù)庫系統(tǒng)的開發(fā)過程中,將每個(gè)班次的交通信息簡(jiǎn)化成單條記錄,所有區(qū)域聯(lián)網(wǎng)的班次都納入一張數(shù)據(jù)表格中,大大簡(jiǎn)化了數(shù)據(jù)存儲(chǔ)與處理的效率,較好地解決了同類系統(tǒng)開發(fā)過程中長(zhǎng)期存在的癥結(jié)。
(2)數(shù)據(jù)單元
將中途站點(diǎn)的數(shù)據(jù)制作成數(shù)據(jù)單元,形式為:進(jìn)站時(shí)間+站點(diǎn)名稱+出站時(shí)間,進(jìn)出站時(shí)間的字符長(zhǎng)度直接固定為5,如12:48,因此,數(shù)據(jù)單元的首尾長(zhǎng)度都是確定的,只有中間的站點(diǎn)名稱是不確定的。始發(fā)站點(diǎn)與終到站點(diǎn)的數(shù)據(jù)不用特殊處理,直接按上述規(guī)則放入數(shù)據(jù)中即可。
(3)數(shù)據(jù)編輯
數(shù)據(jù)單元之間使用常規(guī)數(shù)據(jù)中不會(huì)出現(xiàn)的特殊字符進(jìn)行連接,如“-”字符,一個(gè)班次的數(shù)據(jù)按著字符形式存儲(chǔ)在一條記錄中。數(shù)據(jù)處理時(shí),通過檢索條件在存儲(chǔ)庫中產(chǎn)生初級(jí)可選集,然后對(duì)可選集進(jìn)行具體的操作。
可選集的產(chǎn)生,可以使用數(shù)據(jù)庫系統(tǒng)提供的功能,組合SQL查詢條件。在可選集中,根據(jù)連接字符將記錄中的數(shù)據(jù)單元分離出來。每個(gè)數(shù)據(jù)單元,先分離出首尾的時(shí)間數(shù)據(jù),中間余下的就是站點(diǎn)名稱數(shù)據(jù),并依此建立臨時(shí)工作數(shù)據(jù)庫,與用戶接口程序進(jìn)行交互。數(shù)據(jù)變動(dòng)后,將數(shù)據(jù)進(jìn)行逆向處理,最終完成存儲(chǔ)數(shù)據(jù)庫的更新過程。
(4)實(shí)例:區(qū)間模糊檢索
這是最常規(guī)的應(yīng)用,只設(shè)定兩個(gè)站點(diǎn)的名稱,即可以檢索出區(qū)間內(nèi)的所有班次。檢索條件可以組合為:記錄中“前面包含‘出發(fā)站點(diǎn)名稱并且后面包含‘到達(dá)站點(diǎn)名稱”的可選集”。
(5)實(shí)例:生成站點(diǎn)的班次時(shí)刻表
時(shí)刻表是動(dòng)態(tài)生成與顯示的,可以直接上物理的大屏系統(tǒng),為所有站點(diǎn)的出行人員提供信息服務(wù)。檢索條件可以組合為:記錄中“包含‘站點(diǎn)名稱”的可選集。在可選集中,根據(jù)進(jìn)出站時(shí)間的特點(diǎn),可以將班次的屬性區(qū)分開來,如始發(fā)、途經(jīng)與終到等班次。
6 結(jié)論(Conclusion)
通過對(duì)數(shù)據(jù)庫結(jié)構(gòu)的優(yōu)化與定制,使數(shù)據(jù)類型單一化,不但簡(jiǎn)化了存儲(chǔ)形式,而且可以快速實(shí)現(xiàn)數(shù)據(jù)的加解密過程,加解密運(yùn)算全部在客戶端實(shí)現(xiàn),充分發(fā)揮了本地處理器的處理能力,不影響網(wǎng)絡(luò)數(shù)據(jù)的訪問速度。
可見,數(shù)據(jù)結(jié)構(gòu)優(yōu)化后,簡(jiǎn)化了數(shù)據(jù)結(jié)構(gòu),有效提高了數(shù)據(jù)的處理效率與安全性,節(jié)省了存儲(chǔ)空間,方便了數(shù)據(jù)的跨平臺(tái)移植,是小型數(shù)據(jù)庫應(yīng)用系統(tǒng)開發(fā)的一種新思路,特別適合于以大量重復(fù)數(shù)據(jù)為主體的數(shù)據(jù)庫應(yīng)用場(chǎng)合。
參考文獻(xiàn)(References)
[1] 李宏偉.地名本體數(shù)據(jù)庫存儲(chǔ)模式及應(yīng)用研究[J].計(jì)算機(jī)應(yīng)用與軟件,2012,29(4):35-38;74.
[2] 陳正舉.基于HIBERNATE的數(shù)據(jù)庫訪問優(yōu)化[J].計(jì)算機(jī)應(yīng)用與軟件,2012,29(7):144-149.
[3] 林灃.分布式數(shù)據(jù)庫中空間拓?fù)溥B接查詢優(yōu)化處理方法研究[J].計(jì)算機(jī)應(yīng)用與軟件,2013,30(11):247-250;282.
[4] 房俊華.DB-Tree:一種高性能的閃存數(shù)據(jù)庫索引結(jié)構(gòu)[J].計(jì)算機(jī)應(yīng)用與軟件,2013,30(11):243-246.
[5] 陳芬.改進(jìn)量子粒子群算法優(yōu)化神經(jīng)網(wǎng)絡(luò)的數(shù)據(jù)庫重復(fù)記錄檢測(cè)[J].計(jì)算機(jī)應(yīng)用與軟件,2014,31(3):20-21;115.
[6] 林桂亞.基于粒子群算法的數(shù)據(jù)庫查詢優(yōu)化[J].計(jì)算機(jī)應(yīng)用研究,2012,29(3):947-949.
[7] 王兵.數(shù)據(jù)庫應(yīng)用系統(tǒng)邏輯結(jié)構(gòu)設(shè)計(jì)初探[J].現(xiàn)代計(jì)算機(jī),2012,(5):14-17.
[8] 趙榮.分布式數(shù)據(jù)庫查詢優(yōu)化方法[J].科技視界,2013(5):120-121.
[9] 曹永峰.一種新的查詢優(yōu)化方法[J].計(jì)算機(jī)與現(xiàn)代化,2005(7):64-69.
作者簡(jiǎn)介:劉東明(1966-),男,碩士,副教授.研究領(lǐng)域:數(shù)據(jù)庫,數(shù)字媒體技術(shù).