Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/248.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
Php 在存储和检索图像方面,哪一个更好?_Php_Mysql_Blob - Fatal编程技术网

Php 在存储和检索图像方面,哪一个更好?

Php 在存储和检索图像方面,哪一个更好?,php,mysql,blob,Php,Mysql,Blob,我想创建一个图像库,显然,它必须有图像 不知何故,我一直在想,将图像存储在一个目录中,然后逐个检索它们,或者将它们作为BLOB数据存储在数据库中,这两者之间有什么更好的选择呢 谢谢大家!干杯 我愿意学习这两种方法中的任何一种,请告诉我。首先,您需要将文件上载到任何预定义的文件夹中,然后才能将该文件的名称存储在数据库中(使用is varchar数据类型) 当您要获取这些记录时,请在应用程序需要时使用该名称重新创建映像路径。这个问题已经讨论了很多年。倡导者们将为每一项提出强有力的理由。无论哪一方都没

我想创建一个图像库,显然,它必须有图像

不知何故,我一直在想,将图像存储在一个目录中,然后逐个检索它们,或者将它们作为BLOB数据存储在数据库中,这两者之间有什么更好的选择呢

谢谢大家!干杯


我愿意学习这两种方法中的任何一种,请告诉我。

首先,您需要将文件上载到任何预定义的文件夹中,然后才能将该文件的名称存储在数据库中(使用is varchar数据类型)


当您要获取这些记录时,请在应用程序需要时使用该名称重新创建映像路径。

这个问题已经讨论了很多年。倡导者们将为每一项提出强有力的理由。无论哪一方都没有在任何情况下被证明是正确的

当需要存储的图像数量非常大时,这两种方法都会失效。自从我将这两个选项相互对比后,数据库和文件系统在过去几年中都变得更好了。那时,您可以通过创建目录的层次结构,而不是将它们全部放在一个目录中,来修复“文件系统”选项的性能问题。到目前为止,文件系统可能已经过优化,以便在目录项数量变大时不会阻塞

这确实是一种“您的里程可能会有所不同”的情况。这些因素包括您将使用什么文件系统,您将使用什么数据库引擎,有多少图像,平均大小是多少?你会在数据库中“标记”图像并存储它们吗

通常,您必须尝试所有选项,直到找到在您的配置中有效的选项

肯定是压力测试。如果您认为需要存储一百万张图像,不要使用五张图像进行测试,并假设它可以扩展。 至少用一百万张图片来测试它,如果不是用两百万或五百万的话

也就是说,如果您只需要存储1000张图像(或更少),甚至可能是10k或更少,并且如果您需要按日期、位置、主题等属性对图像进行索引,那么我建议您将图像作为一个blob存储在数据库中,以免冒犯许多善意的人。使用数据库将图像连接到元数据的便利性将超过任何人在该级别上的性能顾虑。当您使用指向文件系统中文件的指针将元数据存储在数据库中时,事情很容易失去同步。文件被移动、重命名、删除等;你的数据库不会知道,现在你的系统坏了。
使用数据库将确保数据的完整性,包括您的图像。

希望这将对您有所帮助。我听说,如果您从数据库检索图像,php可能会产生很多开销。还有人提到,最好在数据库中存储url。我相信如果你搜索,你会找到像这样的主题。我以前也问过同样的问题,决定将图像存储为文件,并将其路径存储在数据库中。从那时起,我认为我做出了正确的选择。根据这次讨论,他们中的许多人建议采用文件系统方法。我的意思是,将图像存储在服务器中,并在数据库中维护文件路径链接。请阅读链接文章,你肯定会有一些想法。@witherwind是的。将图像存储为文件,因为文件系统在处理该大小的数据方面比数据库更优化。此外,当映像位于文件系统上时,还可以进行其他优化,如
sendfile(2)
。将映像存储为BLOB数据时,“在数据库中维护文件链接”是否与将映像存储为BLOB数据相同?这肯定不一样。