我已经做了一个小的演示网站,我在sql server上的一个图像列中存储图像。我有几个问题…
这是个坏主意吗? 当它增长时,它会影响我的站点的性能吗?
另一种方法是将图像存储在磁盘上,而仅在数据库中存储对图像的引用。这一定是很多人都遇到过的困境。我很欢迎你的建议,如果可以的话,我很乐意少犯一些错误。
我已经做了一个小的演示网站,我在sql server上的一个图像列中存储图像。我有几个问题…
这是个坏主意吗? 当它增长时,它会影响我的站点的性能吗?
另一种方法是将图像存储在磁盘上,而仅在数据库中存储对图像的引用。这一定是很多人都遇到过的困境。我很欢迎你的建议,如果可以的话,我很乐意少犯一些错误。
我更喜欢将图像存储在一个目录中,然后在数据库中存储对图像文件的引用。
但是,如果确实将图像存储在数据库中,则应该对数据库进行分区,以便图像列驻留在单独的文件中。
你可以在这里阅读更多关于使用文件组的信息http://msdn.microsoft.com/en-us/library/ms179316.aspx。
微软研究院有一篇很好的论文,叫《去斑点还是不去斑点》
经过大量的性能测试和分析,他们得出的结论是:
如果您的图片或文档通常小于256KB,那么将它们存储在数据库VARBINARY列中会更有效 如果你的图片或文档的大小通常超过1mb,那么将它们存储在文件系统中是更有效的(并且使用SQL Server 2008的FILESTREAM属性,它们仍然处于事务控制和数据库的一部分)。 在这两者之间,取决于你的用途
如果你决定把你的照片放在一个SQL Server表中,我强烈建议使用一个单独的表来存储这些照片——不要把员工照片存储在员工表中——把它们保存在一个单独的表中。这样,Employee表就可以保持精简、简洁和非常高效,前提是您并不总是需要在查询中选择员工照片。
对于文件组,请查看文件和文件组体系结构的介绍。基本上,您可以从一开始就为大型数据结构创建一个单独的文件组,或者稍后再添加一个额外的文件组。让我们称它为“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关于文件组的介绍,并使用它!
我曾经陷入过这样的困境,并在谷歌上进行了大量的研究以寻求意见。我发现,对于较大的图像,许多人确实认为将图像保存到磁盘更好,而mySQL允许更容易的访问,特别是从PHP等语言访问。
我发现了一个类似的问题
MySQL BLOB vs文件存储小PNG图像?
我的最终结论是,对于个人资料图片这样的东西,每个用户都需要一个小的方形图像,mySQL会比在硬盘上存储一堆拇指更好,而对于相册和类似的东西,文件夹/图像文件更好。
希望能有所帮助
为什么它可以很好地存储图片在数据库中,而不是在web服务器上的目录。
您已经创建了一个应用程序,其中有大量的图片存储在服务器上的一个文件夹中,客户端已经使用了多年。
现在他们来找你。他们的服务器已经被破坏,他们需要在一个新的服务器上恢复它。他们不能再访问旧服务器了。他们拥有的唯一备份是数据库备份。
当然,您已经有了源代码,可以简单地将其部署到新服务器,安装SqlServer并恢复数据库。但是现在所有的照片都不见了。
如果你已经将图片保存在SqlServer中,一切都将像以前一样工作。
这只是我的个人意见。
当在SQL Server中存储图像时不使用'image'数据类型,根据MS的说法,它将在新版本的SQL Server中逐步淘汰。使用varbinary(max)代替
https://msdn.microsoft.com/en-us/library/ms187993.aspx
While performance issues are valid the real reasons in practice that you should avoid storing images in a database are for database management reasons. Your database will grow very rapidly and databases cost much more than simple file storage. Database backups and restores are much more expensive and time-consuming than file backup restores. In a pinch, you can restore a smaller database much more quickly than one bloated with images. Compare 1 TB of file storage on Azure to a 1 TB database and you'll see the vast difference in cost.