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

19

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

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

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

Вопрос в том:

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

carlosdc
источник
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. Если вы не можете контролировать, как создаются файлы, переместите их в отдельные каталоги, прежде чем делать что-либо еще.

Жиль "ТАК - перестань быть злым"
источник