В системе Solaris, которая обрабатывает большое количество файлов и хранит их информацию в базе данных (да, я знаю, что использование базы данных - это самый быстрый способ получите информацию о количестве файлов, которые у нас есть). Мне нужен быстрый способ отслеживать файлы по мере их прохождения через систему по пути их хранения в базе данных.Самый быстрый способ подсчета количества файлов в каталоге, содержащем сотни тысяч файлов
В настоящее время я использую Perl-скрипт, который читает в каталоге массив, а затем захватывает размер массива и отправляет его в сценарий мониторинга. К сожалению, по мере роста нашей системы этот монитор становится все медленнее.
Я ищу способ, который будет работать намного быстрее, вместо того, чтобы приостанавливать и обновлять каждые 15-20 секунд после выполнения операции подсчета во всех связанных каталогах.
Я относительно уверен, что мое узкое место является считывающим каталогом в операции с массивом.
Мне не нужна какая-либо информация о файлах, мне не нужны размеры или имена файлов, просто количество файлов в каталоге.
В моем коде я не считаю скрытые файлы или текстовые файлы, которые я использую для хранения информации о конфигурации. Было бы здорово, если бы эта функциональность была сохранена, но, безусловно, не является обязательной.
Я нашел несколько ссылок на подсчет inodes с кодом C или что-то в этом роде, но я не очень опытен в этой области.
Я хотел бы сделать этот монитор как можно скорее.
код Perl я использую выглядит следующим образом:
opendir (DIR, $currentDir) or die "Cannot open directory: $!";
@files = grep ! m/^\./ && ! /config_file/, readdir DIR; # skip hidden files and config files
closedir(DIR);
$count = @files;
использование перл нити или вилки, чтобы свести к минимуму время –
ждет @mpapec Мне нравится идея, в лучшем случае это будет еще сделать мое время ожидания близко к количеству времени, которое было бы, если бы я выполнил этот код только в моем самом длинном каталоге? Если это так, это не плохая идея, но, к сожалению, большинство моих каталогов имеют менее 50 файлов, в то время как у одного или двух есть тысячи. Мне очень хотелось бы найти способ полностью уйти от чтения в каждом файле в каталоге. – Andrew