【发布时间】:2015-05-30 19:29:24
【问题描述】:
为了简单起见,假设我正在开发一个像 Instagram 这样的移动应用程序。用户可以从服务器下载图片,也可以上传自己的图片。目前,服务器将所有图像(实际上只是小缩略图)作为 BLOB 存储在 MySQL 数据库中。传输图像最常见的方法似乎是使用 Base64 编码,这让我有两个选择:
- 服务器将所有图像存储为 BLOB。要上传图片,客户端将其编码为 Base64 字符串,然后将其发送到服务器。服务器将图像 BACK 解码为二进制格式,并将其作为 BLOB 存储在数据库中。当客户端请求图像时,服务器将图像重新编码为 Base64 字符串并将其发送给客户端,然后客户端将其解码回二进制以显示。
- 服务器将所有图像存储为 Base64 字符串。要上传图片,客户端将其编码为 Base64 字符串并将其发送到服务器。服务器不进行编码或解码,只是将字符串存储在数据库中。当客户端请求图像时,Base64 字符串会返回给客户端,然后客户端将其解码以显示。
显然,选项 #1 需要在服务器上进行更多处理,因为必须在每个请求中对图像进行编码/解码。这使我倾向于选项 #2,但一些研究表明,在 MySQL 中存储 Base64 字符串的效率远低于将图像直接存储为 BLOB,并且通常不鼓励。
我当然不是第一个遇到这种情况的人,那么有没有人对最好的方法提出建议?
【问题讨论】:
-
选项 #3 首先是数据库中没有图像。他们有一个系统:文件系统。
-
我开始存储文件路径,但对 MySQL 最新版本的一些研究表明,将小文件(小于 1 或 2 mb)存储为 BLOB 实际上更有效。我的图片只有几 kb,所以这样维护起来要容易得多。
-
备份一个充满 BLOB 的数据库绝对是一场噩梦。复制它们很昂贵,备份它们也很昂贵,恢复它们非常痛苦,并且当它们变得太大时将它们拆分是非常痛苦的。除非您正在处理无关紧要的数据量,否则这最终会对您造成影响。使用像
rsync这样基本的东西可以很容易地复制磁盘上的文件。 MySQL 也不是这样。
标签: mysql json encoding base64 blob