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