2011-11-30 23 views
2

繼承人的應用用本地數據庫在WPF中存儲/處理文件附件的最佳方式是什麼?

基本的背景知識..

  1. 多個用戶(通常只有一個),每臺機器
  2. 本地SQL Server數據庫運行在每臺機器上持有自己的數據
  3. WPF應用程序有能力將表中的數據導出到zip文件

因爲它現在坐着,所以我無法改變它的環境。

我看到兩個選項與保存/上傳附件處理到文檔(PDF,DOC) 目前暫無大小要求或需要擴展我的知識

  1. 保存每個文件作爲VARBINARY直接進入該數據庫,並使用FK的和參考表來獲得這些文件附件回到開

  2. 具有相同FK的和參考表的應用程序,但我保存到文件到某個文件夾上的本地硬盤(哈希值+加密? )。然後,我將該文件重命名爲通用名稱,並將該文件的名稱和位置存儲在數據庫中。

第一選擇似乎做作,當我在web開發中涉及這一點,但因爲我有一個應用程序服務器,我沒有擔心可能的用戶的干擾。

我喜歡的方案二,但這些文件可以由用戶移動,拋開一切不正常的,可能留下了數據庫或孤立的文件孤立子記錄的選項。

對此有最佳做法嗎?

回答

1

如果使用支持的SQL Server版本,最好的辦法是使用FILESTREAM data type,因爲它提供了很多性能優勢,以使其值得,除非所有存儲的對象都小於1MB。

從文章:

如果滿足以下條件,你應該考慮使用 FILESTREAM:正在存儲

對象是,平均大於1 MB。

快速讀取訪問非常重要。

您正在開發應用程序,該應用程序使用中間層用於應用程序 邏輯。

對於較小的對象,在數據庫 中存儲varbinary(max)BLOB通常會提供更好的流式傳輸性能。

希望有所幫助!

+0

看着它,它看起來正是我想要的。讓sql server處理指針引用並消除超越varbinary max的可能性。隨同將它保存在文件系統而不是數據庫文件。 – Tim

0

這完全取決於您的要求。

如果你希望能夠到SQL數據庫從一臺機器複製到另一個,或者如果你想通過還原數據庫備份到具有完整的災難恢復,那麼選項1是你最好的選擇。當然這意味着你的數據庫可以增長得相當大。

如果你要保持你的數據庫較小,可以確保您的目錄或文件系統的保護,就不需要上述要求,那麼選項2是一個不錯的選擇。

我不知道你的要求,但對於我過去的選項1項目一直是最好的。

0

這是性能VS一致性的問題。我從本地SQL Server數據庫的二進制列提供了1 GB的圖像集合(每個大約100 KB),並且工作順利。我們甚至允許將數據庫作爲遠程服務器安裝到多個用戶,並仍然正常工作(儘管我們不支持大量的併發用戶)。

我們曾經有一個Access數據庫,其中包含磁盤上的文件,但用戶經常會搞亂文件結構並丟失文件等。將它們存儲在數據庫中已經證明非常可靠並且性能不是很差。備份,權限管理和導入/導出非常簡單。

我會推薦選項1,除非您有其他需要的性能要求。

相關問題