Количество файлов в каталоге


19

У меня есть каталог с около 100000 небольших файлов (каждый файл из 1-3 строк, каждый файл является текстовым файлом). По размеру каталог не очень большой (<2 ГБ). Эти данные хранятся на профессионально управляемом сервере NFS. Сервер работает под управлением Linux. Я думаю, что файловая система ext3, но я точно не знаю. Кроме того, у меня нет корневого доступа к серверу.

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

Любая операция ввода / вывода в этом каталоге выполняется очень и очень медленно. Открытие файла (fopen в python), чтение из открытого файла, закрытие файла, все очень медленно. В bash ls, du и т. Д. Не работают.

Вопрос в том:

Каково максимальное количество файлов в каталоге в Linux таким образом, чтобы было удобно выполнять обработку, fopen, чтение и т. Д.? Я понимаю, что ответ зависит от многих вещей: типа fs, версии ядра, версии сервера, аппаратного обеспечения и т. Д. Я просто хочу иметь практическое правило, если это возможно.


6
На ваш прямой вопрос хорошо ответил Джайлз, но в целом файловые системы Linux являются плохой заменой баз данных, когда вы используете имена файлов в качестве ключей для крошечных кусочков данных. Вы не контролируете генерацию, но вы можете пост-обработать данные в форму, более пригодную для анализа; в противном случае вы будете платить за файловую систему на каждом этапе. Вы можете уменьшить накладные расходы, но вы можете быть счастливее, если устраните их.
— 2010 года

Кроме того, смотрите этот stackoverflow.com/questions/466521/…
— Кристи

Ответы:


22

Как вы предполагаете, это зависит от многих вещей, в основном от типа и параметров файловой системы и в некоторой степени от версии ядра. В серии ext2 / ext3 / ext4 произошло значительное улучшение, когда dir_indexпоявилась опция (через некоторое время после первоначального выпуска ext3): она позволяет хранить каталоги как деревья поиска (логарифмический доступ по времени), а не как линейные списки (линейный доступ по времени). ). Это не то, что вы можете увидеть по NFS, но если у вас есть какой-то контакт с администраторами, вы можете попросить их запустить tune2fs -l /dev/something |grep features(возможно, даже убедить их обновить?). Имеет значение только количество файлов, а не их размер.

Даже с dir_index, 100000 чувствует себя большим. В идеале, получить авторов программы, которая создает файлы для добавления уровня подкаталогов. Чтобы не снизить производительность, я бы рекомендовал ограничить около 1000 файлов на каталог для ext2 или ext3 без dir_indexи 20000 с dir_indexили reiserfs. Если вы не можете контролировать, как создаются файлы, переместите их в отдельные каталоги, прежде чем делать что-либо еще.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.