C# SQL Server 2008-存储文件

C# SQL Server 2008-存储文件,c#,database,image,sql-server-2008,filestream,C#,Database,Image,Sql Server 2008,Filestream,我正在针对SQLServer2008数据库构建一个MVC3 web应用程序。该web应用程序将允许用户上传照片和文档 当前,文件存储在“image”类型的列中 这样做可以吗,还是过时了 将存储移动到另一种数据类型或开始使用FILESTREAM有什么好处吗 统计数据-500(用户)x 7(每个平均文档)x 2MB(平均文档大小) 编辑1 任何人都可以评论;我当前正在做的事情--存储为“映像”数据类型--是否不好?您应该将映像存储在文件系统上。请参阅此线程: 至于文档,它们只是用户上传/下载的静态文

我正在针对SQLServer2008数据库构建一个MVC3 web应用程序。该web应用程序将允许用户上传照片和文档

当前,文件存储在“image”类型的列中

这样做可以吗,还是过时了

将存储移动到另一种数据类型或开始使用FILESTREAM有什么好处吗

统计数据-500(用户)x 7(每个平均文档)x 2MB(平均文档大小)

编辑1


任何人都可以评论;我当前正在做的事情--存储为“映像”数据类型--是否不好?

您应该将映像存储在文件系统上。请参阅此线程:


至于文档,它们只是用户上传/下载的静态文件,还是您会搜索文档中的内容?你需要对这些文件做什么特殊处理吗

根据我的经验,最好将文件存储在磁盘上,并在数据库中存储文件的路径。这将使您的数据库能够专注于它应该做的事情,而不是文件存储。

您可能希望在SQL SERVER 2008中查看新的数据类型。阅读该链接-它将为您提供一些指导,以确定这是否是合适的存储类型

(将我的评论移至答案)

From:ntexttextimage数据类型将在未来版本的Microsoft SQL Server中删除。避免在新的开发工作中使用这些数据类型,并计划修改当前使用它们的应用程序。改用nvarchar(max)、varchar(max)和varbinary(max)

如果您关心数据类型的计划淘汰,这是“不好的”。听起来
varbinary(max)
甚至
filestream
都是未来首选的数据类型


在数据库和文件系统中存储文件是一个独立的争论,其他人似乎都在讨论这个问题。

微软研究院有一篇非常好的论文,叫做

经过大量性能测试和分析,他们得出的结论如下:

  • 如果图片或文档的大小通常低于256K,则将其存储在数据库VARBINARY列中更有效

  • 如果图片或文档的大小通常超过1MB,则将其存储在文件系统中会更高效(使用SQL Server 2008的FILESTREAM属性,它们仍然处于事务控制之下,并且是数据库的一部分)

  • 在这两者之间,这取决于你的使用情况

如果您决定将图片放入SQL Server表中,我强烈建议您使用单独的表来存储这些图片-不要将employee foto存储在employee表中-将它们保存在单独的表中。这样,Employee表可以保持精简、平均和非常高效,前提是您不需要在查询中也选择Employee foto

对于文件组,请查看介绍。基本上,您可以从一开始就为大型数据结构使用单独的文件组创建数据库,或者稍后添加一个额外的文件组。我们称之为“大数据”

现在,每当要创建需要存储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简介,并使用它

+1,该链接值得仔细阅读,以获得支持,并考虑将文档存储在文件系统中。特别是如果它们是包含大量元数据的Office文档,您将使用昂贵的存储空间来存储真正的pro。单独存储它们还意味着您必须单独备份它们,并且还可能会导致您的表引用不存在的文件。是的,自2005年以来,
IMAGE
数据类型已被弃用-请改用
VARBINARY(MAX)