将图片存储到数据库中[重复]

Posted

技术标签:

【中文标题】将图片存储到数据库中[重复]【英文标题】:Storing pictures into a database [duplicate] 【发布时间】:2014-12-19 12:36:11 【问题描述】:

我想知道将图像存储到具有最佳性能的 mysql 数据库中的最佳方法是什么。 (假设一个大数据库)

方案A:使用LONGBLOB类型并放入二进制内容

解决方案 B:将文件存储在主机上并将 URL 保存为 VARCHAR 类型

提前致谢

【问题讨论】:

【参考方案1】:

我想说,与其存储 url,不如存储图像名称(如“image1.png”)并将图像托管在您的服务器上。这应该有助于减少数据库大小和调用时间。然后以编程方式为 url 路径添加前缀并引用它。

如果图像位置发生变化,最好只保存文件名。这样你就不必担心更新整个表,你可以用 url 路径修复一行代码

【讨论】:

【参考方案2】:

我倾向于将它们放入数据库中。这样,当您对数据库进行备份时,它们就会打包在一起。如果您曾经移动服务器,那么您不必担心从文件系统中移动文件。

除非您谈论的是大文件 (GB),否则我怀疑您会发现文件系统与.db 性能有很大差异。

无论哪种方式都适合您,只是偏好问题以及最适合您的特定情况的方式。

SO 和互联网上已经有很多答案。Storing Images in DB - Yea or Nay?

【讨论】:

【参考方案3】:

如果您正在构建一个需要扩展以提供许多图像的系统:将图像内容放在 DBMS 中存在巨大的缺点。

Web 服务器可以围绕大型通用文件存储系统进行集群,并且可以非常有效地提供图像。这种文件服务架构已经被 Apache、nginx 和 IIS 等各种 Web 服务器产品高度优化。

但是,如果您将图像放在数据库 BLOB 中,从数据库中获取它们就会成为瓶颈。另外,您需要运行一个脚本(php、.net 等)来为每个图像提供服务。

几乎所有生产网站都直接从文件中提供图像。您可以在您的 DBMS 中存储文件存储中的位置,然后将它们转换为您发送的 html 页面中的 URL。

例如,如果imgloc 列包含u/10234/abcde.img,并且表格也有宽度和高度列,您的网络应用程序可以发出类似

<img src="/content/u/10234/abcde.img"  >

然后客户端将从您的内容存储中获取图像。

【讨论】:

以上是关于将图片存储到数据库中[重复]的主要内容,如果未能解决你的问题,请参考以下文章

个人资料图片-如何存储[重复]

数据库中图片存储为BLOB类型,如何取出转换

firebase 存储 - 获取图像 URL [重复]

图片上传存储策略

关于使用C#将图片用二进制方式存储到sql server数据库中

数据库一般不用来存储图片