将base64编码图像存储在数据库中是否明智?

时间:2012-06-05 19:22:39

标签: php android image base64

我正在创建一个Android应用程序,它拍摄照片并将图像(作为base64编码的字符串)推送到PHP脚本,从这里我将在MySQL数据库中存储有关图像的数据。

将图像存储在数据库中是否明智(因为它是作为base64字符串传递的),将它转换回图像并将其存储在文件系统上会更好吗?

4 个答案:

答案 0 :(得分:4)

base64编码的图像占用太多的位置(比二进制等价物大约多33%)。

MySQL提供二进制格式(BLOB,MEDIUM_BLOB),使用它们。

或者,大多数人更喜欢在数据库中仅存储文件系统将更有效存储的文件的密钥,特别是如果它是一个大图像。这是我长期喜欢的解决方案。我通常使用文件内容的SHA1哈希来形成文件的路径,这样我就没有双重存储,如果我愿意,可以很容易地从文件中检索记录(我使用三级文件树,首先分别从前两个字符和哈希的字符3和4制作两个级别,以便我没有太多目录的直接子项)。请注意,这是例如git存储的逻辑。

将它们存储在数据库中的优势在于,您可以更轻松地管理备份,尤其是只要您的项目很小。数据库将为您提供缓存,但您的服务器和客户端也是如此,很难确定哪个最快,而且差别不会很大(我想您不会进行太多的并发写入)。

答案 1 :(得分:2)

我已经完成了两种方式,每当我回到代码,我将二进制数据存储在MySQL表中时,我总是将它切换到带有MySQL表中指针的文件系统。

当涉及到性能时,你会更好地去FS,因为从MySQL服务器中提取多个大型BLOB会使其管道迅速饱和。通常它是一个你不想堵塞的管道。

答案 2 :(得分:2)

您始终可以将base64_encode($image)保存在文件中,只将文件路径存储在数据库中,然后使用fopen()获取编码图像。

如果我没有正确理解这个问题,我很抱歉。

答案 3 :(得分:0)

"明智"我认为这是非常主观的。我认为通过"让人们直接链接到我的图像"透视。此外,它可能会有所帮助,如果您决定需要更改目录结构等。它可能使您更容易(但这实际上取决于您开始编写脚本的方式..)但除此之外......我无法想到这样做有什么好处。