[英]SQL Server 2008 - Storing Files
我正在構建一個針對SQL Server 2008數據庫的MVC3 Web應用程序。 該網絡應用程序將允許用戶上傳照片和文檔。
目前,文件存儲在“image”類型的列中。
這是一件好事,還是過時的做法?
將存儲移動到另一種數據類型或開始使用FILESTREAM有什么好處嗎?
統計 - 500(用戶)x 7(每個平均文件)x 2MB(平均文件大小)
編輯1
誰能評論; 是我目前正在做的 - 存儲為“圖像”數據類型 - 糟糕?
您應該將圖像存儲在文件系統上。 看到這個主題: 在DB中存儲圖像 - 是或不是?
至於文檔,它們只是用戶上傳/下載的靜態文件,還是在文檔中搜索內容? 你需要對文件做些什么特別的事嗎?
(將我的評論轉移到答案)
從MSDN : 將在Microsoft SQL Server的未來版本中刪除 ntext , text和image數據類型。 避免在新的開發工作中使用這些數據類型,並計划修改當前使用它們的應用程序。 請改用nvarchar(max),varchar(max)和varbinary(max)。
如果您關心數據類型的計划過時,那就太“糟糕”了。 聽起來像varbinary(max)
甚至文件filestream
是未來的首選數據類型。
將文件存儲在數據庫與文件系統之間是一個單獨的爭論,其他人似乎都在跳躍。
您可能想要在SQL SERVER 2008中查看新的FILESTREAM數據類型。閱讀鏈接 - 它將為您提供一些指導,以確定這是否是適當的存儲類型。
微軟研究院發表了一篇非常好的論文,名為To Blob或Not To Blob 。
經過大量的性能測試和分析,他們的結論如下:
如果您的圖片或文檔的大小通常低於256K,則將它們存儲在數據庫VARBINARY列中會更有效
如果您的圖片或文檔的大小通常超過1 MB,則將它們存儲在文件系統中會更有效(並且使用SQL Server 2008的FILESTREAM屬性,它們仍處於事務控制之下並且是數據庫的一部分)
在這兩者之間,根據您的使用情況,這有點偏僻
如果您決定將圖片放入SQL Server表中,我強烈建議您使用單獨的表來存儲這些圖片 - 不要將員工foto存儲在employee表中 - 將它們保存在單獨的表中。 這樣,員工表可以保持精簡,平均且非常高效,假設您並不總是需要選擇員工foto作為查詢的一部分。
對於文件組,請查看文件和文件組體系結構以獲取介紹。 基本上,您可以從一開始就為大型數據結構創建具有單獨文件組的數據庫,或者稍后添加其他文件組。 我們稱之為“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簡介,並使用它!
根據我的經驗,最好將文件存儲在磁盤上並存儲數據庫中文件的路徑。 這樣可以釋放數據庫,專注於它應該做的事情,而不是文件存儲。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.