如何处理BLOB?

时间:2018-06-16 02:39:25

标签: php database blob

我所知道,在数据库上下文中,BLOB或二进制大对象实际上只是给定数据的存储二进制代码。可以以GB为单位保留空间,并且可以用于存储几乎任何数据类型。但实际上它的用途是什么?

我的专业是计算机视觉,我在数据库和网站开发方面相当新手。目前,我正在开展一个情感分析项目,并希望为此目的收集大量数据集,即大量图像,并且还想记录图像是否已用于分析目的。我认为将图像存储在数据库中,使用单独的列进行访问记录是我能做的最好的事情,以便采用有组织的系统方法。但我与之交谈的每个人都建议不要将图像存储为数据库中的blob,而只是在其中包含其URL或名称,并且应该在专用文件夹中包含图像。

此外,由于BLOB只是文件的二进制编码,我们如何将其解码为图像文件?我发现如下代码将BLOB值转换为图像:

echo '<img src="data:image/png;base64,' .  base64_encode($image->getimageblob())  . '" />';

echo '<img src="data:image/jpg;base64,' .  base64_encode($image->getimageblob())  . '" />';

但是这些代码特定于扩展(并且我个人对任何此类代码都没有成功)。由于所有扩展肯定都有一些不同的方案,因此代码不能用于所有这些扩展的图像。我的数据集针对的是图像的视觉效果,而不是扩展,因此包含各种扩展的图像,那么如何使用BLOB处理它们呢?

因此,将名称存储在数据库中以及将图像存储在专用文件夹中的方法听起来不错但是数据库本身的用途是什么?我们不能通过PHP对图像进行一些重命名机制,并将它们直接存储到该文件夹​​中。为什么我们可以重命名像 img_1_accesses_5.png 这样的图像并使用拆分图像名称来获取ID及其访问次数时使用数据库?

如果BLOB可以存储几乎所有类型的数据,为什么使用BLOB是如此可怕,每个人都建议不要使用它?如果我们将图像作为BLOB直接注入数据库,会出现什么问题?最后,如果它适合图像,那么如何处理呢?

所以我的问题是如何有效地使用BLOB以及它适用于哪种目的?

1 个答案:

答案 0 :(得分:2)

So my question is How to effectively use BLOB and for which purposes it is suitable?

快速而肮脏的回答

The simple answer is: BLOBs smaller than 256KB are more efficiently handled by a database, while a filesystem is more efficient for those greater than 1MB. Of course, this will vary between different databases and filesystems

这里有一个微软的技术报告:Compare blob and ntfs filesystem。该报告相当陈旧(2006年),但我认为那里没有太大的变化。

当您想要读取存储在blob中的文件时进行成像。您已向数据库软件发送请求,然后软件控制器将读取存储在文件系统中的blob数据。您不必直接从文件系统读取,而是必须经历两个步骤的过程。因此,当文件大小变大时,blob会大大减慢数据库的速度。我们都知道速度是数据库的主要关键。

希望有帮助