200 000 изображений в одной папке в Linux, проблема с производительностью или нет?

У меня есть сайт php/mysql с более 200 000 изображениями в одной папке (Linux-сервер). Я не думаю, что мне никогда не понадобится их видеть в проводнике файлов, вместо этого они будут просматриваться на веб-сайте на отдельных страницах. Они отображаются только на странице продукта на веб-сайте. Файловая система ext3. так разумно сохранить их в одной папке? может ли это замедлить производительность сайта?

Ответы

Ответ 1

Ext3 использует дерево для хранения содержимого каталога, поэтому его способность обрабатывать большое количество файлов в одном каталоге лучше, чем в тех файловых системах с линейными каталогами. Здесь вы можете прочитать описание дерева, используемое для хранения содержимого каталога.

Однако 200K файлов по-прежнему огромное количество. Разумно переместить их в подкаталоги на основе первых n символов имен файлов. Этот подход позволяет хранить только имена файлов, а не имена каталогов, и когда вам нужно получить доступ к файлу, вы знаете, где (в каком подкаталоге) его искать.

Ответ 3

Я знаю, что был выбран ответ, я хочу добавить решение для повышения производительности, для интереса

Запрос списка каталогов каждый раз будет стоить больших затрат, если список каталогов возвращает все результаты каждый раз.

Вы можете повысить производительность, сохранив листинг в индексированной базе данных (скажем, SQLite) и просто запросите результаты оттуда. Вы можете выбрать подмножество записей и реализовать разбиение на страницы намного проще и фильтровать результаты тоже.

Ответ 4

файловые системы определяют производительность, а 200 000 изображений без индексации замедляют производительность в ext2 (или NTFS)

Ответ 5

Весьма вероятно, что некоторое время в будущем вы можете захотеть сделать что-то, где все изображения, сбрасываемые в одной папке, повредят вам, или произойдет что-то неожиданное, и вы будете сожалеть об этом.

С другой стороны, наличие файлов, разделенных на несколько папок, похоже, не имеет большого количества недостатков, помимо сложности с ними.

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

Итак, я бы сказал, разделился на разные папки...

Ответ 6

Эта статья по варианту ext2 для веб-сценариев может вас заинтересовать: hashFS: Применение Hashing для оптимизации файловых систем для чтения небольших файлов.

Мы видели лучшую производительность ext2 с плоским файловым набором (больше файлов в каталоге), чем глубокий набор файлов (более глубокое дерево каталогов) для веб-сценария (предположения, изложенные в документе).

Конечно, в ретроспективе оценка должна была быть более обширной. Но это, возможно, стоит прочитать.

Ответ 7

У меня была такая же проблема. Попытка сохранить миллионы файлов на сервере Ubuntu в ext4. Закончился запуск моих собственных тестов. Выяснилось, что плоский каталог работает намного лучше, но при этом гораздо проще в использовании:

benchmark

Написал статью.