2012-07-11 63 views
7

所以我有這個要求,說應用程序必須允許用戶上傳和下載,每月(大多是PDF,DOC,XLS)約6000文件。數據庫中的BLOB VS磁盤存儲的文件

我正在考慮這方面的最佳解決方案。問題是我將在數據庫中使用BLOb,還是使用簡單的文件層次結構來編寫/讀取這些文件。

的應用程序體系結構是基於Java 1.6,春季3.1和Dojo,Informix的10.X.

所以我在這裏我只是被告知根據你的經驗。

+0

你打算使用哪個數據庫? – 2012-07-11 17:52:57

+0

好點,這是Informix 10.X – 2012-07-11 18:54:19

+1

我想pro數據庫的唯一一點是併發訪問...但是,無論如何,數據庫也使用文件(其中一些主要使用RAM,但一旦填充,它們緩存到文件)。直接使用文件將節省數據庫資源(連接,查詢等) – PEM 2012-07-12 07:19:20

回答

6

如果在數據庫中有關這些文件的其他數據,存儲文件到文件系統,使得它更復雜:

  1. 備份應該分開進行。
  2. 事務必須單獨實現(儘可能爲文件系統操作)。
  3. 數據庫和文件系統結構之間的完整性檢查不會開箱即用。
  4. 沒有級聯:刪除用戶圖片作爲刪除用戶的結果。
  5. 首先,您必須從數據庫中查詢文件的路徑,然後從文件系統中選擇一個路徑。

基於文件系統的解決方案的好處在於,有時可以直接訪問文件,比如將圖像的一部分複製到別處,這很方便。同時存儲二進制數據當然可以大大改變數據庫的大小。但無論如何,這兩種解決方案都需要更多的磁盤存儲。

當然,所有這一切都可以比現有多問DB資源。一般而言,性能會受到很大影響,特別是如果在本地文件系統和遠程數據庫之間做出決定。在你的情況下(每月6000個文件)原始性能不會是問題,但延遲可能是。

9

當詢問什麼是「最好」的解決方案,這是一個好主意,包括您的評價標準 - 速度,成本,簡單,維護等

答案米克Maunu了相當多的錢。 20年來我沒有使用過Informix,但是大多數數據庫在處理BLOB時有點慢 - 特別是BLOB進出數據庫的步驟可能會很慢。

隨着更多的用戶同時訪問系統,這個問題往往會變得更嚴重,特別是如果他們使用Web應用程序 - 應用程序服務器必須非常努力地將文件導入和導出數據庫,可能會消耗更多的內存對於那些比正常要求更高的請求,並且可能需要更長的時間才能完成與「正常」頁面相關的文件相關請求。

這可能導致Web服務器只有中等負荷下放緩。如果您選擇將文檔存儲在數據庫中,我強烈建議您運行一些性能測試以查看是否有問題 - 這種解決方案往往會暴露您的設置中的漏洞,否則這些漏洞將不會被發現(網絡速度慢連接到數據庫服務器,RAM在你的web服務器不足等)

爲了避免這種情況,我已經存儲在數據庫中的文檔的「主人」的副本,所以他們都被備份起來,和我可以詢問數據庫問題,如「我是否擁有用戶x的所有文檔?」。但是,我在Web服務器上使用了一個緩存,以避免從數據庫中讀取比我需要的更多的文檔。如果您有像內容管理系統那樣的「一次寫入,多次讀取」時間解決方案,緩存可以獲得保留,這種方式會很有效。

相關問題