Oracle資料庫處理多媒體資訊(轉)
引文:
長期以來,多媒體資訊在計算機中都是以檔案形式存放,由作業系統管理的,但是隨著計算機網路,分散式計算的發展,對多媒體資訊進行高效的管理,存取,查詢已經成了一種迫切需求。而關聯式資料庫卻有著強大的資料管理能力。兩方面結合,多媒體資料庫由此應運而生。本文將就Oracle對多媒體資訊進行處理的方式,工具,特色以及一些基本原理做一個綜述。
但是我們不能不遺憾的看到,現有資料庫對一些多媒體資料所特有的操作能力還是很有限的。針對多媒體資料庫的效能調優現在也遇到了新的問題。雖然如此,多媒體資料庫仍舊產生了廣闊的應用價值和前景。
當然本文不可能面面俱到,有關Oracle多媒體資訊處理的具體內容,請查閱Oracle相關手冊。
一.應用前景綜述
隨著計算機處理能力的大副提高,多媒體早已經融入到了計算機當中了,如果缺少了多媒體,缺少了各種多姿多采的圖象,音訊,影片,很難想象計算機如今會走入千家萬戶。長期以來,多媒體資訊在計算機中都是以檔案形式存放,由作業系統管理的,但是隨著計算機網路,分散式計算的發展,這種單純的檔案式管理已經力不從心了,對多媒體資訊進行高效的管理,存取,查詢已經成了一種迫切需求。而關聯式資料庫卻有著強大的資料管理能力。兩方面密切結合,多媒體資料庫由此應運而生。可以預見,隨著多媒體處理需求的加強,多媒體資料庫的應用將越來越廣泛。
Oracle作為一家著名的資料庫廠商,在多媒體資訊處理上,更是走在了前邊。本文將就Oracle對多媒體資訊進行處理的方式,工具,特色以及一些基本原理做一個綜述。希望對讀者有所啟發。當然,關聯式資料庫還有好多家,雖然開發工具,程式設計介面語句各異,但在資料型別、處理方式上比較相似。所以我們在此略過。
二.多媒體資料型別介紹
在關係型資料庫中,多媒體資訊等大型物件是由lob型欄位來進行存取的。在Oracle8i中,正式引入了此標準,以適應多媒體大物件處理的需求。Oracle資料庫中,lob型資料有以下幾種:
--------------------------------------------
Lob型別 說明
Clob: 和Oracle7的long型相似,clob可以儲存單位元組型資料
Nclob: Nclob儲存定寬的多位元組國家字符集資料
Blob: 和Oracle7中的long raw型別相似。可以儲存無結構的二進位制資料。Oracle8沒有對這種資料進行解釋 ,只是按照原來的形式儲存和檢索它。
Bfile: Bfile允許對Oracle資料庫以外儲存的大型二進位制檔案進行只讀形式的訪問。和其它三種lob型別資料 不同的是,bfile型別資料儲存在一個單獨的檔案中,該檔案不由Oracle來維護。
特點:
1.在Oracle7中,相應的long或long raw欄位有2g的限制,而lob的限制是4g 。
2.lob可以使用呼叫介面OCI或者由pl/sql利用dbms_lob包進行操縱。
3.lob不象long型那樣每個表中最多隻有一個欄位的限制,其可以有多個,而又可以利用觸發器的特性。
4.lob資料處理可以獲得與其它資料同樣的事物特性。
5.lob的儲存比較特殊,它並不是跟其他資料儲存在同一個資料庫表中,而是可以單獨存放於不同的表空間中,由一個定位符指向實際的lob資料。
三.多媒體大物件存取例程舉例
按照如下步驟來完成各個操作:
(1)先建立一個資料庫表:
create table lobdemo(key NUMBER KEY,clob_col CLOB,blob_col BLOB,bifle_col BFILE);
這個資料庫第一列儲存一個碼,另外三列儲存lob型資料。
(2)表建好以後,往表中插入一條資料:
insert into lobdemo(key,clob_col,blob_col,bfile_col) values (10,'abcdefghijklmnopqrsatuvwxyzasdffasfsdafsdafsdfadfsadfsdfsdfdsdsffds',empty_blob(),null);
在這一條資料中,第二列我們插入一個字串,它被格式化為clob型別資料進行儲存;第二列我們使用empty_blob()函式來初始化一個定位符,以後就可以獲取這個定位符進行比如select,update等操作了;第三列賦空值,它並沒有獲得一個定位符,這是與empty_blob()函式的區別。
(3)查詢插入表中的資料
select blob_col from boldemo where key=20;
注意:這一sql語句的返回結果是一個定位符(locator),而不是實際的資料本身。
(4)修改資料庫中資料
update lobdemo SET blob_col='aedevbagddgagdfdfasasdfdsa' where key=10;
從這些sql語句當中,我們看到了lob型資料處理的基本方法,發現與其他型別資料處理相似。但是sql語句中lob型資料處理的特殊性在於以下方面:
(1)bfile檔案的處理:
bfile型別有著特殊性,跟clob,blob不同。實際的資料檔案儲存在作業系統的外面:所以有兩個特點:1.沒有事務性控制 2.bfile是隻讀的,不能用dbms_lob或oracl8 oci進行修改。讓我們來看對bfile的操作步驟:
<1> 為了訪問外部檔案,伺服器需要知道檔案在作業系統中的位置。下面我們建立一個目錄:
create DIRECTORY utils AS '/home/utils';
utils表示目錄邏輯名,'/home/utils'是實際目錄。
<2>使用bfilename函式插入一行資料:
insert into lobdemo(key,bfile_col) values (-1,biflename('utils','file1'));
bfilename函式的第一個引數是邏輯目錄名,第二個引數是檔名。注意:這一行中插入的是一個指向/home/utils/file1的lob定位符,並不是檔案本身。
(2)利用dbms_lob包進行lob資料操作
sql僅可以操縱整個lob,而不能操縱資料片。dbms_lob包則放開了這個限制,它提供對lob資料中資料片的操作。這個包中包含十幾個例程,讀者可以查閱Oracle pl/sql手冊,本文只介紹三個函式:fileopen()用來開啟一個作業系統檔案;loadfromfile()例程用來往目標lob欄位填充一個作業系統檔案,這個函式很有實用價值,因為有許多lob內容在sql語句中是不可描述的,例如一個二進位制音訊檔案,而用這個函式可以將檔案內容匯入到資料庫;getlength函式計算檔案的長度。請看下面一個儲存過程中這三個函式的使用:
Internet的發展更突出了interMedia在WEB應用中的價值,現有的WEB應用絕大多數將image,audio,video等多媒體資訊存在檔案系統中,其優點是操作簡單,速度快,缺點是管理複雜,尤其是管理大量image時就受到目錄數等的限制。如果將image儲存在資料庫中,由資料庫來統一維護,統一備份,這樣就可以簡化管理。 Intermedia中定義了幾個多媒體物件型別,例如ORDAUDIO就是其中一個,它提供一些audio物件型別資料的操縱函式。下面我們來看一個例子,在這個例子中我們定義一個歌曲物件,建立一個歌曲物件的表,並對該表進行插入與查詢操作。 (1)定義一個歌曲物件: 五.多媒體資料庫技術難點與展望 可以說,多媒體資料的高效管理是IT技術發展的必然要求,隨著多媒體資訊需求的進一步加強,多媒體資料庫技術將會有更大的發展,從Oracle資料庫中我們可以看出,無論在資料型別,資料管理,還是開發管理工具上,現在的主流關聯式資料庫已經具有很強的多媒體資訊管理能力。但是我們不能不遺憾的看到,對一些多媒體資料所特有的操作(比如對多媒體資訊的查詢)能力還是很有限的。 一個問題就是多媒體資料的特殊操作實現,因為lob型資料是二進位制的大物件,他不能簡單的按照一般資料的運算子來進行計算。比如,要查出一個資料表中與某首歌相似的音訊。那麼對於這個'相似'操作來說,它得不到傳統的運算子的支援,而且它將涉及很複雜的演算法。可喜的是,Oracle9i Intermedia已經具有多媒體資料的查詢與匹配功能,例如,可以從質地(texture),形狀,顏色,顏色分量等要素進行相似圖象的查詢,在查詢時可以設定各個要素的權值,測試的結果還是差強人意的。但是對audio,video等型別資料的查詢仍然不夠理想。 另外,如何描述多媒體資訊,怎樣根據你對多媒體資訊的描述來檢索,也是一個難點問題,比如這個查詢任務:查詢出顏色比較暗的並且有森林的風景照片,這就是根據描述性資訊進行查詢的例子。這將需要某種行業標準和技術實現。總之,如何實現和最佳化針對多媒體資料的特殊操作(如相似查詢等),將是以後多媒體資料庫研究和應用中的熱點問題。 另外一個重要的問題就是針對多媒體資料庫的效能調優,原先的調優方法如索引最佳化等仍然適用,但是現在遇到了新的問題:多媒體資料是龐大的,那麼對多媒體資訊的操作(尤其是檢索)開銷巨大,那麼如何降低這種開銷,縮短操作時間,又是一個重要課題。 create or replace procedure FileExec(
CREATE TYPE songObject as OBJECT (
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10748419/viewspace-954139/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 如何處理Oracle資料庫中的壞塊問題(轉)Oracle資料庫
- 一次ORACLE資料庫undo壞塊處理Oracle資料庫
- Oracle資料庫中的逐行處理問題NEOracle資料庫
- mybatis+oracle 批次插入多條資料的處理方法MyBatisOracle
- oracle遊標批次處理資料Oracle
- Oracle日常問題處理-資料庫無法啟動Oracle資料庫
- 資料處理及跳轉
- Librarian Pro for mac(多媒體資訊資源管理)Mac
- Librarian Pro for mac多媒體資訊資源管理Mac
- go 如何處理資料庫返回的多結果集Go資料庫
- Oracle 資料庫的眾多 “NAME”Oracle資料庫
- Oracle資料庫處理壞塊問題常用命令Oracle資料庫
- 資訊處理技術基礎知識(2.4多媒體基礎知識 )--第2章
- SpringMVC:資料處理及跳轉SpringMVC
- python中多程式處理資料庫連線的問題Python資料庫
- 銀河麒麟系統安裝ORACLE資料庫問題處理Oracle資料庫
- 【轉】從msql資料庫處理高併發商品超賣SQL資料庫
- 【SQL】Oracle資料庫資料量及效能資訊收集SQLOracle資料庫
- Oracle DG資料庫狀態轉換Oracle資料庫
- Oracle資料庫日期格式轉換操作Oracle資料庫
- Python資料處理(二):處理 Excel 資料PythonExcel
- 【SCRIPT】Oracle資料庫基本資訊收集指令碼Oracle資料庫指令碼
- 手把手教你從資料預處理開始體驗圖資料庫資料庫
- 資料庫故障處理優質文章彙總(含Oracle、MySQL、MogDB等)資料庫OracleMySql
- mybatis怎麼實現insert into多個資料-oracle資料庫MyBatisOracle資料庫
- 經典資料庫備份與還原處理(轉鄒建)資料庫
- 玩轉大資料系列之二:資料分析與處理大資料
- ORACLE 資料庫管理員的職責(轉)Oracle資料庫
- 資料處理
- ORACLE資料庫檢視ACQ(ACTIVE CHECKPOINT QUEUE)資訊Oracle資料庫
- Oracle資料庫出現ORA-19566 LOB壞塊的處理記錄Oracle資料庫
- SQLServer資料庫日誌太大處理方式SQLServer資料庫
- [python] 基於Tablib庫處理表格資料Python
- 資料庫連線異常處理思路資料庫
- 生信公共資料庫下載處理資料庫
- Polars提供Javascript的資料處理庫 - levelupJavaScript
- JDBC連線批量處理資料入庫JDBC
- OracleDG資料庫gap處理一列Oracle資料庫
- Python 資料處理庫 pandas 入門教程Python