amr-dallin
@amr-dallin
Разработка на CakePHP

Как организовать базу данных для миниатюр фотографий?

Здравствуйте.

Разрабатываю, для домашних нужд, фотохостинг. Для каждой фотографий будет до 7 миниатюр. Мне необходимо сохранять габариты и размер миниатюр. С учетом, пути, в итоге, получается 28 атрибутов. И это только по миниатюрам. Кроме этого, есть дополнительные 15 атрибутов, характеризующие фотографию. В итоге, 43 атрибута. Нам мой малый кругозор, это очень много.

Пришёл в голову альтернативный вариант, а именно, вынести миниатюры в другое отношение.

photos
id | otherAttr

thumbs
id | photo_id | path | width | height | size

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

Что думаете вы? Какой из этих вариантов самый оптимальный? Наверняка, есть и альтернатива?

Спасибо

____________________________________________________________________________

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

Приемущества:
1) Без изворотов, разнотипные медиафайлы можно объединять в альбомы;
2) Для комментариев и закладок достаточно по одному отношению (таблице);
3) Миниатюры медиафайлов вынесены в отношение photos, что позволило схему привезти к 2НФ;
4) Отношение items упростилось на 5 атрибутов.

В результате, такую схему оказалось проще модерировать. В приложение предусмотрена функция выбора миниатюры по габаритам, соответствующих структуре отображения. Например, при отображение галереи в стиле justfield, система ориентируется на высоту изображения, и подбирает файлы с похожим размером высоты. Это позволяет не загружать тяжеловесные файлы.

Недостатки:
1) При добавление одной записи в items, в photos будет добавляться до 5 записей.

Сейчас сложно судить об этом недостатке. В скором времени, проверю этот пункт, записав в items от 1 млн. строк.

5a2161edb8ebf337628687.jpeg
  • Вопрос задан
  • 247 просмотров
Решения вопроса 1
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Если эти миниатюры стандартного размера, то достаточно просто сделать соответствующие папки вида thumbs_90x60 и в базу ничего не писать.
При попытке чтения файла, отсутствующего в такой папке, перенаправлять запрос на скрипт, генерирующий нужную миниатюру в папке и отдающий результат.
Ну либо сразу при загрузке фотографии генерировать все миниатюры.
Ответ написан
Пригласить эксперта
Ответы на вопрос 4
@LiguidCool
Плодить столбцы, которые в теории будут полцпустыми идея плохая. Тем более с точки зрения расширения "на потом" это тоже не очень.
С другой стороны 7000 строк это "ни о чем" - для SQL не нагрузка.
Ответ написан
@MadridianFox
Web-программист, многостаночник
1) 1к +7к... да хоть 100к + 700к - фигня. Вы гораздо раньше упрётесь в то что вам не хватает места на сами файлы изображений чем на то что БД не справляется с количеством записей.
2) 43 атрибута это если вы всё в одну таблицу пишете. Даже это не много, хотя и вызывает удивление, но если вынести миниатюры в соседнюю таблицу, то получится 15 атрибутов в одной и 4 в другой - вообще ни о чём.
Ответ написан
Комментировать
@DenisDangerous
основные параметры, по которым будет идти поиск и т.п. сделать отдельными столбцами, остальные не очень важные атрибуты можно в одно поле в json формате.

И как я понял у вас будет само фото с атрибутами и отдельно миниатюры для этого фото? Эти сущности обязательно в разные таблицы и не забывать про foreign keys для обеспечения целостности...

что-то типа:
main_photo
id | path | width | height | size | other_attr

min_photo
id | main_photo_id | path | width | height | size | other_attr
Ответ написан
Комментировать
xnscripter
@xnscripter
Если для домашних нужд - что мешает, например, хранить в директории и отдавать нужным размером php-скриптом?
Ответ написан
Ваш ответ на вопрос

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

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