@belyaevcyrill

Как лучше хранить фото-данные?

При разработке одной системы, задался вопросом как лучше хранить фотографии.

Всё как всегда банально — есть страница пользователя (карточка). У него есть фотография. Он может её загружать, менять, удалять.

Как лучше хранить эти фотографии? Записывать в поле photo_url таблицы users ссылку на фотографию в файловой системе, либо завести BLOB-поле, где будет содержаться фотография?

Спасибо.
  • Вопрос задан
  • 364 просмотра
Решения вопроса 2
qonand
@qonand
Software Engineer
лучше хранить только ссылку на фотографию - это более гибко и оптимальнее по производительности. Приведу простой пример: допустим нужно вывести информацию о 30 пользователях списком с фотографиями, если использовать ссылки вот что мы получим:
1. У нас будет возвращать из базы минимальный объем данных (блоб поля сильно увеличивают вес записи)
2. Мы сможем при необходимости удобно сортировать, выбирать данные по URL, в отличии от BLOB
3. В случае веб-ресурса - мы сможем кешировать картинки, blob-поле полноценно этого не позволит зделать
4. Опять таки в случае веб-ресурса, мы можем разместить эти картинки на 100500 серваках, что бы распределить нагрузку, (а blob этого не позволит сделать)
Ответ написан
Комментировать
В таблицу users не нужно добавлять колонок. Лучше создать другую таблицу attachments:
resource_type, resource_id, url.
Где
resource_type: "avatar"
resource_id: 123
url: "http ://images.example.com/images/5cf32e9.jpg"

Картинки можно хранить как на сервере приложения, так и на сторонних облачных сервисах.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@Sumor
Я приведу преимущества хранения в БД перед хранением ссылок:
1. Данные и фото хранятся в одном месте - в БД. При перемещении БД на другой сервер перемещается вся база с фотографиями. В случае хранения ссылок вы данные и фотографии перемещаете отдельно и после перемещения вам нужно будет обновить ссылки в новой БД.
2. Положенная в БД фотография доступна всегда. В случае ссылок на другие ресурсы они могут оказаться недоступными. Их могут удалить, переместить, переименовать, так как не очевидно, что на эти фотографии есть ссылки из какой-либо БД.
3. Транзакционность. При добавлении/изменении фото, если у вас случится проблема посередине процесса, то запись не будет добавлена/обновлена. В случае хранения ссылок может оказаться, что файл будет добавлен, а запись в БД не сохранится или наоборот запись в БД обновится, а сохранение файла не пройдёт.
4. Из 2 и 3 вытекает необходимость, в случае хранения ссылок, периодически проверять соответствие между ссылками и файлами.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы