Думаю сделать такую структуру папок для хранения загруженных изображений:
Допустим будет папка data, в ней три папки с миниатюрками и одна с оригиналами, data/thumb_50_50, и так далее...
Загрузка первого изображения, создается папка с уникальным именем, базу прописываем название файла, в другое поле имя папки. Далее при загрузки проверяем, если в папке thumb_50_50/униканое_имя больше изображений, создаем еще папку с уникальным именем. Тем самым получаем в папке thumb_50_50 1000 папок. Итого 1 000 000 изображений только для одной миниатюрки.
Какие минусы в таком решении?
Структура хранения изображений
-
- Сообщения: 957
- Зарегистрирован: 2014.05.31, 20:50
- Откуда: Санкт-Петербург
- Контактная информация:
Re: Структура хранения изображений
Зависит от файловой системы и её настроек. Если файлов более 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 раз.
Re: Структура хранения изображений
Часто встречаю такой способ! Но тогда может быть что одна папку, например сегодняшняя будет пустая, завтрашняя будет содержать 200 изображений, то есть получается не равномерное распределение файлов.
- slavcodev
- Сообщения: 3134
- Зарегистрирован: 2009.04.02, 21:42
- Откуда: Valencia
- Контактная информация:
Re: Структура хранения изображений
Если файлы хранятся в базе, то достаточно использовать 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!
Re: Структура хранения изображений
А почему это "сегодняшняя будет пустая" ? Если файлов за сегодняшнюю дату нет, то и папки не будет. Папка создается в момент сохранения файла и не надо плодить лишние/пустые папки!Bezlepkin писал(а):Часто встречаю такой способ! Но тогда может быть что одна папку, например сегодняшняя будет пустая, завтрашняя будет содержать 200 изображений, то есть получается не равномерное распределение файлов.
Я использую для хранения такую структуру:
/folder/[ТЕКУЩИЙ_ГОД]/[ТЕКУЩИЙ_МЕСЯЦ]/[ТЕКУЩИЙ_ДЕНЬ]/
И каждый "файл", в базе, имеет поле "дата добавления" и когда файл надо "показать" юзеру, просто "строю" путь до папки.
Re: Структура хранения изображений
Почему все мало кто использует схему которую я описал выше? Она же логичней!
Может потому что при каждой закачке файла придется считать количество файлов в папке?
Затрата ресурсов.
Может потому что при каждой закачке файла придется считать количество файлов в папке?
Затрата ресурсов.
Re: Структура хранения изображений
Я у себя посмотрел статистику загружки фото на сайт. Получилось в среднем около 600 в месяц. Исходя из этого создаю папки по первым трём цифрам timestamp. Папки создаются примерно раз в 3 месяца. вполне устраивает. И имя файла timestamp+PK. Храню в базе только имя. Вполне удобно.