首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> Oracle 資料庫 >> Oracle 資料庫基礎

Oracle 多媒體數據處理原理與 InterMedia 實戰詳解

     編輯:Oracle 資料庫基礎

背景

多媒體信息傳統以文件形式由作業系統管理,隨著網絡與分布式計算發展,高效管理、存取、查詢成為剛需。關係數據庫強大的數據管理能力使多媒體數據庫應運而生。Oracle 8i 引入 LOB 標準,InterMedia 進一步擴展圖像/音視頻/文本處理能力。

一、LOB 數據類型速覽

類型說明對應舊類型
CLOB單字節字符大對象LONG
NCLOB定寬多字節國家字符集—
BLOB非結構二進制數據LONG RAW
BFILE外部文件只讀訪問,數據不在庫內—

關鍵特性: 4GB 上限(舊 2GB);支持 OCI/dbms_lob 操作;單表可多 LOB 列;具備事務特性;存儲分離,通過定位符指向實際數據。

二、基本操作範例

-- 1. 建表
CREATE TABLE lobdemo(key NUMBER PRIMARY KEY, clob_col CLOB, blob_col BLOB, bfile_col BFILE);

-- 2. 插入:字符串直接存 CLOB,BLOB 用 EMPTY_BLOB() 初始化定位符
INSERT INTO lobdemo(key, clob_col, blob_col, bfile_col)
VALUES (10, 'abcdefghijklmnopqrstuvwxyz', EMPTY_BLOB(), NULL);

-- 3. 查詢返回定位符而非實際數據
SELECT blob_col FROM lobdemo WHERE key = 20;

-- 4. 更新
UPDATE lobdemo SET blob_col = 'aedevbagddgagdfdfasasdfdsa' WHERE key = 10;

三、BFILE 特殊處理

  1. 創建目錄對象映射 OS 路徑:CREATE DIRECTORY utils AS '/home/utils';
  2. 用 BFILENAME('utils','file1') 插入定位符(非文件本身)。
  3. 特點:無事務控制、只讀、不可用 dbms_lob/OCI 修改。

四、dbms_lob 包片段操作

SQL 僅能整體操作 LOB,dbms_lob 允許片段讀寫。核心例程:

  • FILEOPEN:打開 OS 文件
  • LOADFROMFILE:將 OS 文件載入目標 LOB(極具實用價值,如導入音頻二進制)
  • GETLENGTH:取文件長度
CREATE OR REPLACE PROCEDURE FileExec(p_Directory VARCHAR2, p_Filename VARCHAR2) AS
    v_FileLocator BFILE; v_CLOBLocator CLOB;
BEGIN
    SELECT clob_col INTO v_CLOBLocator FROM lobdemo WHERE key = -1 FOR UPDATE;
    v_FileLocator := BFILENAME(p_Directory, p_Filename);
    DBMS_LOB.FILEOPEN(v_FileLocator, DBMS_LOB.FILE_READONLY);
    DBMS_LOB.LOADFROMFILE(v_CLOBLocator, v_FileLocator, DBMS_LOB.GETLENGTH(v_FileLocator));
END;

五、Oracle InterMedia:多媒體管理利器

InterMedia 為 Oracle 8i 擴充組件,提供 ORDAudio、ORDImage、ORDVideo 對象類型,內置格式轉換、壓縮、裁剪、屬性提取等方法,遠超普通 LOB 能力。

Web 應用優勢: 將多媒體存入數據庫,統一維護、備份,避免文件系統目錄數限制與管理混亂。

實戰:歌曲對象存儲與載入

-- 1. 定義對象類型
CREATE TYPE songObject AS OBJECT (
    songId VARCHAR2(20), title VARCHAR2(4000), artist VARCHAR2(4000),
    awards VARCHAR2(4000), timePeriod VARCHAR2(20), txtinroduction CLOB,
    audioSource ORDSYS.ORDAUDIO
);

-- 2. 建表
CREATE TABLE SongsTable OF songObject (UNIQUE(songId), songId NOT NULL);

-- 3. 插入空定位符行
INSERT INTO SongsTable VALUES ('00', 'Under Pressure', 'Queen', 'no awards', '80-90',
    243, NULL, EMPTY_CLOB(), ORDSYS.ORDAudio(...));

-- 4. 載入音頻文件並設置屬性
DECLARE audioObj ORDSYS.ORDAUDIO; ctx RAW(4000) := NULL;
BEGIN
    SELECT S.audioSource INTO audioObj FROM SongsTable S WHERE S.songId = '00' FOR UPDATE;
    audioObj.setSource('FILE', 'AUDDIR', 'UnderPressure.au');
    audioObj.setMimeType('audio/basic');
    audioObj.import(ctx);
    audioObj.setProperties(ctx);
    UPDATE SongsTable S SET S.audioSource = audioObj WHERE S.songId = '00';
    COMMIT;
END;

六、技術難點與展望

  • 相似性查詢: LOB 二進制無法用傳統運算符,需複雜算法。Oracle 9i InterMedia 已支持圖像質地/形狀/顏色相似查詢(可設置權重),音視頻仍不理想。
  • 描述性檢索: 如「顏色較暗且含森林的風景照」,需行業標準與技術實現。
  • 性能調優新挑戰: 傳統索引優化仍適用,但海量多媒體檢索開銷巨大,如何降低 I/O 與 CPU 消耗成熱點課題。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved