2011-10-01 20 views
7

我希望有人能夠解釋如何使用BLOB。我發現BLOB可以用來存儲視頻文件。我的問題是爲什麼一個人將視頻文件存儲在SQL數據庫的BLOB中?與將指針存儲到視頻文件的位置相比,有哪些優點和缺點?存儲視頻文件的SQL中的BLOB's

回答

6

有幾個不同的原因。

如果存儲指向磁盤上文件的指針(推測使用BFILE數據類型),則必須確保在磁盤上移動,重命名或刪除文件時更新數據庫。當你存儲這樣的數據時,相對常見的情況是,隨着時間的推移,你的數據庫會與文件系統不同步,並最終導致斷開的鏈接和孤立的內容。

如果您將指針存儲在磁盤上,則在處理多媒體時不能使用事務性語義。由於你不能像對文件系統發出回滾這樣的事情,你必須處理這樣一個事實,即你將遇到文件系統上的數據與數據庫中的數據不匹配的情況(即有人將視頻上傳到文件系統,但在數據庫中創建作者和標題的交易失敗,反之亦然),或者您必須在文件上傳中添加額外步驟以模擬交易語義(即上傳第二個<> _done.txt文件只包含上載的實際文件中的字節數,這很麻煩,容易出錯,並且可能產生可用性問題。一個用戶,如果你想避免給用戶一個直接的FTP URL給你的文件,因爲他們可以用它來繞過一些應用程序陽離子級別的安全性,最簡單的選擇是在數據庫支持的應用程序中檢索數據,數據庫從文件系統讀取數據,然後將其返回到中間層,然後將數據發送到客戶端。如果每次檢索數據時都必須將數據讀入數據庫,那麼將數據直接存儲在數據庫中並讓數據庫在用戶詢問時從數據文件中讀取數據通常更有意義爲了它。

最後,像Oracle這樣的數據庫提供了額外的工具來處理數據庫中的多媒體數據。例如,Oracle interMedia提供了一組豐富的對象來與存儲在數據庫中的視頻數據進行交互 - 您可以輕鬆標記場景開始或結束的位置,標記討論各種主題的位置,錄製視頻的時間,錄製人員等。您可以將搜索功能與針對所有關係數據的搜索進行整合。當然,你也可以在數據庫之上編寫一個應用程序來完成所有這些事情,但是你要麼編寫大量代碼,要麼在應用程序中使用另一個框架。利用數據庫功能通常要容易得多。