Oracle数据库大对象数据存取的两种实现方法及时间性能比较
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Oracle数据库大对象数据存取的两种实现方法及时间性能比
较
袁勇
【摘要】With the development of cloud computing , internet of things , large object data storage and re-trieval will be forced to face , and systematic data management can make our work more effective .This article discussed the use of SQL*Plus storage procedure or with the JAVA programming language , to achieve storage and retrieval of LOB in Oracle database , and its operation time performance compared .Finally, the conclusion that using JAVA language is far better than storage procedure to read LOB in Oracle was made .%随着云计算、物联网时代的到来,大对象数据的存储和读取将是不得不面对的现实,系统化的数据管理才能使我们的工作事半功倍。
本文讨论利用SQL*Plus存储过程或借助JAVA编程语言,来实现了Oracle数据库中大对象数据存取,并对其操作的时间性能进行对比,得出借助JAVA语言读取Oracle数据库大对象远优于通过存储过程读取的结论。
【期刊名称】《佳木斯大学学报(自然科学版)》
【年(卷),期】2014(000)001
【总页数】3页(P116-118)
【关键词】大对象;存取;时间性能
【作者】袁勇
【作者单位】遵义师范学院网络管理中心,贵州遵义 563000
【正文语种】中文
【中图分类】TP311.13
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.8KB\4546KB,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)注:存储读取时间根据不同运行环境,存在差
异.PL/SQL存 Java存 PL/SQL取 Java取0.020 \ 3090.622 \图片(4546 KB)
0.960 7.516 \ 37.969视频(422 MB)图片(30.8 KB)46.750 572.031 \ 2137.797 由上表可知,在进行大对象的存取过程中,通过混合编程写入数据流的方式在读取方面远优于存储过程,而在存入时性能低于存储过程.
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.。