schnellste Methode zum Zählen der Anzahl der Dateien in einem Verzeichnis mit Hunderttausenden von Dateien

8

In einem Solaris-System, das eine große Anzahl von Dateien verarbeitet und deren Informationen in einer Datenbank speichert (ja, ich weiß, dass die Verwendung der Datenbank der schnellste Weg ist, Informationen über die Anzahl der Dateien zu erhalten, die wir haben). Ich brauche einen schnellen Weg, um die Dateien zu überwachen, während sie durch das System auf ihrem Weg zur Speicherung in einer Datenbank fortschreiten.

Zur Zeit benutze ich ein Perl-Skript, das das Verzeichnis in ein Array einliest und dann die Größe des Arrays ergreift und an ein Überwachungsskript sendet. Leider wächst unser Monitor immer mehr, wenn unser System wächst.

Ich suche nach einer Methode, die viel schneller funktioniert, anstatt alle 15 bis 20 Sekunden nach dem Ausführen der Zähloperation auf allen beteiligten Verzeichnissen zu pausieren und zu aktualisieren.

Ich bin relativ sicher, dass mein Engpass das Leseverzeichnis in Array-Operation ist.

Ich brauche keine Informationen über die Dateien, ich brauche keine Größen oder Dateinamen, nur die Anzahl der Dateien im Verzeichnis.

In meinem Code zähle ich keine versteckten Dateien oder die Textdateien, die ich verwende, um Konfigurationsinformationen zu speichern. Es wäre großartig, wenn diese Funktionalität erhalten bleibt, aber sicherlich nicht zwingend erforderlich ist.

Ich habe einige Referenzen gefunden, um Inodes mit C-Code oder etwas in dieser Richtung zu zählen, aber ich bin in diesem Bereich nicht sehr erfahren.

Ich möchte diesen Monitor so real-time wie möglich machen.

Der verwendete Perl-Code sieht so aus:

%Vor%     
Andrew 18.07.2013, 19:58
quelle

2 Antworten

9

Was Sie gerade tun, liest das gesamte Verzeichnis (mehr oder weniger) in den Speicher, nur um diesen Inhalt für seine Zählung zu verwerfen. Vermeiden Sie dies, indem Sie stattdessen das Verzeichnis streamen:

%Vor%

Wichtig, verwenden Sie glob() in keiner ihrer Formen . glob() wird teuer stat() für jeden Eintrag , also nicht Overhead, den Sie wollen.

Nun, Sie könnten viel ausgeklügeltere und leichtere Möglichkeiten haben, dies zu tun, abhängig von Betriebssystemfähigkeiten oder Dateisystemfähigkeiten (Linux zum Vergleich, Angebote inotify), aber das Streaming des Verzeichnisses ist ungefähr so ​​gut wie Sie. ll portabel bekommen.

    
pilcrow 18.07.2013, 20:35
quelle
-1

Halten Sie es kurz.

%Vor%

1 Dateien gefunden

    
Andrew 27.10.2014 15:00
quelle

Tags und Links