Структура хранения изображений

Общие вопросы по использованию фреймворка. Если не знаете как что-то сделать и это про Yii, вам сюда.
Ответить
Аватара пользователя
Bezlepkin
Сообщения: 731
Зарегистрирован: 2012.11.10, 18:59
Контактная информация:

Структура хранения изображений

Сообщение Bezlepkin » 2014.06.02, 20:41

Думаю сделать такую структуру папок для хранения загруженных изображений:
Допустим будет папка data, в ней три папки с миниатюрками и одна с оригиналами, data/thumb_50_50, и так далее...
Загрузка первого изображения, создается папка с уникальным именем, базу прописываем название файла, в другое поле имя папки. Далее при загрузки проверяем, если в папке thumb_50_50/униканое_имя больше изображений, создаем еще папку с уникальным именем. Тем самым получаем в папке thumb_50_50 1000 папок. Итого 1 000 000 изображений только для одной миниатюрки.

Какие минусы в таком решении?

mickgeek
Сообщения: 957
Зарегистрирован: 2014.05.31, 20:50
Откуда: Санкт-Петербург
Контактная информация:

Re: Структура хранения изображений

Сообщение mickgeek » 2014.06.03, 00:10

Зависит от файловой системы и её настроек. Если файлов более 10 000 или даже 5 000, то лучше разносить по поддиректориям. Я бы сделал примерно так: "/data/n/y/qwerty.jpg" и "/data/n/y/thumb-sm/qwerty.jpg", "/data/n/y/thumb-med/qwerty.jpg", "/data/n/y/thumb-lar/qwerty.jpg" соответственно.
Последний раз редактировалось mickgeek 2014.06.09, 18:30, всего редактировалось 1 раз.

Аватара пользователя
Bezlepkin
Сообщения: 731
Зарегистрирован: 2012.11.10, 18:59
Контактная информация:

Re: Структура хранения изображений

Сообщение Bezlepkin » 2014.06.03, 13:08

Часто встречаю такой способ! Но тогда может быть что одна папку, например сегодняшняя будет пустая, завтрашняя будет содержать 200 изображений, то есть получается не равномерное распределение файлов.

Аватара пользователя
slavcodev
Сообщения: 3133
Зарегистрирован: 2009.04.02, 21:42
Откуда: Altea, Spain
Контактная информация:

Re: Структура хранения изображений

Сообщение slavcodev » 2014.06.03, 13:30

Если файлы хранятся в базе, то достаточно использовать PK таблицы, например

Код: Выделить всё

$basePath = '/data';

$file = File::model()->find();

// ложим в каждую подпапку по 5000 файлов
$dir = md5(ceil($file->id / 5000));

$filePath = $basePath . '/' . $dir . '/' . $file->name;

// превьюшки мне кажется удобнее держать не в папке с файлом
$thumbPath = $basePath . '/' . $dir . '/thumb-size/' . $file->name;

// а отдельно, вот так
$thumbPath = $basePath . '/thumb-size/' . $dir . '/' . $file->name;

Жду Yii 3!

Аватара пользователя
kosenka
Сообщения: 676
Зарегистрирован: 2009.09.26, 12:41
Откуда: москва
Контактная информация:

Re: Структура хранения изображений

Сообщение kosenka » 2014.06.04, 12:11

Bezlepkin писал(а):Часто встречаю такой способ! Но тогда может быть что одна папку, например сегодняшняя будет пустая, завтрашняя будет содержать 200 изображений, то есть получается не равномерное распределение файлов.
А почему это "сегодняшняя будет пустая" ? Если файлов за сегодняшнюю дату нет, то и папки не будет. Папка создается в момент сохранения файла и не надо плодить лишние/пустые папки!

Я использую для хранения такую структуру:
/folder/[ТЕКУЩИЙ_ГОД]/[ТЕКУЩИЙ_МЕСЯЦ]/[ТЕКУЩИЙ_ДЕНЬ]/
И каждый "файл", в базе, имеет поле "дата добавления" и когда файл надо "показать" юзеру, просто "строю" путь до папки.
Портфолио: viewtopic.php?f=11&t=8612
Email: kosenka@gmail.com
Skype: kosenka (в сети с 9 до 18 по Москве)
Web: http://kosenka.ru

Аватара пользователя
Bezlepkin
Сообщения: 731
Зарегистрирован: 2012.11.10, 18:59
Контактная информация:

Re: Структура хранения изображений

Сообщение Bezlepkin » 2014.06.04, 15:01

Почему все мало кто использует схему которую я описал выше? Она же логичней!
Может потому что при каждой закачке файла придется считать количество файлов в папке?
Затрата ресурсов.

Странник
Сообщения: 274
Зарегистрирован: 2013.04.08, 10:35
Откуда: Нижний Новгород

Re: Структура хранения изображений

Сообщение Странник » 2014.06.04, 15:08

Я у себя посмотрел статистику загружки фото на сайт. Получилось в среднем около 600 в месяц. Исходя из этого создаю папки по первым трём цифрам timestamp. Папки создаются примерно раз в 3 месяца. вполне устраивает. И имя файла timestamp+PK. Храню в базе только имя. Вполне удобно.

Ответить