将图片存储为文件还是像网络应用程序的 MSSQL 那样存储在数据库中?

我在建一个 ASP。NET 网络解决方案,将包括大量的图片,希望有相当数量的流量。我真的很想表现出色。

我应该将图片保存在数据库中还是保存在文件系统中?不管答案是什么,我更感兴趣的是为什么选择一种特定的方式。

51778 次浏览

最好将文件存储为文件。不同的数据库处理 Blob 数据的方式不同,因此如果必须迁移后端,可能会遇到麻烦。

当向服务器上已经存在的文件提供图像时,< img src = 可能比从数据库字段生成临时文件并将 < img 标记指向该文件更快。

我通过在谷歌上搜索你的问题和阅读 http://databases.aspfaq.com/database/should-i-store-images-in-the-database-or-the-filesystem.html的评论找到了这个答案

在我最近开发的项目中,我将图像(以及各种二进制文档)作为图像列存储在数据库表中。

将文件存储在数据库中的好处显然是,如果一条记录被删除,那么硬盘上不会出现未引用的文件,因为数据库(= 元数据)和硬盘(= 文件存储)之间的同步不是内置的,必须手动编程。

使用今天的技术,我建议您将图像存储在 SQL Server 2008 FILESTREAM 列中(至少这是我在下一个项目中要做的) ,因为它们结合了在数据库中存储数据和在单独文件中使用大型二进制文件的优势(至少根据广告;)

对于基于 Web 的应用程序来说,使用文件系统存储图像可以获得更好的性能。这样做将使您能够轻松地在应用程序的多个级别上实现映像的缓存。在数据库中存储图像有一些优势,但是大多数时候这些优势来自基于客户端的应用程序。

将图片存储在文件系统中,并将图片位置存储在数据库中。

为什么? 因为..。

  1. 您将能够将图片作为静态文件提供。
  2. 获取图片不需要数据库访问或应用程序代码。
  3. 这些映像可以从不同的服务器提供,以提高性能。
  4. 它将减少数据库瓶颈。
  5. 数据库最终将其数据存储在文件系统中。
  6. 图像可以很容易地缓存时,存储在文件系统上。

格言一直是“文件系统中的文件,数据库中的文件元数据”

我通常喜欢在数据库中保存二进制文件,因为:

  • 数据完整性: 没有未引用的文件,数据库中没有路径,没有任何相关的文件
  • 数据一致性: 获取一个数据库转储,就是这样。没有“ O i 忘记了 targz 这个数据目录。”

只是为了给目前为止已经很好的答案增加一些内容。如果采用将图像保存在数据库中的方法,那么仍然可以从 Web 级别的 也许和数据库级别获得缓存的好处。

我认为对于数据库来说,你可以通过如何存储与文本数据相关的图像来实现这一点,如果你可以访问特定的查询中的图像,这样数据库就可以缓存查询(只是理论上的,所以在这一点上请随意攻击我)。

在 web 方面,我猜想因为你的问题是用 asp.net 标记的,所以你会使用 http 处理程序来提供图片。然后,您就可以处理框架的所有好处,并且只需要将映像的密钥传递给 http 处理程序,就可以保持域逻辑的清洁。

在数据库中存储映像会增加数据库开销来服务单个映像,并且如果您增长到这个级别,将很难将其卸载到备用存储(S3,Akami)。将它们存储在数据库中使得将应用程序移动到其他服务器变得更加容易,因为现在需要移动的只是数据库。

将图像存储在磁盘上可以方便地将图像转移到备用存储器,使图像成为静态元素,这样就不必在 Web 应用程序中使用 HTTP 头来使图像可缓存。缺点是,如果你将应用程序移动到不同的服务器上,你也需要记住移动图像; 这些东西很容易被忘记。

  1. 下面是一个分步示例(一般方法,Spring 实现,Eclipse) ,它将映像存储在文件系统中,并将它们的元数据保存在 DB-中 Http://www.devmanuals.com/tutorials/java/spring/spring3/mvc/spring3mvcimageupload.html
  2. 这里也有一个例子—— http://www.journaldev.com/2573/spring-mvc-file-upload-example-tutorial-single-and-multiple-files
  3. 也可以研究这个项目的代码库—— https://github.com/jdmr/fileUpload。注意 这个控制器。