引文
长期以来多媒体信息在计算机中都是以文件形式存放由操作系统管理的但是随着计算机网络分布式计算的发展对多媒体信息进行高效的管理存取查询已经成了一种迫切需求而关系数据库却有着强大的数据管理能力两方面结合多媒体数据库由此应运而生本文将就Oracle对多媒体信息进行处理的方式工具特色以及一些基本原理做一个综述
但是我们不能不遗憾的看到现有数据库对一些多媒体数据所特有的操作能力还是很有限的针对多媒体数据库的性能调优现在也遇到了新的问题虽然如此多媒体数据库仍旧产生了广阔的应用价值和前景
当然本文不可能面面俱到有关Oracle多媒体信息处理的具体内容请查阅Oracle相关手册
一应用前景综述
随着计算机处理能力的大副提高多媒体早已经融入到了计算机当中了如果缺少了多媒体缺少了各种多姿多采的图象音频视频很难想象计算机如今会走入千家万户长期以来多媒体信息在计算机中都是以文件形式存放由操作系统管理的但是随着计算机网络分布式计算的发展 Oracle作为一家着名的数据库厂商在多媒体信息处理上更是走在了前边本文将就Oracle对多媒体信息进行处理的方式工具特色以及一些基本原理做一个综述希望对读者有所启发当然关系数据库还有好多家虽然开发工具编程接口语句各异但在数据类型处理方式上比较相似所以我们在此略过
二多媒体数据类型介绍
在关系型数据库中多媒体信息等大型对象是由lob型字段来进行存取的在Oraclei中正式引入了此标准以适应多媒体大对象处理的需求Oracle数据库中lob型数据有以下几种
Lob类型 说明
Clob 和Oracle的long型相似clob可以存储单字节型数据
Nclob Nclob存储定宽的多字节国家字符集数据
Blob 和Oracle中的long raw类型相似可以存储无结构的二进制数据Oracle没有对这种数据进行解释 只是按照原来的形式存储和检索它
Bfile Bfile允许对Oracle数据库以外存储的大型二进制文件进行只读形式的访问和其它三种lob类型数据 不同的是bfile类型数据存储在一个单独的文件中该文件不由Oracle来维护
特点
在Oracle中相应的long或long raw字段有g的限制而lob的限制是g
lob可以使用调用接口OCI或者由pl/sql利用dbms_lob包进行操纵
lob不象long型那样每个表中最多只有一个字段的限制其可以有多个而又可以利用触发器的特性
lob数据处理可以获得与其它数据同样的事物特性
lob的存储比较特殊它并不是跟其他数据存储在同一个数据库表中而是可以单独存放于不同的表空间中由一个定位符指向实际的lob数据
三多媒体大对象存取例程举例
按照如下步骤来完成各个操作
()先建立一个数据库表
create table lobdemo(key NUMBER KEYclob_col CLOBblob_col BLOBbifle_col BFILE);
这个数据库第一列存储一个码另外三列存储lob型数据
()表建好以后往表中插入一条数据
insert into
lobdemo(keyclob_colblob_colbfile_col) values (abcdefghijklmnopqrsatuvwxyzasdffasfsdSempty_blob()null);
在这一条数据中第二列我们插入一个字符串它被格式化为clob类型数据进行存储第二列我们使用empty_blob()函数来初始化一个定位符以后就可以获取这个定位符进行比如selectupdate等操作了第三列赋空值它并没有获得一个定位符这是与empty_blob()函数的区别
()查询插入表中的数据
select blob_col from boldemo where key=;
注意这一sql语句的返回结果是一个定位符(locator)而不是实际的数据本身
()修改数据库中数据
update lobdemo SET blob_col=aedevbagddgagdfdfasasdfdsa where key=;
从这些sql语句当中我们看到了lob型数据处理的基本方法发现与其他类型数据处理相似但是sql语句中lob型数据处理的特殊性在于以下方面
()bfile文件的处理
bfile类型有着特殊性跟clobblob不同实际的数据文件存储在操作系统的外面所以有两个特点没有事务性控制 bfile是只读的不能用dbms_lob或oracl oci进行修改让我们来看对bfile的操作步骤
<> 为了访问外部文件服务器需要知道文件在操作系统中的位置下面我们建立一个目录
create DIRECTORY utils AS /home/utils;
utils表示目录逻辑名/home/utils是实际目录
<>使用bfilename函数插入一行数据
insert into lobdemo(keybfile_col) values (biflename(utilsfile));
bfilename函数的第一个参数是逻辑目录名第二个参数是文件名注意这一行中插入的是一个指向/home/utils/file的lob定位符并不是文件本身
()利用dbms_lob包进行lob数据操作
sql仅可以操纵整个lob而不能操纵数据片dbms_lob包则放开了这个限制它提供对lob数据中数据片的操作这个包中包含十几个例程读者可以查阅Oracle pl/sql手册本文只介绍三个函数fileopen()用来打开一个操作系统文件loadfromfile()例程用来往目标lob字段填充一个操作系统文件这个函数很有实用价值因为有许多lob内容在sql语句中是不可描述的例如一个二进制音频文件而用这个函数可以将文件内容导入到数据库getlength函数计算文件的长度请看下面一个存储过程中这三个函数的使用
create or replace procedure FileExec(
p_Directory in VARCHAR
p_Filename IN VARCHAR
) AS
v_FileLocator BFILE;
v_CLOBLocator CLOB;
BEGIN
为update初始化一个定位符
SELECT clob_col
INTO v_CLOBLocator
FROM lobdemo
WHERE key=
FOR UPDATE;
为读文件初始化一个BFILE定位符
v_FileLocator:=BFILEOPEN(p_Derectoryp_Filename);
用dbms_lob包的fileopen打开一个操作系统文件
DBMS_LOBFILEOPEN(v_FileLocatorDBMS_LOBFILE_READONLY);
将整个操作系统文件装入lob中
DBMS_LOBLOADFROMFILE(v_CLOBLocatorv_FileLocatorDBMS_LOBGETLENGTH(v_FileLocator));
END FileExec;
四Oracle InterMedia工具介绍
interMedia是Oracle推出的对Oraclei多媒体功能进行扩充的一个集成部件它使得Oracle能够更方便的管理图象音频视频文本等信息使得Oracle在internet电子商务等领域多媒体数据的管理上可靠性与可用性增强它包括image audio video三部份interMedia使用对象类型类似于JAVA或C++来描述image audio video类型数据Oracle在这三类对象类型中定义了许多方法来操作这些数据如对于 image类型数据来说你可以很方便地进行图形格式转换压缩拷贝截取图形的任何一部份等而这些是普通LOB类型数据所无法比拟的普通sql语句也无法完成这些操作
Internet的发展更突出了interMedia在WEB应用中的价值现有的WEB应用绝大多数将imageaudiovideo等多媒体信息存在文件系统中其优点是操作简单速度快缺点是管理复杂尤其是管理大量image时就受到目录数等的限制如果将image保存在数据库中由数据库来统一维护统一备份这样就可以简化管理
Intermedia中定义了几个多媒体对象类型例如ORDAUDIO就是其中一个它提供一些audio对象类型数据的操纵函数下面我们来看一个例子在这个例子中我们定义一个歌曲对象建立一个歌曲对象的表并对该表进行插入与查询操作
()定义一个歌曲对象
CREATE TYPE songObject as OBJECT (
songId VARCHAR() 歌曲号
title VARCHAR() 题目
artist VARCHAR() 作家
awards VARCHAR() 奖项
timePeriod VARCHAR() 日期时间
txtinroduction CLOB 简介
audioSource ORDSYSORDAUDIO 音频数据这个字段由ORDAUDIO对象来定义
);
()建立一个名为songtable的表
CREATE TABLE SongsTable of songObject (UNIQUE (songId) songId NOT NULL);
()插入一行数据到SongsTable表中
INSERT INTO SongsTable VALUES (
Under Pressure
Queen
no awards
NULL
EMPTY_CLOB()
ORDSYSORDAudio(NULL
ORDSYSORDSource(EMPTY_BLOB()NULLNULLNULLNULLNULL)
NULL NULL EMPTY_CLOB() NULL NULL NULL NULL NULL NULL));
注意EMPTY_CLOBEMPTY_BLOB()函数只是初始化一个lob数据定位符而没有存储实际的数据
()向SongsTable表中载入一行数据
DECLARE
audioObj ORDSYSORDAUDIO;
ctx RAW() := NULL;
BEGIN
取得audioSource字段定位符
SELECT SaudioSource INTO audioObj
FROM SongsTable S
WHERE SsongId =
FOR UPDATE;
下面的四个函数是ORDAUDIO对象的成员函数具体功能请查看Oracle开发手册
audioObjsetSource(FILE AUDDIR UnderPressureau);设定文件
audioObjsetMimeType(audio/basic); 设定类型
audioObjimport(ctx); 载入ctx
audioObjsetProperties(ctx); 设置属性
将歌曲对象载入到数据库表中
UPDATE SongsTable S
SET SaudioSource = audioObj
WHERE SsongId = ;
COMMIT;
END;
五多媒体数据库技术难点与展望
可以说多媒体数据的高效管理是IT技术发展的必然要求随着多媒体信息需求的进一步加强多媒体数据库技术将会有更大的发展从Oracle数据库中我们可以看出无论在数据类型数据管理还是开发管理工具上现在的主流关系数据库已经具有很强的多媒体信息管理能力但是我们不能不遗憾的看到对一些多媒体数据所特有的操作(比如对多媒体信息的查询)能力还是很有限的
一个问题就是多媒体数据的特殊操作实现因为lob型数据是二进制的大对象他不能简单的按照一般数据的操作符来进行计算比如要查出一个数据表中与某首歌相似的音频那么对于这个相似操作来说它得不到传统的操作符的支持而且它将涉及很复杂的算法可喜的是Oraclei Intermedia已经具有多媒体数据的查询与匹配功能例如可以从质地(texture)形状颜色颜色分量等要素进行相似图象的查询在查询时可以设置各个要素的权值测试的结果还是差强人意的但是对audiovideo等类型数据的查询仍然不够理想
另外如何描述多媒体信息怎样根据你对多媒体信息的描述来检索也是一个难点问题比如这个查询任务查询出颜色比较暗的并且有森林的风景照片这就是根据描述性信息进行查询的例子这将需要某种行业标准和技术实现总之如何实现和优化针对多媒体数据的特殊操作(如相似查询等)将是以后多媒体数据库研究和应用中的热点问题
另外一个重要的问题就是针对多媒体数据库的性能调优原先的调优方法如索引优化等仍然适用但是现在遇到了新的问题多媒体数据是庞大的那么对多媒体信息的操作(尤其是检索)开销巨大那么如何降低这种开销缩短操作时间又是一个重要课题