簡體   English   中英

SQL Server 2008 - 存儲文件

[英]SQL Server 2008 - Storing Files

我正在構建一個針對SQL Server 2008數據庫的MVC3 Web應用程序。 該網絡應用程序將允許用戶上傳照片和文檔。

目前,文件存儲在“image”類型的列中。

這是一件好事,還是過時的做法?

將存儲移動到另一種數據類型或開始使用FILESTREAM有什么好處嗎?

統計 - 500(用戶)x 7(每個平均文件)x 2MB(平均文件大小)

編輯1

誰能評論; 是我目前正在做的 - 存儲為“圖像”數據類型 - 糟糕?

您應該將圖像存儲在文件系統上。 看到這個主題: 在DB中存儲圖像 - 是或不是?

至於文檔,它們只是用戶上傳/下載的靜態文件,還是在文檔中搜索內容? 你需要對文件做些什么特別的事嗎?

(將我的評論轉移到答案)

MSDN將在Microsoft SQL Server的未來版本中刪除 ntext textimage數據類型。 避免在新的開發工作中使用這些數據類型,並計划修改當前使用它們的應用程序。 請改用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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM