袁 勇
(遵义师范学院网络管理中心,贵州 遵义 563000)
当代,大数据无处不在,和云计算、物联网一样已经成为计算机学科中的一个热门研究课题.随着高清图像、视频的问世,大容量的存储空间和大数据的操作越来越需要研究者去攻克.本文只是针对大对象数据在Oracle数据库中的存取着手,利用SQL*Plus或借助JAVA编程语言,来实现了Oracle数据库中大对象数据存取操作,并对两种方法进行存取时间性能比较,为大对象在Oracle数据库中的存取提出一些自己的见解.
为了解决数据库中非结构化数据存取问题,Oracle提出了LOB(Large Object),即大对象的概念,包含图像、音视频、文件等非结构化的数据.这类数据最大特点是:大小不确定,长度变化,要想在数据库中进行存取,就必须使用到LOB[1].
①字符类型:包含CLOB和NLOB;
②二进制类型:BLOB,用来存储较大,且无结构的二进制数据;
③二进制文件类型:BFILE,将数据在外部操作系统文件中进行存储;
①数据在内部表空间存储:CLOB、NLOB以及BLOB;
②指向操作系统的目录:BFILE,建立目录、文件的映射关系
本章通过Oracle自带的SQL*Plus以及用当前广泛使用的JAVA语言来实现Oracle数据库中图片数据的存取.首先在Oracle10g数据库中新建测试用表[4].
创建文件操作目录,用于大对象数据的存取.
以下为两个PL/SQL存储过程,分别用来向数据库中存储、读取大对象数据.可以根据修改具体的filename名,像数据库中插入图片、视频等数据.具体如下:
2.1.1 存入大对象的存储过程:
2.1.2 读取的存储过程:
在完成存储过程的创建后,通过执行exec pic_insert或exec pic_read存储过程,并加上相应的实际参数完成大对象的读取.
由于使用PL/SQL存储过程读取的效率太低(见第三章),通常的系统开发都会选择使用高级程序语言,其具有界面友好、可读性强等优势,而JAVA语言由于其跨平台等众多优点,在当前具有较大的应用市场,也是众多编程爱好者首选的开发语言.在这里,通过JDBC来访问oracle数据库,实现其存取.主要实现代码如下:
2.2.1 存入大对象的JAVA函数片段:
2.2.2 读取大对象的JAVA函数片段:
在性能分析过程中,以图片(30.8KB4546KB,JPG 格式)、视频(422MB,MP4格式)的存取为例,在执行SQL*Plus存储过程时,加入以下的命令获取存储过程执行时的系统时间,比较执行前后的执行时间差值,从而得出存储过程的运行时长.
select to_char(current_timestamp(5),'DD -MON -YYYY HH24:MI:SSxFF')from dual;
在java连接oracle数据库读取大对象的函数中加入函数currentTimeMillis()来获取执行的系统时间,通过执行前后系统时间差来得出读取的时长.
在存储过程、JAVA混合编程下分别运行三次,取平均数据得到耗时表如下(打斜线表格栏:表示执行速度太长或太短,对结论不影响,而未做该项试验.):
表1 存取时间对比表(单位:s)
由上表可知,在进行大对象的存取过程中,通过混合编程写入数据流的方式在读取方面远优于存储过程,而在存入时性能低于存储过程.
本文通过BLOB大对象在oracle数据库中的存取为背景,通过使用存储过程的方式和用JAVA与Oracle混合编程的实现方式,作出系列实验研究.得出用JAVA与Oracle混合编程的方式在读取大对象的过程中,远优于通过存储过程实现的结论.
[1]金杰.基于OCCI技术存取数据库大对象的方法及实现[J]. 计算机系统应用,2010,19(7):162-165.
[2]余秋明.浅论大型数据对象在Oracle数据库中的存储方法[J].科技广场 ,2008,10:61-63.
[3]张文东,刘培刚.基于Java与Oracle数据库的图像处理技术[J].计算机系统应用,2004,11:34-36.
[4]王彬,代彦波,颜鹏博.Oracle10g简明教程[M].北京:清华大学出版社,2006.