Oracle数据库大对象数据存取的两种实现方法及时间性能比较①

2014-09-27 14:27
关键词:二进制编程对象

袁 勇

(遵义师范学院网络管理中心,贵州 遵义 563000)

0 引言

当代,大数据无处不在,和云计算、物联网一样已经成为计算机学科中的一个热门研究课题.随着高清图像、视频的问世,大容量的存储空间和大数据的操作越来越需要研究者去攻克.本文只是针对大对象数据在Oracle数据库中的存取着手,利用SQL*Plus或借助JAVA编程语言,来实现了Oracle数据库中大对象数据存取操作,并对两种方法进行存取时间性能比较,为大对象在Oracle数据库中的存取提出一些自己的见解.

1 Oracle中大对象数据分类

为了解决数据库中非结构化数据存取问题,Oracle提出了LOB(Large Object),即大对象的概念,包含图像、音视频、文件等非结构化的数据.这类数据最大特点是:大小不确定,长度变化,要想在数据库中进行存取,就必须使用到LOB[1].

1.1 按数据类型分类[23]

①字符类型:包含CLOB和NLOB;

②二进制类型:BLOB,用来存储较大,且无结构的二进制数据;

③二进制文件类型:BFILE,将数据在外部操作系统文件中进行存储;

1.2 按存取方式分类

①数据在内部表空间存储:CLOB、NLOB以及BLOB;

②指向操作系统的目录:BFILE,建立目录、文件的映射关系

2 Oracle中大对象数据存取的实现方法

本章通过Oracle自带的SQL*Plus以及用当前广泛使用的JAVA语言来实现Oracle数据库中图片数据的存取.首先在Oracle10g数据库中新建测试用表[4].

创建文件操作目录,用于大对象数据的存取.

2.1 利用PL/SQL实现存取

以下为两个PL/SQL存储过程,分别用来向数据库中存储、读取大对象数据.可以根据修改具体的filename名,像数据库中插入图片、视频等数据.具体如下:

2.1.1 存入大对象的存储过程:

2.1.2 读取的存储过程:

在完成存储过程的创建后,通过执行exec pic_insert或exec pic_read存储过程,并加上相应的实际参数完成大对象的读取.

2.2 借助JAVA编程语言实现高效读取

由于使用PL/SQL存储过程读取的效率太低(见第三章),通常的系统开发都会选择使用高级程序语言,其具有界面友好、可读性强等优势,而JAVA语言由于其跨平台等众多优点,在当前具有较大的应用市场,也是众多编程爱好者首选的开发语言.在这里,通过JDBC来访问oracle数据库,实现其存取.主要实现代码如下:

2.2.1 存入大对象的JAVA函数片段:

2.2.2 读取大对象的JAVA函数片段:

3 存取时间性能比较

在性能分析过程中,以图片(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)

由上表可知,在进行大对象的存取过程中,通过混合编程写入数据流的方式在读取方面远优于存储过程,而在存入时性能低于存储过程.

4 总结

本文通过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.

猜你喜欢
二进制编程对象
用二进制解一道高中数学联赛数论题
涉税刑事诉讼中的举证责任——以纳税人举证责任为考察对象
编程,是一种态度
元征X-431实测:奔驰发动机编程
编程小能手
纺织机上诞生的编程
有趣的进度
二进制在竞赛题中的应用
攻略对象的心思好难猜
基于熵的快速扫描法的FNEA初始对象的生成方法