Я разрабатываю некоторый проект PHP на платформе Linux. Есть ли какие-либо недостатки помещения нескольких тысяч изображений (файлы) в одном каталоге? Это - замкнутое множество, которое не вырастет. Альтернатива должна была бы разделить этот файлы с помощью структуры каталогов на основе некоторого идентификатора (этот путь будут скажем, только 100 в одном каталоге).
Я задаю этот вопрос, потому что часто я вижу такое разделение, когда я смотрю на URL изображений на различных сайтах. Вы видите, что разделение каталога сделано таким способом, что более затем несколько сотен изображений находятся в одном каталоге.
Что я получил бы, не поместив несколько тысяч файлов (не роста набора) в одном каталоге, но разделении их в группах, например, 100? Действительно ли стоит усложнить вещи?
ОБНОВЛЕНИЕ:
ЦЕННАЯ ИНФОРМАЦИЯ ИЗ ОТВЕТОВ:
Почему отдельный много файлов к различным каталогам:
обычно причиной такого разделения является производительность файловой системы. Для закрытого набора из 5000 файлов я не уверен, что это стоит таких хлопот. Я предлагаю вам попробовать простой подход - поместить все файлы в один каталог, но следить за фактическим временем, которое требуется для доступа к файлам.
если вы увидите, что это недостаточно быстро для ваших нужд, вы можете разделить их, как вы предложили.
Мне самому пришлось разделить файлы по причинам производительности. Кроме того, я столкнулся с ограничением в 32k файлов на каталог при использовании ext3 вместо nfs (не уверен, что это ограничение nfs или ext3). Так что это еще одна причина для разделения на несколько каталогов. В любом случае, попробуйте с одним каталогом и разделяйте только если увидите, что это недостаточно быстро.
Нет причин разделять эти файлы на несколько каталогов, если вы не ожидаете конфликтов имен файлов и если вам не нужно итеративно просматривать эти изображения в любой момент.
Но все же, если вы можете придумать подходящую категоризацию, не помешает немного рассортировать изображения, даже если это делается просто для обслуживания.
Единственная причина, по которой я мог вообразить, где это будет вредно, - это итерация по каталогу. Больше файлов - больше итераций. Но это в основном все, о чем я могу думать с точки зрения программирования.
Если смена файловой системы - это вариант, я бы рекомендовал перенести все изображения в файловую систему ReiserFS. Она отлично подходит для быстрого хранения/доступа к большому количеству маленьких файлов.
Если нет, то ответ MightyE о разбиении их на папки наиболее логичен и увеличит время доступа на значительную величину.
В дополнение к более быстрому доступу к файлам за счет разделения изображений на подкаталоги, вы также значительно увеличиваете количество файлов, которые вы можете отслеживать, прежде чем достигнете естественных ограничений файловой системы.
Простой подход - ввести md5 ()
имя файла, а затем использовать первые n символов в качестве имени каталога (например, substr (md5 ($ filename) , 2)
). Это обеспечивает достаточно равномерное распределение (по сравнению с использованием первых n символов прямого имени файла).
Я думаю, у этого вопроса есть два аспекта:
Эффективно ли файловая система Linux, которую вы используете, поддерживает каталоги с тысячами файлов. Я не эксперт, но думаю, что с новыми файловыми системами проблем не будет.
Есть ли проблемы с производительностью определенных функций PHP? Я думаю, что прямой доступ к файлам должен быть нормальным, но если вы делаете списки каталогов, вы можете в конечном итоге столкнуться с проблемами времени или памяти.
Несколько тысяч изображений все еще в порядке. Когда вы обращаетесь к каталогу, операционная система считывает список его файлов блоками по 4К. Если у вас простая структура каталогов, то чтение всего списка файлов может занять время, если в нем много (например, сотни тысяч) файлов.