我想知道将图像存储到具有最佳性能的MySQL数据库中的最佳方法是什么。 (假设一个大数据库)
解决方案A:使用LONGBLOB
类型并输入二进制内容
解决方案B:将文件存储在主机上,并保存URL VARCHAR
类型
提前致谢
答案 0 :(得分:2)
我会说,而不是存储网址,存储图像名称,如“image1.png”,并将图像托管在您的服务器上。这应该有助于减少db大小和调用时间。然后以编程方式为url路径添加前缀并引用该路径。
如果图像位置发生变化,最好只保存文件名。这样您就不必担心更新整个表了,您只需使用url路径修复一行代码
答案 1 :(得分:2)
我倾向于将它们放入数据库中。这样,当您对数据库进行备份时,它们就会被打包在一起。如果您移动服务器,则无需担心从文件系统移动文件。
除非你在谈论大文件(GB),否则我怀疑你会发现文件系统与db性能有很大不同。
无论哪种方式都适合您,只需要优先考虑,哪种方式最适合您的特定情况。
SO和互联网上已有很多答案 Storing Images in DB - Yea or Nay?
答案 2 :(得分:2)
如果您正在构建一个需要扩展以提供许多映像的系统:将图像内容放入DBMS中会有一个巨大的缺点。
Web服务器可以围绕大型公共文件存储系统进行群集,并且可以非常有效地提供图像。这种文件服务架构已经被Apache,nginx和IIS等各种Web服务器产品高度优化。
但是如果将图像放在数据库BLOB中,从数据库中获取它们就成了瓶颈。另外,你需要一个脚本(php,.net,无论如何)来运行每个图像。
几乎所有生产网站都直接从文件中提供图像。您可以在DBMS中存储文件存储中的位置,然后将它们转换为您发送的HTML页面中的URL。
例如,如果imgloc
列包含u/10234/abcde.img
,并且该表还包含宽度和高度列,则您的网络应用可以发出类似
<img src="/content/u/10234/abcde.img" width="300" height="200">
然后客户端将从您的内容存储库中获取图像。