熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Oracle >> 正文

Oracle數據庫處理多媒體信息

2013-11-13 22:22:48  來源: Oracle 

  引文
  
  長期以來多媒體信息在計算機中都是以文件形式存放由操作系統管理的但是隨著計算機網絡分布式計算的發展對多媒體信息進行高效的管理存取查詢已經成了一種迫切需求而關系數據庫卻有著強大的數據管理能力兩方面結合多媒體數據庫由此應運而生本文將就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等類型數據的查詢仍然不夠理想
  
  另外如何描述多媒體信息怎樣根據你對多媒體信息的描述來檢索也是一個難點問題比如這個查詢任務查詢出顏色比較暗的並且有森林的風景照片這就是根據描述性信息進行查詢的例子這將需要某種行業標准和技術實現總之如何實現和優化針對多媒體數據的特殊操作(如相似查詢等)將是以後多媒體數據庫研究和應用中的熱點問題
  
  另外一個重要的問題就是針對多媒體數據庫的性能調優原先的調優方法如索引優化等仍然適用但是現在遇到了新的問題多媒體數據是龐大的那麼對多媒體信息的操作(尤其是檢索)開銷巨大那麼如何降低這種開銷縮短操作時間又是一個重要課題
From:http://tw.wingwit.com/Article/program/Oracle/201311/18935.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.