Привет,
Я пишу несколько сценариев для обработки изображений с различных веб-сайтов с фотографиями. Прямо сейчас я храню все эти данные в отдельных текстовых файлах в одном каталоге.
Каталог доступен через Интернет. Конечный пользователь обращается к веб-службе, которая возвращает путь к файлу, который понадобится пользователю.
Мне было интересно, на каком этапе я вижу влияние на производительность, если все эти файлы находятся в одном каталоге? (Если есть)
Ответы:
Производительность зависит от используемой вами файловой системы.
EXT3: физический лимит составляет 32 000 файлов, но перфорация страдает после нескольких тысяч файлов.
EXT4: теоретически безгранично
ReiserFS, XFS, JFS, BTRFS: они подходят для большого количества файлов в каталоге, поскольку они более современны и предназначены для обработки многих файлов (другие были разработаны в те времена, когда жесткие диски измерялись в МБ, а не в ГБ) , Производительность намного выше для большого количества файлов (наряду с ext4), поскольку они оба используют алгоритм двоичного типа поиска для получения нужного файла (другие используют более линейный).
источник
Я храню изображения для обслуживания веб-сервером, и у меня более 300 000 изображений в одном каталоге на EXT3. Я не вижу проблем с производительностью. Перед настройкой я провел тесты с изображениями 500 КБ в каталоге и произвольным доступом к файлам по имени, и не было значительного замедления с изображениями 500 КБ более 10 КБ в каталоге.
Единственный недостаток, который я вижу, заключается в том, что для синхронизации новых со вторым сервером мне нужно запустить
rsync
весь каталог, а не просто сказать ему синхронизировать подкаталог, содержащий самую последнюю тысячу или около того.источник
Количество файлов в папке теоретически может быть неограниченным. Однако каждый раз, когда ОС будет обращаться к определенной папке для поиска файлов, ей придется обрабатывать все файлы в папке. При наличии менее 500 файлов вы можете не заметить никаких задержек. Но если в одной папке находятся десятки тысяч файлов, простая команда списка папок (ls или dir) может занять слишком много времени. Когда к этим папкам можно получить доступ через FTP, это действительно будет слишком медленно ...
Проблемы с производительностью будут зависеть не от вашей ОС, а от скорости процессора, емкости диска и памяти. Если у вас есть такое количество файлов, вы можете объединить их в один архив и использовать систему архивации, которая оптимизирована для хранения большого количества данных. Это может быть ZIP-файл, но, что еще лучше, храните их в виде больших двоичных объектов в базе данных с именем файла в качестве первичного ключа.
источник
ls
проблемы является проблемой.Мое эмпирическое правило заключается в разделении папок, если существует более 1000 файлов, и папка будет просматриваться (т.е. через Интернет или Проводник) или 5000 файлов в противном случае.
источник
Как указывает @skaffman, ограничения зависят от операционной системы. На вас, вероятно, будут влиять ограничения на старые ОС. Я помню, что старая версия Solaris была ограничена 32768 файлами на каталог.
Обычным решением является использование некоторого типа хеширования, то есть сервер Cyrus imap разделяет пользователей по буквенному хешу:
источник
Если у вас есть прямой доступ к файлу, количество файлов в каталоге не является проблемой скорости.
Количество файлов, которые вы можете создать в одном каталоге, зависит от используемой вами файловой системы. Если вы перечисляете все файлы в каталоге или выполняете поиск, сортировку и т. Д., Имея много файлов, это замедлит эти операции.
gbjbaanb ошибся в своем ответе о максимальном размере файла ext3. Обычно ext ограничивает количество файлов на вашем диске в целом. Вы не можете создать больше файлов, чем у вас есть inode в вашей таблице inode. Он прав, предлагая reiserfs для большей производительности со многими файлами
источник
Проверенная папка с 10K файлами в NTFS (Windows 7, 64 bit). Папка с изображениями 10K в любом представлении (Список, Значок и т. Д.) Работает и прокручивается без заметной задержки.
источник