在SQL Server中存储图像?

mar*_*rko 179 sql-server image

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

  • 这是一个坏主意吗?

  • 当它增长时,它会影响我网站的性能吗?

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

mar*_*c_s 248

微软研究院发表了一篇非常好的论文,名为To Blob或Not To Blob.

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

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

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

  • 在这两者之间,根据您的使用情况,这有点偏僻

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

对于文件组,请查看文件和文件组体系结构以获取介绍.基本上,您可以从一开始就为大型数据结构创建具有单独文件组的数据库,或者稍后添加其他文件组.我们称之为"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
Run Code Online (Sandbox Code Playgroud)

查看文件组的MSDN简介,并使用它!


Kev*_*vez 14

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

我发现了类似的问题

用于存储小PNG图像的MySQL BLOB vs文件?

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

希望能帮助到你


Joh*_*ock 13

我更喜欢将图像存储在目录中,然后将对图像文件的引用存储在数据库中.

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

您可以在http://msdn.microsoft.com/en-us/library/ms179316.aspx上阅读有关使用文件组的更多信息.


小智 10

为什么将图片存储在数据库中并且不在Web服务器的目录中.

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

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

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

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

只需2美分.

  • 网络权限是一个好点。但是我没有看到您只有数据库备份的情况。您肯定会有应用程序和文件的备份。您可以很容易地丢失数据库但拥有文件。 (4认同)
  • 好点子。映像的备份与数据库备份一样重要……有时甚至更重要。 (3认同)

Zai*_*tet 10

在SQL Server中存储图像时,不要使用'image'数据类型,根据MS,它将在新版本的SQL Server中逐步淘汰.用VARBINARY(最大值),而不是

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


Cyr*_*ney 7

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


小智 5

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