2010-01-15 108 views
2

我正在設計一個原型應用程序來存儲圖像,類似於facebook。這將是一個面向公衆的網站,我不確定會有多少用戶,但是我正在尋找的是一種有效檢索它們的方法。使用MVC和Sql服務器存儲和檢索圖像

到目前爲止,我正在考慮將它們存儲在SQL Server varbinary列中。這是一個好主意嗎?我有上傳代碼和存儲代碼。我關心的是檢索它們。我可以隨時取消並構建圖像標籤,但我擔心必須爲每個數據庫創建數據庫。

我一直在考慮爲用戶獲取所有圖像並將它們緩存在asp.net緩存中10到30秒。我從來不需要做這樣的事情,所以我會有興趣聽到幾種不同的方法。很明顯,圖像的大小可能會有所不同,我正在考慮定義大小限制,但我還沒有得到那麼多。

感謝您的幫助。 Paul Speranza

回答

2

我認爲IIS在緩存靜態內容方面已經做得非常好,所以我可能會將這些圖像保存到磁盤上並保存它們在數據庫中的位置信息。

+0

我同意。將Uri存儲在數據庫和磁盤上的文件中。如果您的網站增長,那麼可以將物理文件移動到SAN。 – Junto 2010-01-15 13:13:43

+0

謝謝你的評論。由於我從來沒有使用SAN,我的下一個問題是,即使使用SAN將在另一臺設備上有文件,它會比去數據庫更高效嗎? – 2010-01-15 14:22:07

0

首先,您可以在將圖像放入sql server之前重新調整圖像大小。 此外,你可以使一個http處理程序從sql server檢索圖像,但我會設置緩存爲一兩分鐘,而不是更少。他們沒有改變那麼多。

context.Response.Cache.SetExpires(DateTime.Now.AddMinutes(10)); 

另一種選擇是存儲在文件服務器上,你可以寫這些文件的任何地方IIS具有的權限,並且該文件「URL」存儲,如「C:\影像\ test.jpg放在」在數據庫中。但是,那麼當記錄被刪除時,你必須寫一些東西來刪除文件。

2

不要將圖像存儲在數據庫中。它會傷害你的數據庫和你的網站的性能。

唯一的例外是,如果你打算使用SQL 2008的FILESTREAM類型,它基本上使用文件系統來存儲文件,並在數據庫中保存對它的引用。

絕對不會將原始圖像數據存儲在varbinary列中。

相關問題