Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在MySQL中将小图像存储为Blob数据_Mysql_Blob - Fatal编程技术网

在MySQL中将小图像存储为Blob数据

在MySQL中将小图像存储为Blob数据,mysql,blob,Mysql,Blob,几年前,我读过关于将blob数据存储在表中的文章,认为为博客文章存储图像是一个非常好的主意,但在阅读了大量关于它对页面运行时间的影响的负面观点后,我放弃了它 我最终为blob创建了一个php上传系统,在查看了我上传的几个图像的数据后,我发现越来越多的图像最终会导致问题 然而,上传小图片(120px x 120px)会在blob数据单元中产生相当短的字符数,这与我将为我的站点newsfeed撰写的一篇简短新闻文章差不多 那么,如何处理blob数据呢?它真的会降低数据库性能吗?在多大的规模下,它会成

几年前,我读过关于将blob数据存储在表中的文章,认为为博客文章存储图像是一个非常好的主意,但在阅读了大量关于它对页面运行时间的影响的负面观点后,我放弃了它

我最终为blob创建了一个php上传系统,在查看了我上传的几个图像的数据后,我发现越来越多的图像最终会导致问题

然而,上传小图片(
120px x 120px
)会在blob数据单元中产生相当短的字符数,这与我将为我的站点newsfeed撰写的一篇简短新闻文章差不多


那么,如何处理blob数据呢?它真的会降低数据库性能吗?在多大的规模下,它会成为一个问题?我想为每篇文章制作一个120 x 120的小缩略图,但我并不特别想上传物理文件。

将图像保留在dbms之外的原因,不管它有多小,并不是因为图像检索本身特别减慢了数据库的速度。相反,这是因为它使您的数据库和web应用程序做额外的、不必要的工作

当用户请求图像时,您的web应用程序(php或任何语言)必须使用SELECT从数据库检索信息,然后将其发送到用户的浏览器。这是web应用程序和数据库的额外工作。如果您发送的页面上有五个图像,您的web应用程序将必须处理来自浏览器的六个请求,而不是一个请求。这就是经济放缓的原因

通常,带有图像的网页在浏览器中具有类似以下内容的HTML:

 <p>blah blah blah</p>
 <div><img src="/images/thumbnails/0045.jpg" width="120" height="120" /></div>
  (etc)
废话废话

(等) 您的web应用程序会收到一个请求,并组装和交付html页面。web浏览器解析页面,呈现页面,并查找所有
标记。然后,浏览器会针对找到的每个图像向web应用程序发出另一个请求。要处理这些图像请求,您的web应用程序必须为每个图像处理来自浏览器的单独请求。处理这些请求时,代码必须发出另一个SELECT请求,从dbms接收请求的图像,并将其发送到浏览器

因此,您为交付页面所做的选择不需要图像blob,也不能使用它。您为检索图像所做的选择可能无法使用包含html内容的列

这些对web应用程序的额外请求是将图像存储在表中引起的问题。(另外,包括MySQL在内的大多数dbms系统都需要做一些额外的工作来获取blob。)

而且,您的web应用程序必须处理标题以控制缓存、内容类型等。这是一个额外的编程和测试负担

图像,甚至缩略图,都是静态的。apache和nginx等Web服务器经过了极大的优化,可以直接从服务器的文件系统将它们交付给浏览器。(服务器内存映射文件,然后通过一个
send
调用将内存写入出站HTTP套接字。)并且,如果你的应用程序扩展,你可以使用内容交付网络(如Cloudflare)将静态图像快速交付给大量用户

您确实需要在文件系统中管理图像,并告诉web服务器从何处获取图像。你读过的关于图像和数据库的资料中有很多这样做的建议


如果你的内容的某些页面中有不变的缩略图,你可以考虑直接在页面的HTML中嵌入图像。可以查询图像数据吗?可能是重复的,谢谢您的详细回答。为了澄清,图像将与文章的所有其他数据存储在同一个表中-

ID。标题字幕斑点。文章添加日期。作者等
。我计划在一个页面上加载5-6篇文章(有点像blogger)——即使没有BLOB,调用这个数量的SELECT结果是否可能影响页面的速度?嗯。好吧,让我们假设每篇文章(表行)使用2个图像(一个缩略图和一个主大图像)每个存储在2个不同的位置。这意味着,我将显示10或12图像每页使用。这是服务器请求的问题吗?不,如果您从web服务器(而不是从dbms)以静态对象的形式交付图像,这应该没问题。网络服务器就是为此而建立的。太好了,谢谢。我已经开始使用文件夹结构来保存物理图像,而不是依赖数据库来存储日期。