将图片存储到数据库中[重复]
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" >
然后客户端将从您的内容存储中获取图像。
【讨论】:
以上是关于将图片存储到数据库中[重复]的主要内容,如果未能解决你的问题,请参考以下文章