2009-02-19 214 views
5

我正在工作的網站(使用asp.net 3.5),其中用戶可以上傳一個或多個簡歷。 數據庫是sql server 2005. 關於這些文檔存儲的建議是什麼? 我應該將它作爲blob存儲在數據庫中,還是將路徑存儲在數據庫中並將文檔保存在物理文件夾中? 有人可以提及每個wrt性能和可擴展性的優缺點嗎?存儲word文檔

謝謝!

+0

將它們轉換爲純文本並存儲在Text列中... Pro:現在您可以使用FTS索引它們。其他專業:你擺脫所有煩人的格式。 – Shog9 2009-02-19 02:06:10

回答

1

在數據庫中存儲文件,爲您提供:

(+)更容易內務管理,磁盤

(+)一致的編程和訪問模型(授權)

上沒有孤立的文件( - )數據庫增長過快,這將增加備份時間和磁盤空間的使用來保存備份文件

我不認爲這兩個選項都比另一個更好。如果您期望的文檔數量非常大,那麼您將達到有關目錄中文件數量的限制(作爲絕對限制,或者因爲目錄查找在特定點上開始執行得非常糟糕)。

+0

感謝您的回答...! – 2009-02-19 15:26:13

0

將數據保存在數據庫中將使管理日期變得更容易。您不必確保數據庫中的數據與文件系統上的數據(文件路徑)保持同步。

說了這麼多之後,意識到在數據庫中存儲大型數據塊時可能會遇到性能問題,這一點很重要。幸運的是,在這方面已經做了一些研究來調查可能的情況。我建議你看看微軟研究院關於這個主題的this paper。希望有所幫助。

此外,我應該提到的是,Microsoft SharePoint將其Word文檔(以及其他文件)作爲斑點存儲在SQL Server數據庫中。你可以閱讀更多關於這個here

0

沒有什麼可說不能做的 - 解析文檔&將重要的元信息(如聯繫信息,常用詞等)存儲到索引列中,存儲文檔路徑。這是我爲高可用性(每月高達21M次展示)所做的,但我們提供的是媒體文件,但文件大小&本質上大致相同。

0

您可以嘗試將文檔文件存儲在單獨的數據庫中並使用簡單恢復模式。然後,您可以輕鬆地備份文檔數據庫,而無需擔心備份的大小膨脹。

0

我已經有兩個系統將文件存儲在文件夾中 - 當我們得到一個文件夾中的大約20K個文件時,這兩個系統的縮放比例都很差。可以通過使用子文件夾來解決(例如2008-01,2008-02),但正如其他人所說的那樣,您遇到了同步問題。

數據庫允許您存檔/刪除舊的簡歷並且不存在同步問題。只要您不想全文搜索數據,就可以在存儲/檢索時壓縮/解壓縮文本。假設一個10-20K的文件,你可能壓縮到1-2K。不是那麼大。

0

我負責管理許多TB圖像的一些應用程序。我認爲這個應用程序是相似的,因爲它將相對較大的文件存儲到典型的數據庫行中。我們發現在數據庫中存儲文件路徑是最好的。

有幾個問題:

  • 數據庫存儲通常比文件系統存儲更加昂貴。
  • 您可以使用標準的現成產品加速/分發文件系統訪問。
  • 像web服務器等東西,不需要特殊的編碼或處理來訪問文件系統中的圖像。
0

我建議將它存儲在數據庫中以保持一致。

在數據庫中存儲時要考慮的另一點是SQL數據庫可以由多個文件組成。我建議的是在該數據庫上創建第二個文件(.ndf),該文件包含包含BLOB數據的表。

這提供了一些關鍵的好處,它可以(1)在單獨的磁盤陣列上運行,如果有更多的需求需要它。 (2)可以分別進行備份和恢復。 (3)不會膨脹你的主OLTP數據庫文件。

0

我會用每一個工作的最佳工具去:

  • 存儲和查詢數據的最佳數據庫類型是關係型數據庫。
  • 管理文件的最佳數據庫是文件系統。

使用文件系統將允許你使用正確的工具用於管理文件:您可以使用OS的壓縮功能,使用增量備份工具等,並沒有與可能包含大量有時製作粗糙的Word文檔臃腫數據庫圖片。

隨着文件數量變大,從文件系統的角度來看問題很容易解決:將文件存儲到相對路徑目錄中,以便可以控制每個目錄下文件的數量(例如,創建每週文件夾或在文件數超過一定限制時創建新文件夾)。
然後你只需要保持文件在數據庫中的相對路徑。

我還會在提交時對文件名進行標準化以保持它們的一致性,如20090219-001.doc

如其他建議,您可以解析doc文件以提取純文本信息並將其存儲在數據庫中以獲得文本搜索的好處。