Много файлов в одном каталоге?

Я разрабатываю некоторый проект PHP на платформе Linux. Есть ли какие-либо недостатки помещения нескольких тысяч изображений (файлы) в одном каталоге? Это - замкнутое множество, которое не вырастет. Альтернатива должна была бы разделить этот файлы с помощью структуры каталогов на основе некоторого идентификатора (этот путь будут скажем, только 100 в одном каталоге).

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

Что я получил бы, не поместив несколько тысяч файлов (не роста набора) в одном каталоге, но разделении их в группах, например, 100? Действительно ли стоит усложнить вещи?

ОБНОВЛЕНИЕ:

  • Не будет никакого программного повторения по файлам в каталоге (просто прямой доступ к изображению, он - имя файла),
  • Я хочу подчеркнуть, что набор изображения закрывается. Это - менее затем 5 000 изображений, и это - это.
  • Нет никакой логической классификации этого, отображает
  • Человеческий доступ/обзор не требуется
  • Изображения имеют уникальные имена файлов
  • ОС: Debian/Linux 2.6.26-2-686, Файловая система: ext3

ЦЕННАЯ ИНФОРМАЦИЯ ИЗ ОТВЕТОВ:

Почему отдельный много файлов к различным каталогам:

  • "файлы 32k ограничивают на каталог при использовании ext3 по nfs"
  • причина производительности (скорость доступа) [но для нескольких тысяч файлов, которые трудно сказать, стоит ли это, не имея размеры]
7
задан Dawid Ohia 21 February 2010 в 18:17
поделиться

7 ответов

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

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

Мне самому пришлось разделить файлы по причинам производительности. Кроме того, я столкнулся с ограничением в 32k файлов на каталог при использовании ext3 вместо nfs (не уверен, что это ограничение nfs или ext3). Так что это еще одна причина для разделения на несколько каталогов. В любом случае, попробуйте с одним каталогом и разделяйте только если увидите, что это недостаточно быстро.

2
ответ дан 6 December 2019 в 23:04
поделиться

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

Но все же, если вы можете придумать подходящую категоризацию, не помешает немного рассортировать изображения, даже если это делается просто для обслуживания.

1
ответ дан 6 December 2019 в 23:04
поделиться

Единственная причина, по которой я мог вообразить, где это будет вредно, - это итерация по каталогу. Больше файлов - больше итераций. Но это в основном все, о чем я могу думать с точки зрения программирования.

0
ответ дан 6 December 2019 в 23:04
поделиться

Если смена файловой системы - это вариант, я бы рекомендовал перенести все изображения в файловую систему ReiserFS. Она отлично подходит для быстрого хранения/доступа к большому количеству маленьких файлов.

Если нет, то ответ MightyE о разбиении их на папки наиболее логичен и увеличит время доступа на значительную величину.

0
ответ дан 6 December 2019 в 23:04
поделиться

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

Простой подход - ввести md5 () имя файла, а затем использовать первые n символов в качестве имени каталога (например, substr (md5 ($ filename) , 2) ). Это обеспечивает достаточно равномерное распределение (по сравнению с использованием первых n символов прямого имени файла).

7
ответ дан 6 December 2019 в 23:04
поделиться

Я думаю, у этого вопроса есть два аспекта:

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

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

1
ответ дан 6 December 2019 в 23:04
поделиться

Несколько тысяч изображений все еще в порядке. Когда вы обращаетесь к каталогу, операционная система считывает список его файлов блоками по 4К. Если у вас простая структура каталогов, то чтение всего списка файлов может занять время, если в нем много (например, сотни тысяч) файлов.

0
ответ дан 6 December 2019 в 23:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: