为了简单起见,假设我正在开发像Instagram这样的移动应用程序。用户可以从服务器下载图像,并上传自己的图像。目前,服务器将所有图像(实际上只是小缩略图)存储在MySQL数据库中作为BLOB。似乎最常见的传输图像的方法是使用Base64编码,这给我提供了两个选项:
显然,选项#1需要在服务器上进行更多处理,因为必须使用每个请求对图像进行编码/解码。这使我倾向于选项#2,但一些研究表明,在MySQL中存储Base64字符串的效率远低于将图像直接存储为BLOB,并且通常不鼓励。
我当然不是第一个遇到这种情况的人,那么有没有人就这项工作的最佳方式提出建议?
答案 0 :(得分:6)
JSON假定为utf8,因此除非以某种方式编码,否则与图像不兼容。
Base64几乎是二进制(BLOB)的8/6倍。人们可以说它很容易负担得起。 3000 bytes
变为大约4000 bytes
。
每个人应能够接受任意8位代码,但不是每个人都能接受。 Base-64可能是最简单和最全面的折衷方案,无需处理8位数据。
由于这些是"小",我会将它们存储在一个表中,而不是一个文件中。但是,我会将它们存储在单独的表格中,并在需要时将JOIN
存储在适当的id
中。这使得不需要图像的查询运行得更快,因为它们没有跨越BLOB。
从技术上讲,TEXT CHARACTER SET ascii COLLATE ascii_bin
会这样做,但BLOB
会更清楚地说明列中没有任何可用的文字。
答案 1 :(得分:1)
为什么要对线上的图像进行64位编码?我认为你是从一个错误的假设开始的。
答案 2 :(得分:0)
我不明白为什么DB Server不应始终以本机形式保留二进制数据。因此,请使用BLOB。 (但是,即使您确实将数据存储在Base64字符串中,也不必担心编码/解码性能,因为IO的影响会更大。)
我不明白为什么客户端应该在base64中发送数据。为什么不使用简单的HTTP调用“流式传输”它?