Страница 1 из 1

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

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

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

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

Добавлено: 2014.06.03, 00:10
mickgeek
Зависит от файловой системы и её настроек. Если файлов более 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" соответственно.

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

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

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

Добавлено: 2014.06.03, 13:30
slavcodev
Если файлы хранятся в базе, то достаточно использовать 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;


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

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

Я использую для хранения такую структуру:
/folder/[ТЕКУЩИЙ_ГОД]/[ТЕКУЩИЙ_МЕСЯЦ]/[ТЕКУЩИЙ_ДЕНЬ]/
И каждый "файл", в базе, имеет поле "дата добавления" и когда файл надо "показать" юзеру, просто "строю" путь до папки.

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

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

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

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