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