袁 勇
(遵義師范學(xué)院網(wǎng)絡(luò)管理中心,貴州 遵義 563000)
當(dāng)代,大數(shù)據(jù)無處不在,和云計算、物聯(lián)網(wǎng)一樣已經(jīng)成為計算機(jī)學(xué)科中的一個熱門研究課題.隨著高清圖像、視頻的問世,大容量的存儲空間和大數(shù)據(jù)的操作越來越需要研究者去攻克.本文只是針對大對象數(shù)據(jù)在Oracle數(shù)據(jù)庫中的存取著手,利用SQL*Plus或借助JAVA編程語言,來實現(xiàn)了Oracle數(shù)據(jù)庫中大對象數(shù)據(jù)存取操作,并對兩種方法進(jìn)行存取時間性能比較,為大對象在Oracle數(shù)據(jù)庫中的存取提出一些自己的見解.
為了解決數(shù)據(jù)庫中非結(jié)構(gòu)化數(shù)據(jù)存取問題,Oracle提出了LOB(Large Object),即大對象的概念,包含圖像、音視頻、文件等非結(jié)構(gòu)化的數(shù)據(jù).這類數(shù)據(jù)最大特點是:大小不確定,長度變化,要想在數(shù)據(jù)庫中進(jìn)行存取,就必須使用到LOB[1].
①字符類型:包含CLOB和NLOB;
②二進(jìn)制類型:BLOB,用來存儲較大,且無結(jié)構(gòu)的二進(jìn)制數(shù)據(jù);
③二進(jìn)制文件類型:BFILE,將數(shù)據(jù)在外部操作系統(tǒng)文件中進(jìn)行存儲;
①數(shù)據(jù)在內(nèi)部表空間存儲:CLOB、NLOB以及BLOB;
②指向操作系統(tǒng)的目錄:BFILE,建立目錄、文件的映射關(guān)系
本章通過Oracle自帶的SQL*Plus以及用當(dāng)前廣泛使用的JAVA語言來實現(xiàn)Oracle數(shù)據(jù)庫中圖片數(shù)據(jù)的存取.首先在Oracle10g數(shù)據(jù)庫中新建測試用表[4].
創(chuàng)建文件操作目錄,用于大對象數(shù)據(jù)的存取.
以下為兩個PL/SQL存儲過程,分別用來向數(shù)據(jù)庫中存儲、讀取大對象數(shù)據(jù).可以根據(jù)修改具體的filename名,像數(shù)據(jù)庫中插入圖片、視頻等數(shù)據(jù).具體如下:
2.1.1 存入大對象的存儲過程:
2.1.2 讀取的存儲過程:
在完成存儲過程的創(chuàng)建后,通過執(zhí)行exec pic_insert或exec pic_read存儲過程,并加上相應(yīng)的實際參數(shù)完成大對象的讀取.
由于使用PL/SQL存儲過程讀取的效率太低(見第三章),通常的系統(tǒng)開發(fā)都會選擇使用高級程序語言,其具有界面友好、可讀性強(qiáng)等優(yōu)勢,而JAVA語言由于其跨平臺等眾多優(yōu)點,在當(dāng)前具有較大的應(yīng)用市場,也是眾多編程愛好者首選的開發(fā)語言.在這里,通過JDBC來訪問oracle數(shù)據(jù)庫,實現(xiàn)其存取.主要實現(xiàn)代碼如下:
2.2.1 存入大對象的JAVA函數(shù)片段:
2.2.2 讀取大對象的JAVA函數(shù)片段:
在性能分析過程中,以圖片(30.8KB4546KB,JPG 格式)、視頻(422MB,MP4格式)的存取為例,在執(zhí)行SQL*Plus存儲過程時,加入以下的命令獲取存儲過程執(zhí)行時的系統(tǒng)時間,比較執(zhí)行前后的執(zhí)行時間差值,從而得出存儲過程的運(yùn)行時長.
select to_char(current_timestamp(5),'DD -MON -YYYY HH24:MI:SSxFF')from dual;
在java連接oracle數(shù)據(jù)庫讀取大對象的函數(shù)中加入函數(shù)currentTimeMillis()來獲取執(zhí)行的系統(tǒng)時間,通過執(zhí)行前后系統(tǒng)時間差來得出讀取的時長.
在存儲過程、JAVA混合編程下分別運(yùn)行三次,取平均數(shù)據(jù)得到耗時表如下(打斜線表格欄:表示執(zhí)行速度太長或太短,對結(jié)論不影響,而未做該項試驗.):
表1 存取時間對比表(單位:s)
由上表可知,在進(jìn)行大對象的存取過程中,通過混合編程寫入數(shù)據(jù)流的方式在讀取方面遠(yuǎn)優(yōu)于存儲過程,而在存入時性能低于存儲過程.
本文通過BLOB大對象在oracle數(shù)據(jù)庫中的存取為背景,通過使用存儲過程的方式和用JAVA與Oracle混合編程的實現(xiàn)方式,作出系列實驗研究.得出用JAVA與Oracle混合編程的方式在讀取大對象的過程中,遠(yuǎn)優(yōu)于通過存儲過程實現(xiàn)的結(jié)論.
[1]金杰.基于OCCI技術(shù)存取數(shù)據(jù)庫大對象的方法及實現(xiàn)[J]. 計算機(jī)系統(tǒng)應(yīng)用,2010,19(7):162-165.
[2]余秋明.淺論大型數(shù)據(jù)對象在Oracle數(shù)據(jù)庫中的存儲方法[J].科技廣場 ,2008,10:61-63.
[3]張文東,劉培剛.基于Java與Oracle數(shù)據(jù)庫的圖像處理技術(shù)[J].計算機(jī)系統(tǒng)應(yīng)用,2004,11:34-36.
[4]王彬,代彥波,顏鵬博.Oracle10g簡明教程[M].北京:清華大學(xué)出版社,2006.