引文 長期以來
多媒體信息在計算機中都是以文件形式存放
由操作系統管理的
但是隨著計算機網絡
分布式計算的發展
對多媒體信息進行高效的管理
存取
查詢已經成了一種迫切需求
而關系數據庫卻有著強大的數據管理能力
兩方面結合
多媒體數據庫由此應運而生
本文將就Oracle對多媒體信息進行處理的方式
工具
特色以及一些基本原理做一個綜述
但是我們不能不遺憾的看到
現有數據庫對一些多媒體數據所特有的操作能力還是很有限的
針對多媒體數據庫的性能調優現在也遇到了新的問題
雖然如此
多媒體數據庫仍舊產生了廣闊的應用價值和前景
當然本文不可能面面俱到
有關Oracle多媒體信息處理的具體內容
請查閱Oracle相關手冊
一應用前景綜述 隨著計算機處理能力的大副提高
多媒體早已經融入到了計算機當中了
如果缺少了多媒體
缺少了各種多姿多采的圖象
音頻
視頻
很難想象計算機如今會走入千家萬戶
長期以來
多媒體信息在計算機中都是以文件形式存放
由操作系統管理的
但是隨著計算機網絡
分布式計算的發展
Oracle作為一家著名的數據庫廠商
在多媒體信息處理上
更是走在了前邊
本文將就Oracle對多媒體信息進行處理的方式
工具
特色以及一些基本原理做一個綜述
希望對讀者有所啟發
當然
關系數據庫還有好多家
雖然開發工具
編程接口語句各異
但在數據類型
處理方式上比較相似
所以我們在此略過
二多媒體數據類型介紹 在關系型數據庫中
多媒體信息等大型對象是由lob型字段來進行存取的
在Oracle
i中
正式引入了此標准
以適應多媒體大對象處理的需求
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 KEY
clob_col CLOB
blob_col BLOB
bifle_col BFILE);
這個數據庫第一列存儲一個碼
另外三列存儲lob型數據
(
)表建好以後
往表中插入一條數據
insert into
lobdemo(key
clob_col
blob_col
bfile_col) values (
abcdefghijklmnopqrsatuvwxyzasdffasfsdS
empty_blob()
null);
在這一條數據中
第二列我們插入一個字符串
它被格式化為clob類型數據進行存儲
第二列我們使用empty_blob()函數來初始化一個定位符
以後就可以獲取這個定位符進行比如select
update等操作了
第三列賦空值
它並沒有獲得一個定位符
這是與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類型有著特殊性
跟clob
blob不同
實際的數據文件存儲在操作系統的外面
所以有兩個特點
沒有事務性控制
bfile是只讀的
不能用dbms_lob或oracl
oci進行修改
讓我們來看對bfile的操作步驟
<
> 為了訪問外部文件
服務器需要知道文件在操作系統中的位置
下面我們建立一個目錄
create DIRECTORY utils AS
/home/utils
;
utils表示目錄邏輯名
/home/utils
是實際目錄
<
>使用bfilename函數插入一行數據
insert into lobdemo(key
bfile_col) values (
biflename(
utils
file
));
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_Derectory
p_Filename);
用dbms_lob包的fileopen打開一個操作系統文件
DBMS_LOB
FILEOPEN(v_FileLocator
DBMS_LOB
FILE_READONLY);
將整個操作系統文件裝入lob中
DBMS_LOB
LOADFROMFILE(v_CLOBLocator
v_FileLocator
DBMS_LOB
GETLENGTH(v_FileLocator));
END FileExec;
四Oracle InterMedia工具介紹 interMedia是Oracle推出的對Oracle
i多媒體功能進行擴充的一個集成部件
它使得Oracle能夠更方便的管理圖象
音頻
視頻
文本等信息
使得Oracle在internet
電子商務等領域多媒體數據的管理上可靠性與可用性增強
它包括image
audio
video三部份
interMedia使用對象類型
類似於JAVA或C++
來描述image
audio
video類型數據
Oracle在這三類對象類型中定義了許多方法來操作這些數據
如對於 image類型數據來說
你可以很方便地進行圖形格式轉換
壓縮
拷貝
截取圖形的任何一部份等
而這些是普通LOB類型數據所無法比擬的
普通sql語句也無法完成這些操作
Internet的發展更突出了interMedia在WEB應用中的價值
現有的WEB應用絕大多數將image
audio
video等多媒體信息存在文件系統中
其優點是操作簡單
速度快
缺點是管理復雜
尤其是管理大量image時就受到目錄數等的限制
如果將image保存在數據庫中
由數據庫來統一維護
統一備份
這樣就可以簡化管理
Intermedia中定義了幾個多媒體對象類型
例如ORDAUDIO就是其中一個
它提供一些audio對象類型數據的操縱函數
下面我們來看一個例子
在這個例子中我們定義一個歌曲對象
建立一個歌曲對象的表
並對該表進行插入與查詢操作
(
)定義一個歌曲對象
CREATE TYPE songObject as OBJECT (
songId VARCHAR
(
)
歌曲號
title VARCHAR
(
)
題目
artist VARCHAR
(
)
作家
awards VARCHAR
(
)
獎項
timePeriod VARCHAR
(
)
日期時間
txtinroduction CLOB
簡介
audioSource ORDSYS
ORDAUDIO
音頻數據
這個字段由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()
ORDSYS
ORDAudio(NULL
ORDSYS
ORDSource(EMPTY_BLOB()
NULL
NULL
NULL
NULL
NULL)
NULL
NULL
EMPTY_CLOB()
NULL
NULL
NULL
NULL
NULL
NULL));
注意
EMPTY_CLOB
EMPTY_BLOB()函數只是初始化一個lob數據定位符
而沒有存儲實際的數據
(
)向SongsTable表中載入一行數據
DECLARE
audioObj ORDSYS
ORDAUDIO;
ctx RAW(
) := NULL;
BEGIN
取得audioSource字段定位符
SELECT S
audioSource INTO audioObj
FROM SongsTable S
WHERE S
songId =
FOR UPDATE;
下面的四個函數是ORDAUDIO對象的成員函數
具體功能請查看Oracle開發手冊
audioObj
setSource(
FILE
AUDDIR
UnderPressure
au
);
設定文件
audioObj
setMimeType(
audio/basic
);
設定類型
audioObj
import(ctx);
載入ctx
audioObj
setProperties(ctx);
設置屬性
將歌曲對象載入到數據庫表中
UPDATE SongsTable S
SET S
audioSource = audioObj
WHERE S
songId =
;
COMMIT;
END;
五多媒體數據庫技術難點與展望 可以說
多媒體數據的高效管理是IT技術發展的必然要求
隨著多媒體信息需求的進一步加強
多媒體數據庫技術將會有更大的發展
從Oracle數據庫中我們可以看出
無論在數據類型
數據管理
還是開發管理工具上
現在的主流關系數據庫已經具有很強的多媒體信息管理能力
但是我們不能不遺憾的看到
對一些多媒體數據所特有的操作(比如對多媒體信息的查詢)能力還是很有限的
一個問題就是多媒體數據的特殊操作實現
因為lob型數據是二進制的大對象
他不能簡單的按照一般數據的操作符來進行計算
比如
要查出一個數據表中與某首歌相似的音頻
那麼對於這個
相似
操作來說
它得不到傳統的操作符的支持
而且它將涉及很復雜的算法
可喜的是
Oracle
i Intermedia已經具有多媒體數據的查詢與匹配功能
例如
可以從質地(texture)
形狀
顏色
顏色分量等要素進行相似圖象的查詢
在查詢時可以設置各個要素的權值
測試的結果還是差強人意的
但是對audio
video等類型數據的查詢仍然不夠理想
另外
如何描述多媒體信息
怎樣根據你對多媒體信息的描述來檢索
也是一個難點問題
比如這個查詢任務
查詢出顏色比較暗的並且有森林的風景照片
這就是根據描述性信息進行查詢的例子
這將需要某種行業標准和技術實現
總之
如何實現和優化針對多媒體數據的特殊操作(如相似查詢等)
將是以後多媒體數據庫研究和應用中的熱點問題
另外一個重要的問題就是針對多媒體數據庫的性能調優
原先的調優方法如索引優化等仍然適用
但是現在遇到了新的問題
多媒體數據是龐大的
那麼對多媒體信息的操作(尤其是檢索)開銷巨大
那麼如何降低這種開銷
縮短操作時間
又是一個重要課題
From:http://tw.wingwit.com/Article/program/Oracle/201311/18935.html