王 輝,李晉光
(1.西安工業(yè)大學 計算機科學與工程學院,陜西 西安 710032;2.陜西汽車集團有限責任公司 陜西 西安 710200)
為了能夠更好地錄入、查詢、發(fā)布更新和管理德龍、奧龍、德御各種不同系列車型及其所包含配件的詳細數(shù)據(jù)信息和圖像信息,滿足當前和未來汽車配件信息持續(xù)增加的需求,設計開發(fā)和實現(xiàn)基于BLOB的圖像查詢系統(tǒng)。圖像數(shù)據(jù)庫技術一直致力于解決海量數(shù)字圖像的有效存儲和管理問題,是數(shù)據(jù)庫技術的繼承和發(fā)展[1]。本文就是以關系數(shù)據(jù)庫理論為基礎,采用擴充的關系數(shù)據(jù)庫模式并引入圖像數(shù)據(jù)庫的概念,使用多個小的圖像數(shù)據(jù)表和圖像數(shù)據(jù)索引表,除了傳統(tǒng)的關系數(shù)據(jù)庫的查詢功能外還具有對圖像的操作、查詢和相似檢索功能,解決了圖像數(shù)據(jù)的錄入檢索以及圖像熱點操作問題,既保證系統(tǒng)的安全性和數(shù)據(jù)的完整性,也滿足了系統(tǒng)的速度和效率,是進行圖像數(shù)據(jù)在數(shù)據(jù)庫系統(tǒng)中處理與使用的有效方法。
基于BLOB的圖像查詢系統(tǒng)以Oracle數(shù)據(jù)庫管理系統(tǒng)為基礎并結(jié)合PowerBuilder開發(fā)工具,實現(xiàn)對德龍、奧龍、德御等不同車型所包含配件的數(shù)據(jù)管理及圖像處理,系統(tǒng)特點如下:
1)安全性:系統(tǒng)設置不同的權(quán)限,不同級別的用戶權(quán)限不同,防止未經(jīng)允許的用戶訪問系統(tǒng),保證系統(tǒng)具有較高的安全性[2];
2)穩(wěn)定性:為了確保系統(tǒng)能長期穩(wěn)定運行,系統(tǒng)能隨時進行數(shù)據(jù)備份,保證數(shù)據(jù)的完整,確保管理系統(tǒng)能夠安全穩(wěn)定運行;
3)可擴展性:系統(tǒng)具有語言設置功能,開發(fā)初期制作出不同系列車型的汽車零配件中英文對照系統(tǒng)、并預留多種語言接口,使用戶能夠方便快捷地查詢各種零配件的不同語言的名稱,具有良好的擴展性。
根據(jù)基本業(yè)務流程,基于BLOB的圖像查詢系統(tǒng)將系統(tǒng)數(shù)據(jù)按照系列車型、零部件的關系逐步細化,定義出不同車型下的零件和車型之間的從屬關系,錄入不同系列車型的概要信息以及所包含零部件的圖號、圖像、零件號、價格等明細數(shù)據(jù),總結(jié)成對應零配件圖像信息和熱點位置,供用戶查詢。系統(tǒng)功能模塊如圖1所示。
基于BLOB的圖像查詢系統(tǒng)具有樹狀查詢功能,用戶可根據(jù)系列車型、零件的樹狀結(jié)構(gòu)關系,分類查詢出相關零件類型,按零部件名稱、圖號、名稱拼音碼等數(shù)據(jù)自由組合查詢出相關零件的詳細數(shù)據(jù)信息和圖像信息。為了能夠直觀地看出零件信息,系統(tǒng)具有圖像查詢及熱點操作功能,通過點擊零部件圖中的熱點位置,可直觀、快速地顯示零件詳細信息以及應用車型信息,使查詢工作更為高效,因此如何錄入、查詢圖像以及圖像的熱點處理是本文論述的一個關鍵問題。
圖1 系統(tǒng)功能模塊圖Fig.1 Diagram of system function module
在利用Oracle進行數(shù)據(jù)庫系統(tǒng)的開發(fā)過程中,對于海量圖像數(shù)據(jù)的管理可采用圖像文件庫結(jié)構(gòu),即表+實體的方法。圖像數(shù)據(jù)以文件形式存放于指定的計算機目錄下,在數(shù)據(jù)庫表中建立文字信息的主關鍵字和圖像數(shù)據(jù)文件的存儲路徑。在此基礎上,在圖像數(shù)據(jù)輸入模塊中,除輸入存放圖像文件之外,還應填數(shù)據(jù)庫表對應項,建立文字信息和圖像信息之間的關聯(lián)。在信息查詢模塊中,通過數(shù)據(jù)表查到需要的文字信息后,根據(jù)查詢到的主關鍵字作為相應的圖像文件顯示。
在這種管理模式下,因為大量圖像文件存放在一個子目錄下,容易造成磁盤空間的浪費,并帶來大量的磁盤碎片,導致系統(tǒng)存取效率降低、性能下降,直接影響圖像的存取和顯示速度。另外,該方式的最大缺陷是難以保證整個數(shù)據(jù)庫管理系統(tǒng)中數(shù)據(jù)的完整和安全。普通的文件系統(tǒng)在安全方面沒有任何措施給予保障,任何一個進入計算機系統(tǒng)的人都可以對文件進行移位、刪除、修改等操作,系統(tǒng)在運行中就會出現(xiàn)因找不到相應的圖像文件而出現(xiàn)錯誤或無圖像問題[3]。
因此由于圖像文件庫結(jié)構(gòu)中圖像數(shù)據(jù)與數(shù)據(jù)庫系統(tǒng)的脫離這一本質(zhì)缺點,導致圖像文件庫的安全性與完整性方面無法保證,給數(shù)據(jù)的維護增加了難度,同時也給數(shù)據(jù)的安全帶來隱患,要真正做到各類圖像數(shù)據(jù)在數(shù)據(jù)庫中安全管理,只有用數(shù)據(jù)庫系統(tǒng)來處理圖像數(shù)據(jù)才能從根本上克服以上問題。隨著數(shù)據(jù)庫管理系統(tǒng)功能的不斷增強、性能的不斷完善,將各類數(shù)據(jù)完全由數(shù)據(jù)庫管理系統(tǒng)統(tǒng)一存儲和管理,已成為技術發(fā)展的趨勢。只有這樣,數(shù)據(jù)庫管理系統(tǒng)的強大功能才能得到充分發(fā)揮,數(shù)據(jù)的安全性才能得到充分的保障,使得諸如數(shù)據(jù)庫復制、數(shù)據(jù)的轉(zhuǎn)移等許多工作,變得非常簡單容易?;贐LOB的圖像查詢系統(tǒng)中零配件圖像的處理就采用了圖像數(shù)據(jù)庫的設計實現(xiàn)方法。
圖像數(shù)據(jù)庫技術一直致力于解決海量數(shù)字圖像的有效存儲和管理問題,是數(shù)據(jù)庫技術的繼承和發(fā)展,實質(zhì)上屬于擴充的關系數(shù)據(jù)庫,它采用的是一種支持大型非結(jié)構(gòu)化數(shù)據(jù)存儲與管理的方法——BLOB技術。這種方法旨在通過擴充的數(shù)據(jù)庫管理系統(tǒng)提供的統(tǒng)一的數(shù)據(jù)管理與存取機制,不僅能處理數(shù)值、文字等簡單的數(shù)據(jù)對象,而且能將其他復雜的數(shù)據(jù)對象作為一個數(shù)據(jù)庫操作的原子單元進行存儲、存取和恢復。
對BLOB數(shù)據(jù)的存取可以通過擴展的SQL語言來實現(xiàn),每個BLOB數(shù)據(jù)字段最大容量可達2 GB。實際上在一些數(shù)據(jù)庫系統(tǒng)中并不將其稱為BLOB字段,對應如Access中的OLE對象和備注類型、VFP中的MEMO類型、Oracle7中的 Long Raw 類型、Sybase中的 LONG VARCHAR、SQL Server中 的IMAGE等,但從廣義上講,它們都屬于BLOB類型[4]。因此,本文討論的BLOB技術完全可以應用于其他數(shù)據(jù)庫系統(tǒng)中。在Oracle數(shù)據(jù)庫中有以下幾種LOB型數(shù)據(jù):
乳腺脂肪壞死患者一般有乳腺外傷史,外傷導致乳房局部脂肪組織壞死、纖維組織增生、鈣化而形成小腫塊,有時不易與乳腺癌鑒別。
CLOB:和Oracle7的Long型相似,CLOB可以存儲單字節(jié)型數(shù)據(jù)。
NCLOB:NCLOB存儲定寬的多字節(jié)國家字符集數(shù)據(jù)。
BLOB:和Oracle7中的Long Raw類型相似??梢源鎯o結(jié)構(gòu)的二進制數(shù)據(jù)。Oracle8沒有對這種數(shù)據(jù)進行解釋,只是按照原來的形式存儲和檢索它。
BFILE:BFILE允許對Oracle數(shù)據(jù)庫以外存儲的大型二進制文件進行只讀形式的訪問。和其他3種LOB類型數(shù)據(jù)不同的是,BFILE類型數(shù)據(jù)存儲在一個單獨的文件中,該文件不由Oracle來維護。
在Oracle數(shù)據(jù)庫中,雖然BLOB數(shù)據(jù)類型支持圖像數(shù)據(jù)的存取,但通常的非格式化的圖像數(shù)據(jù)是沒有辦法直接存儲到數(shù)據(jù)庫的BLOB字段中的。在實際應用中,只有對圖像文件以32 k字節(jié)為單位切割成多段分別轉(zhuǎn)化成BLOB數(shù)據(jù)類型后,才可以進行存儲。此外,圖像數(shù)據(jù)放入主數(shù)據(jù)表中,將會造成數(shù)據(jù)庫主數(shù)據(jù)表查找效率顯著降低和響應時間的增長,如何解決這個問題是整個系統(tǒng)的關鍵。因此在基于BLOB的圖像查詢系統(tǒng)的設計中必須采用一系列相關技術支持,設計出合理的數(shù)據(jù)庫結(jié)構(gòu),解決上述可能產(chǎn)生的問題并完成圖像數(shù)據(jù)的處理。
在基于BLOB的圖像查詢系統(tǒng)的數(shù)據(jù)庫結(jié)構(gòu)設計中,對數(shù)據(jù)庫中原有的數(shù)據(jù)表不作任何改動,增加圖像數(shù)據(jù)庫表和圖像數(shù)據(jù)索引表。其中圖像數(shù)據(jù)庫表需要主關鍵字和圖像數(shù)據(jù)兩個主要字段,“圖像數(shù)據(jù)”字段為大二進制數(shù)據(jù)類型(BLOB),主關鍵字類型及取值與原主數(shù)據(jù)表一致。從邏輯上分析,圖像數(shù)據(jù)庫表的主關鍵字與主數(shù)據(jù)庫表中的關鍵字已經(jīng)建立了聯(lián)系,可以通過主數(shù)據(jù)庫表直接找到所需的圖像數(shù)據(jù)。圖像數(shù)據(jù)庫表與主數(shù)據(jù)庫表的分離解決了主數(shù)據(jù)庫表查找時間問題。但是對于基于BLOB的圖像查詢系統(tǒng),其圖像數(shù)據(jù)庫表是巨大的。因此在涉及圖像的查找時仍會出現(xiàn)效率降低的問題。解決這一問題的方法是將圖像數(shù)據(jù)庫表按類型分解成多個規(guī)模較小的表,每個小表的結(jié)構(gòu)與圖像數(shù)據(jù)庫表結(jié)構(gòu)相同。在主數(shù)據(jù)庫表與這個多個圖像數(shù)據(jù)庫表之間使用圖像數(shù)據(jù)索引表建立聯(lián)結(jié)。其圖像數(shù)據(jù)庫結(jié)構(gòu)如圖2所示。
圖2 圖像數(shù)據(jù)庫系統(tǒng)結(jié)構(gòu)圖Fig.2 Image database structure
由于圖像數(shù)據(jù)庫的數(shù)據(jù)管理方式的設計實現(xiàn)與普通數(shù)據(jù)庫的設計實現(xiàn)有一定的區(qū)別,所以本文以基于關系數(shù)據(jù)庫的圖像查詢系統(tǒng)的PowerBuilder應用開發(fā)為例給出它的實現(xiàn)過程。
步驟一:建立具有BLOB字段的Oracle數(shù)據(jù)庫,按照如下步驟來完成各個操作:
1)創(chuàng)建表空間:
2)創(chuàng)建表:
在數(shù)據(jù)庫中定義與BLOB數(shù)據(jù)類型相等的數(shù)據(jù)類型。選擇Oracle為數(shù)據(jù)源,Oracle支持BLOB數(shù)據(jù)類型,使PB處理圖像的能力得到更好的發(fā)揮,這樣就為管理圖像數(shù)據(jù)、大文件提供了支持。
這個數(shù)據(jù)庫表parts第一列存儲主鍵,第二列存儲名稱,另外三列存儲LOB型數(shù)據(jù)。定義parts圖片數(shù)據(jù)表如表1所示:
表1 配件圖像數(shù)據(jù)表Tab.1 Parts image table
3)創(chuàng)建新的用戶:如 user1/pass1,賦予 connect,resource權(quán)限。
4)創(chuàng)建邏輯目錄:
BFILE類型有著特殊性,跟CLOB和BLOB不同,實際的數(shù)據(jù)文件存儲在操作系統(tǒng)的外面。BFILE有兩個特點:1.沒有事務性控制2.bfile是只讀的,不能用dbms_lob或Oracl8 oci進行修改。 為了訪問外部文件,服務器需要知道文件在操作系統(tǒng)中的位置。因此建立一個目錄:
create DIRECTORY utils AS'/home/utils';
utils表示目錄邏輯名,'/home/utils'是實際目錄。
步驟二:連接Oracle數(shù)據(jù)庫,在ODBC中配置數(shù)據(jù)源。
步驟三:讀取JPG文件并插入到Oracle的picture table中。
1)從控件欄中讀取JMP的文件名,分別定義所需變量包括字符型 (存儲圖片編號),整形 (存儲用于循環(huán)等臨時數(shù)值),長整形(存儲文件長度等),BLOB型(存儲圖像數(shù)據(jù))。
2)利用文件操作函數(shù)獲取文件長度,文件句柄,測試文件長度如果大于32 kB,則以32 kB為單位讀取,然后進行拼接操作,并存儲在BLOB型變量中。
3)將已存在的BLOB變量中的BLOB數(shù)據(jù)寫入數(shù)據(jù)庫中,可以使用在PowerScript中的UPDATEBLOB語句[5]。但是打算寫入BLOB數(shù)據(jù)的這一條記錄必須已經(jīng)輸入數(shù)據(jù),也就是說必須先輸入圖片編號關鍵字然后才可以使用UPDATE的方式寫入BLOB數(shù)據(jù)。
步驟四:顯示JMP文件需從數(shù)據(jù)庫中讀出BLOB數(shù)據(jù)寫入本地的文件中,方法與讀文件相似,讀出之后,可利用PowerBuilder提供的圖片控件進行顯示。
當圖像在數(shù)據(jù)庫中的錄入、查詢解決后,就要實現(xiàn)配件圖像的熱點處理問題。為了能夠直觀地查看零配件信息,可以通過點擊部件圖中的熱點位置,便可直觀、快速地顯示零件詳細信息,以及應用車型信息,使查詢工作更為高效[6]。作者在熱點處理中用到了 getrow()、scrolltorow()、SelectRow()等函數(shù),熱點處理的程序如下所示:
使用關系數(shù)據(jù)庫管理系統(tǒng)處理圖像數(shù)據(jù),是數(shù)據(jù)庫應用系統(tǒng)在圖像領域的新發(fā)展。本文通過基于BLOB的圖像查詢系統(tǒng)的研究,得到了圖像數(shù)據(jù)在數(shù)據(jù)庫系統(tǒng)中處理與使用的有效方法。圖像文件庫系統(tǒng)雖然可以以高效的方式處理圖像數(shù)據(jù),但在其自身的系統(tǒng)安全性和數(shù)據(jù)完整性上存在難以克服的缺陷,在使用中會出現(xiàn)圖像文件被破壞而引起系統(tǒng)出錯的現(xiàn)象。因此作者在基于BLOB的配件圖像查詢系統(tǒng)中,采用了圖像數(shù)據(jù)庫設計實現(xiàn)配件查詢系統(tǒng)中圖像的錄入和熱點處理,圖像數(shù)據(jù)庫系統(tǒng)使用多個小的圖像數(shù)據(jù)表和圖像數(shù)據(jù)索引表,即保證系統(tǒng)的安全性和數(shù)據(jù)的完整性,也滿足了系統(tǒng)要求的速度和效率,是進行圖像數(shù)據(jù)在數(shù)據(jù)庫系統(tǒng)中處理與使用的有效方法,而且其設計思想和實現(xiàn)步驟簡單,可以方便的應用在各種實際的系統(tǒng)中,具有一定的應用價值。
但是,也應當清醒的認識到對于大數(shù)據(jù)量的圖像數(shù)據(jù)的存儲,還有許多問題要進行研究。一個問題就是大對象數(shù)據(jù)的特殊操作實現(xiàn),因為LOB型數(shù)據(jù)是二進制的大對象,它不能簡單的按照一般數(shù)據(jù)的操作符來進行計算。比如要查出一個數(shù)據(jù)表中含有大對象的圖像,如果圖像很大,又要進行瀏覽,那怎么辦呢?如果直接進行讀取那速度是難以忍受的。只有采取分塊或添加索引影像的方法,由此會帶來許多需要研究的問題。
另外一個重要的問題是對海量圖像數(shù)據(jù)庫的性能優(yōu)化,原先的優(yōu)化方法如索引優(yōu)化等仍然適用,但是現(xiàn)在遇到了新的問題:海量圖像數(shù)據(jù)是龐大的,那么對海量圖像數(shù)據(jù)的操作(尤其是檢索)開銷巨大,那么如何降低這種開銷,縮短操作時間,又是一個重要課題。
[1]DONG Wei-jun,ZHOU Ming-quan.Image retrieval technique based on content[J].Computer Engineering,2005,33(10):162-165.
[2]HE Ling, WU Ling-da, CAI Yi-chao.Indexing techniques in content-based image retrieval[J].Application Research of Computers,2005(11):209-212.
[3]Peng W,SManjunath B.An adaptive index structure for similarity search in large image databases[C].Proceedings of SPIE,the International Society for Optical Engineering,2001(4519):32-41.
[4]楊勇.數(shù)據(jù)庫系統(tǒng)中BLOB對象的管理[J].微電子學與計算機,2006,23(7):147-149.
YANG Yong.The management of the database system inside BLOB object[J].Microelectronics Computer,2006,23 (7):147-149.
[5]方旺盛,邵利平,鄭劍.PB BLOB數(shù)據(jù)類型在文件操作中的特殊應用[J].計算機應用與軟件,2006,23(1):43-44.
FANG Wang-sheng, SHAO Li-ping, ZHENG Jian.Specialized file manipulation based on the type of PB BLOB[J].Computer Applications and Software,2006, 23(1):43-44.
[6]薛淑磊,王振輝,王振鐸.PB數(shù)據(jù)庫圖像存儲技術研究[J].電腦知識與技術,2008,1(7):1320-1323.
XUE Shu-lei, WANG Zhen-hui, WANG Zhen-duo.Study of image saving technology based on PB[J].Computer Knowledge and Technology,2008,1(7):1320-1323.