[英]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.