Для простоты предположим, что я разрабатываю мобильное приложение, такое как Instagram. Пользователи могут загружать изображения с сервера и загружать собственные изображения. В настоящее время сервер хранит все изображения (в действительности, только небольшие миниатюры) в базе данных MySQL в виде BLOB. Похоже, что наиболее распространенным способом передачи изображений является использование кодировки Base64, которая оставляет меня с двумя вариантами:
- Сервер сохраняет все изображения в виде BLOB. Чтобы загрузить изображение, клиент кодирует его в строку Base64, а затем отправляет его на сервер. Сервер декодирует изображение BACK в двоичном формате и сохраняет его как BLOB в базе данных. Когда клиент запрашивает изображение, сервер перекодирует изображение как строку Base64 и отправляет его клиенту, который затем декодирует его обратно в двоичный для отображения.
- Сервер сохраняет все изображения как строки Base64. Чтобы загрузить изображение, клиент кодирует его в строку Base64 и отправляет его на сервер. Сервер не кодирует и не декодирует, а просто сохраняет строку в базе данных. Когда клиент запрашивает изображение, строка Base64 возвращается клиенту, который затем декодирует его для отображения.
Очевидно, что опция №1 требует значительно большей обработки на сервере, так как изображения должны быть закодированы/декодированы с помощью каждого отдельного запроса. Это заставляет меня склониться к варианту № 2, но некоторые исследования показали, что сохранение базы Base64 в MySQL намного менее эффективно, чем хранение изображения непосредственно в виде BLOB, и обычно не рекомендуется.
Я, конечно, не первый человек, столкнувшийся с этой ситуацией, и у кого-нибудь есть предложения по наилучшему способу сделать эту работу?