繁体   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