Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Администрирование Web серверов и Web служб > много файлов (миллионы) в одном каталоге


Автор: 1234ru 18.3.2010, 23:54
Планируется вещь, отдаленно напоминающая фотохостинг.
Количество хранимых фотографий может достигать нескольких миллионов (а, может, и больше). Есть пара вопросов: 
1. Допустимо ли при таких объемах сваливать все фотографии в один каталог? Или же надо как-то делить?
(Лучше ли будет, если сделать подкаталоги, количество которых будет на пару порядков меньше, чем количество фотографий?)

2. Влияет ли на производительность длина имени файла фотографии? Т.е. есть ли разница 398214.jpg или solntse-vstalo-kakaya-prelest.jpg ?

Автор: Fortop 19.3.2010, 00:56
Цитата(1234ru @  18.3.2010,  22:54 Найти цитируемый пост)
1. Допустимо ли при таких объемах сваливать все фотографии в один каталог?

нет.

Цитата(1234ru @  18.3.2010,  22:54 Найти цитируемый пост)
Или же надо как-то делить?

Надо делить, по пользователям/датам/хешам.

Цитата(1234ru @  18.3.2010,  22:54 Найти цитируемый пост)
2. Влияет ли на производительность длина имени файла фотографии? Т.е. есть ли разница 398214.jpg или solntse-vstalo-kakaya-prelest.jpg ?

Это последнее на что нужно смотреть.
Так что - не играет роли. 

Автор: 1234ru 19.3.2010, 02:05
Цитата
Надо делить, по пользователям/датам/хешам.

Понятно, спасибо.
Я так понимаю, при делении нужно стремиться, чтобы не было перекоса, т.е.
число подкаталогов = среднее число файлов в каждом каталоге = sqrt(общее число файлов)
Верно ли это?

Автор: Fortop 19.3.2010, 04:25
Есть вполне конкретные ограничения файловых систем на наличие файлов в одном каталоге. Следует исходить из этого.

Используя всего лишь 1ну латинскую букву или цифру в названии каталогов, при уровне вложенности равной 6ти
будет возможно хранить 36^6 = 2 176 782 336 файлов.
Этого достаточно для планируемого проекта? smile

Если недостаточно увеличьте глубину до 12 и храните до 4 000 000 трлн. файлов.

Автор: 1234ru 19.3.2010, 04:29
Цитата
Есть вполне конкретные ограничения файловых систем на наличие файлов в одном каталоге

Какие они, эти ограничения?

Цитата
Используя всего лишь 1ну латинскую букву или цифру в названии каталогов, при уровне вложенности равной 6ти ... 

Не, вложенность 6 не пойдет. Слишком много, потом будет неудобно работать (да и другие причины есть).
Я имел в виду, если вложенность два, т.е. все файлы не в одном каталоге, а разбиты по подкаталогам (в смысле, не /dir/files..., а /dir/subdir/files... ).
При нескольких миллионах файлов можно сделать тысячу каталогов и хранить по тысяче файлов в каждом. Так нормально будет?

Автор: Fortop 19.3.2010, 06:22
Цитата(1234ru @  19.3.2010,  03:29 Найти цитируемый пост)
Какие они, эти ограничения?

Разные для каждой файловой системы. Конкретные цифры лучше узнавать в гугле.

Цитата(1234ru @  19.3.2010,  03:29 Найти цитируемый пост)
Не, вложенность 6 не пойдет. Слишком много, потом будет неудобно работать (да и другие причины есть).
Я имел в виду, если вложенность два, т.е. все файлы не в одном каталоге, а разбиты по подкаталогам (в смысле, не /dir/files..., а /dir/subdir/files... ).
При нескольких миллионах файлов можно сделать тысячу каталогов и хранить по тысяче файлов в каждом. Так нормально будет?

Я открою секрет, физическое местоположение файла и то под каким соусом он будет доступен через веб - это абсолютно разные и слабо-пересекающиеся вещи.

Например, файл доступный по адресу
http://mysite.com/user/photo/album1/img1.jpg
может находиться где угодно на диске и иметь имя например - bsfdsfwerw2

Автор: 1234ru 19.3.2010, 11:17
Цитата(Fortop @  19.3.2010,  06:22 Найти цитируемый пост)
Я открою секрет, физическое местоположение файла и то под каким соусом он будет доступен через веб - это абсолютно разные и слабо-пересекающиеся вещи.

Знаю. Все равно 
Цитата
вложенность 6 не пойдет. Слишком много, потом будет неудобно работать (да и другие причины есть).

Автор: gcc 19.3.2010, 13:44
1234ru, MogileFS распределенная файловая система

Автор: IgorIV 20.3.2010, 08:58
Хранить-то может и можно миллионы файлов на одном сервере, вот только как их будет отдавать веб-сервер. Надо изначально закладывать расширяемость на несколько серверов.

Автор: xZ0RGx 26.3.2010, 06:20
Во-первых такие вещи надо проектировать а не от балды делать.

1) Для начала выберите ФС и изучите ее возможности.
2) У вас могут банально кончится inode.
3) Как правило в ядре есть такие параметры как max_open_files

Автор: IgorIV 26.3.2010, 22:23
xZ0RGx, 
1 а че выбирать. UFS2
2 
Код

df -i /mnt/ad8
Filesystem      1K-blocks       Used             Avail              Capacity   iused        ifree             %iused    Mounted on
/dev/ad8s1d   473015558   313311344   121862970    72%         1049355   60091635    2%          /mnt/ad8

Использованно 1 миллион, свободно - 60 миллионов
3 Вот с этим надо экспериментировать. Просто система работающая в роли шлюза - 788 открытых файлов. Хотя нет, вру smile Система работает как тестовая площадка, где все понапиханно.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)