2009-02-18 51 views
113

我的問題是很普通的,我知道有可能不是一個100%的回答。我正在構建一個ASP .NET Web解決方案,其中將包含大量圖片並希望獲得相當數量的流量。我確實想要取得成績。將圖片存儲爲文件或存儲在網絡應用程序的數據庫中?

我應該保存圖片在數據庫或文件系統上?無論答案如何,我更關心爲什麼要選擇特定的方式。

非常感謝, 斯特凡

DUPLICATEStoring Images in DB - Yea or Nay?How to store images in your filesystemStoring a small number of images: blob or fs?,可能有一些其他人。


評論:感謝您的許多很好的答案。即使我喜歡擁有100%數據庫驅動解決方案的想法,我也會選擇基於文件的解決方案。看來,今天有很好的解決方案來做我想要的數據庫等,但我有一些不這樣做的原因。

  • 我將在一個託管的解決方案,我有大量的存儲(10GB),但只有300MB的數據庫。在數據庫中額外存儲會花費很多。

  • 我不是一個DB專家,以及不是在數據庫的設置控制。基於數據庫的解決方案可能需要自定義配置。

如果我們將移動到我們自己的服務器上運行該網站,我可能會考慮一個基於數據庫的解決方案。 謝謝, Stefan

+1

請指定您正在使用的數據庫。 – 2009-02-18 15:21:01

+1

我打算使用更高版本的MSSQL。 – StefanE 2009-02-18 15:29:12

+1

@StefanE,對於所有意圖和目的,文件系統都是針對文件存儲優化的專用數據庫。 – LukeH 2009-02-19 01:11:26

回答

161

將圖片存儲在數據庫中的文件系統和圖片位置上。

爲什麼?因爲...

  1. 您將能夠將圖片作爲靜態文件提供。
  2. 不需要數據庫訪問或應用程序代碼來獲取圖片。
  3. 可以從不同的服務器提供圖像以提高性能。
  4. 它會減少數據庫瓶頸。
  5. 數據庫最終將其數據存儲在文件系統上。
  6. 存儲在文件系統上時,可以輕鬆地緩存圖像。
6

更好地將文件存儲爲文件。不同的數據庫以不同的方式處理Blob數據,因此如果您必須遷移後端,則可能會遇到麻煩。

當向服務器上已存在的文件提供< img src =時,可能比從數據庫字段創建臨時文件並指向< img標籤更快。

我發現谷歌上搜索,從你的問題,並在http://databases.aspfaq.com/database/should-i-store-images-in-the-database-or-the-filesystem.html

+1

推薦文章似乎有點過時了。 – devio 2009-02-18 15:27:46

11

閱讀的評論在我最近開發的項目,這樣的回答,我存儲的圖像(和各種二進制文檔中)在數據庫表image列。

存儲在數據庫中有文件的好處是明顯的,你不跟在硬盤引用文件結束,如果一條記錄被刪除,因爲數據庫(=元數據)和硬盤(=文件存儲)之間的同步是不是內置的,必須手動編程。

使用今天的技術,我建議你在SQL Server 2008 FILESTREAM列中存儲圖像(至少這是我將要處理的下一個項目),因爲它們結合了將數據存儲在數據庫中的優點, (至少根據廣告;)單獨的文件)

3

對於基於Web的應用程序,你會得到更好的表現出使用的文件系統,用於存儲圖像。這樣做可以讓您輕鬆實現應用程序中多個級別的圖像緩存。將圖像存儲在數據庫中有一些優點,但大多數情況下這些優點都是基於客戶端的應用程序。

7

的格言一直

6

我通常喜歡二進制文件在數據庫中,因爲「文件中的文件系統,數據庫中的文件元數據」:

  • 數據完整性:沒有未引用文件,在沒有任何文件關聯數據庫的路徑
  • 數據一致性:採取數據庫轉儲,這就是全部。沒有「噢,我忘了打這個數據目錄。」
0

只是爲了增加一些到已經很好的答案到目前爲止。如果您使用路由將圖像保存在數據庫中,則仍然可以從網絡級別或許和數據庫級別獲得緩存的好處。

我認爲對於數據庫,您可以通過如何存儲與相關文本數據相關的圖像來實現這一點,以及如果可以將圖像訪問到特定查詢中,以便數據庫可以緩存查詢(只是理論,儘管如此隨意在這一部分加強我)。

隨着網絡方面,我猜想,因爲你的問題被標記爲與asp.net,你會去使用HTTP處理程序來提供圖像的路線。然後,您可以使用框架的所有優勢,並且只需將密鑰傳遞到http處理程序即可讓您保持域邏輯更清晰。

4

在數據庫中存儲的圖像增加了一個DB開銷服務單個圖像,並使其難以卸載到備用存儲(S3,Akami)如果增長到這一水平。將它們存儲在數據庫中使得將應用程序移動到不同的服務器變得更加容易,因爲它只是需要現在移動的數據庫。

在磁盤上存儲的圖像可以很容易地卸載到備用存儲,使得圖像靜態元素,所以你不必招惹你的Web應用程序,使圖像可緩存的HTTP標頭。缺點是,如果您將應用移至另一臺服務器上,則需要記住移動這些圖像;一些容易被遺忘的東西。

-1

爲什麼不選擇一個單獨的NoSql數據庫來存儲您的文件。

它爲您帶來數據完整性,數據一致性如@chburd所述。

雖然你rdbms仍然很小。

相關問題