在SQL Server中存储图像?

时间:2011-04-10 18:40:13

标签: sql-server image

我制作了一个小型演示站点,并在其上我将图像存储在sql server上的image列中。我有几个问题......

  • 这是个坏主意吗?

  • 会不会影响我网站上的效果?

另一种方法是将图像存储在光盘上,并仅将对图像的引用存储在数据库中。这一定是许多人常见的困境。我会欢迎一些建议,如果可以的话,我会很乐意犯一个错误。

8 个答案:

答案 0 :(得分:234)

微软研究院的一篇非常好的论文名为To Blob or Not To Blob

经过大量的性能测试和分析后得出的结论是:

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

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

  • 介于这两者之间,取决于您的使用情况,这是一个小小的挑战

如果您决定将图片放入SQL Server表格,我强烈建议您使用单独的表格存储这些图片 - 不要将员工照片存储在员工表格中 - 将它们保存在单独的表格中。这样,员工表可以保持精简,平均且高效,假设您不总是需要选择员工照片作为查询的一部分。

对于文件组,请查看Files and Filegroup Architecture以获取简介。基本上,您可以从一开始就为大型数据结构创建具有单独文件组的数据库,或者稍后添加其他文件组。我们称之为“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简介,并使用它!

答案 1 :(得分:14)

我曾经陷入这种困境,并在谷歌上搜索了很多意见。我发现确实有很多人认为将图像保存到磁盘更好地用于更大的图像,而mySQL允许更容易访问,特别是从PHP等语言。

我发现了一个类似的问题

MySQL BLOB vs File for Storing Small PNG Images?

我的最终结论是,对于诸如个人资料图片之类的东西,只需要每个用户需要的小方形图像,mySQL比在hdd中存储一堆拇指更好,而对于相册和类似的东西那个,文件夹/图像文件更好。

希望有所帮助

答案 2 :(得分:13)

我更愿意将图像存储在目录中,然后将对图像文件的引用存储在数据库中。

但是,如果您将图像存储在数据库中,则应对数据库进行分区,以使图像列位于单独的文件中。

您可以在此处详细了解如何使用文件组http://msdn.microsoft.com/en-us/library/ms179316.aspx

答案 3 :(得分:10)

在SQL Server中存储图像时不要使用&#39;图像&#39;数据类型,根据MS,它正在SQL Server的新版本中逐步淘汰。使用 varbinary(max)代替

https://msdn.microsoft.com/en-us/library/ms187993.aspx

答案 4 :(得分:9)

为什么将图片存储在数据库中而不是存储在Web服务器上的目录中是一件好事。

您已经制作了一个应用程序,其中包含许多存储在服务器上的文件夹中的图片,客户已使用多年。

现在他们来找你。他们的服务器已被破坏,他们需要在新服务器上恢复它。他们不再访问旧服务器了。他们唯一的备份是数据库备份。

您当然拥有源代码,可以将其简单地部署到新服务器,安装SqlServer并还原数据库。但现在所有的照片都没了。

如果你已经在SqlServer中保存了图片,一切都会像以前一样工作。

只需2美分。

答案 5 :(得分:7)

另一个选项于2012年发布,名为文件表:https://msdn.microsoft.com/en-us/library/ff929144.aspx

答案 6 :(得分:1)

虽然性能问题有效,但实际上,应避免数据库中存储映像的真正原因是出于数据库管理的原因。您的数据库将非常迅速地增长,并且数据库的成本远远高于简单的文件存储。数据库备份和还原比文件备份还原更昂贵,更耗时。紧要关头,您可以比使用with肿的映像更快地恢复较小的数据库。将Azure上1 TB的文件存储与1 TB的数据库进行比较,您会发现成本上的巨大差异。

答案 7 :(得分:0)

根据我的经验,将URL存储到其他位置存储的图像是简单项目的最佳方法。