我已經做了一個小演示網站,並在它上面存儲圖像在sql服務器上的圖像列。我有幾個問題是...在SQL Server中存儲圖像?
這是一個壞主意嗎?
當它增長時,它會影響我網站的性能嗎?
另一種方法是將圖像存儲在光盤上,並只將圖像的引用存儲在數據庫中。這一定是許多人共同的困境。我會歡迎一些建議,如果可以的話,我會很樂意儘可能減少錯誤。
我已經做了一個小演示網站,並在它上面存儲圖像在sql服務器上的圖像列。我有幾個問題是...在SQL Server中存儲圖像?
這是一個壞主意嗎?
當它增長時,它會影響我網站的性能嗎?
另一種方法是將圖像存儲在光盤上,並只將圖像的引用存儲在數據庫中。這一定是許多人共同的困境。我會歡迎一些建議,如果可以的話,我會很樂意儘可能減少錯誤。
微軟研究院有一篇名爲To Blob or Not To Blob的非常好的論文。
他們大量的性能測試和分析後得出的結論是這樣的:
如果您的圖片或文檔通常低於在大小256K,將它們存儲在一個數據庫VARBINARY列更有效
如果您的圖片或文檔通常大小超過1 MB,將它們存儲在文件系統中更有效(與SQL Server 2008中的FILESTREAM屬性,他們仍然事務控制,數據庫的一部分下)
在這兩個之間,這取決於你的使用有點難以取捨的
如果你決定把你的照片到SQL Server表,我會強烈建議使用一個單獨的表用於存儲那些圖片 - 不要將員工照片存儲在員工表中 - 將他們保存在單獨的表格中。這樣一來,假設您並不總是需要選擇員工照片作爲查詢的一部分,那麼員工表可以保持精簡併且非常有效。
對於文件組,請查看Files and Filegroup Architecture的介紹。基本上,您可以從一開始就爲大數據結構創建一個單獨的文件組的數據庫,或者稍後添加一個額外的文件組。我們稱之爲「LARGE_DATA」。
現在,只要你有一個新的表來創建一個需要存儲VARCHAR(MAX)或VARBINARY(MAX)列,可以爲大型數據指定該文件組:
CREATE TABLE dbo.YourTable
(....... define the fields here ......)
ON Data -- the basic "Data" filegroup for the regular data
TEXTIMAGE_ON LARGE_DATA -- the filegroup for large chunks of data
時退房MSDN介紹文件組,並玩弄它!
我寧願將圖像存儲在目錄中,然後將對圖像文件的引用存儲在數據庫中。
但是,如果您將圖像存儲在數據庫中,則應對數據庫進行分區,以便圖像列位於單獨的文件中。
你可以在這裏閱讀更多關於使用文件組http://msdn.microsoft.com/en-us/library/ms179316.aspx。
我一度陷入這種困境,並對谷歌的意見進行了相當多的研究。我發現的確有很多人認爲將圖像保存到磁盤可以更好地處理較大的圖像,而mySQL允許更輕鬆地訪問,特別是使用PHP等語言。
我發現了一個類似的問題
MySQL BLOB vs File for Storing Small PNG Images?
我最後的判決是對的東西,如個人資料圖片,只需要爲每個用戶有一個小正方形圖像時,MySQL會比存儲更好一堆拇指在硬盤,而對於相冊和類似的東西,文件夾/圖像文件更好。
希望它可以幫助
爲什麼它可以很好的將照片存儲在數據庫中的一個不是在Web服務器上的目錄。
您已經制作了一個應用程序,其中包含許多存儲在服務器上的文件夾中的圖片,客戶端已使用了多年。
現在他們來找你。他們的服務器已被破壞,他們需要在新的服務器上恢復它。他們再也無法訪問舊服務器。他們唯一的備份是數據庫備份。
你當然有源代碼,可以簡單地將它部署到新的服務器,安裝SqlServer和恢復數據庫。但是現在所有的照片都消失了。
如果你已經在SqlServer中保存了圖片,一切都會像以前一樣工作。
只是我2美分。
好點。圖像的備份與數據庫備份一樣重要......有時更是如此。 – 2017-11-06 16:51:51
文件系統上的圖像也需要網絡權限。 – 2017-11-06 16:59:49
當在SQL Server 中存儲圖像時,請勿使用'圖像'數據類型,根據MS,它將在新版本的SQL Server中逐步淘汰。使用VARBINARY(最大值)代替
另一種選擇是在2012年被稱爲文件表公佈:https://msdn.microsoft.com/en-us/library/ff929144.aspx
是否有這個問題在2017年任何新增加的?至今仍然有效嗎? – 2017-07-10 00:35:11