這是我所知的一個老問題,但對於SQL Server 2012,將文件存儲在數據庫中還是應該保存在文件系統中,並且只保存數據庫中的引用?在SQL Server中存儲文件
如果現在把它們存儲在數據庫中被認爲是可以接受的,那麼最有效的方法是什麼? 我打算申請加密,所以我很欣賞處理不會閃電般快。
感謝
這是我所知的一個老問題,但對於SQL Server 2012,將文件存儲在數據庫中還是應該保存在文件系統中,並且只保存數據庫中的引用?在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介紹文件組,並玩弄它!
說得好。這當然取決於用例,但文件流通常是一個不錯的選擇。 – TimothyAWiseman
您引用的研究文章是從2006年4月起。從那時起,很多事情都發生了變化。 – Oxon
@ 1576573987:不,不是真的 - 這些結論仍然有效,據我所知 –
您可能會在FILESTREAM讀了。下面是從文檔的一些信息,應該幫助你決定:
如果滿足以下條件,您應考慮使用FILESTREAM:正在存儲的平均
- 對象,大於1 MB。
- 快速讀取訪問非常重要。
- 您正在開發爲應用程序邏輯使用中間層的應用程序。
對於較小的對象,存儲的varbinary(最大)的BLOB在數據庫中通常會提供更好的數據流性能。
其實我可以做/兩者,這取決於文件大小。謝謝! – CompanyDroneFromSector7G
有仍然沒有簡單的答案。這取決於你的情況。 MSDN has documentation to help you decide.
這裏還有其他選項。可以使用SQL Server 2012中的FileStream或File Table,而不是直接存儲在文件系統中或存儲在BLOB中.File Table的優點看起來像是一個不聰明的人(但我承認我沒有親身體驗過他們的第一手經驗)
這篇文章絕對值得一讀。
+1,更好的鏈接2012年。 –
良好的信息謝謝! – CompanyDroneFromSector7G
不知道如果我這樣做。我只想知道現在是否可行。 – CompanyDroneFromSector7G