Ich benutze Perl readdir, um Dateiauflistung zu erhalten, jedoch enthält das Verzeichnis mehr als 250.000 Dateien und dies führt zu langen Zeit (länger als 4 Minuten), um Readdir durchzuführen und verwendet über 80 MB RAM. Da dies ein wiederkehrender Job alle 5 Minuten sein sollte, wird diese Verzögerungszeit nicht akzeptabel sein.Wie kann ich Perls readdir für ein Verzeichnis mit 250.000 Dateien beschleunigen?
Weitere Informationen: Ein anderer Job füllt das Verzeichnis (einmal pro Tag), das gescannt wird. Dieses Perl-Skript ist verantwortlich für die Verarbeitung der Dateien. Für jede Skriptiteration wird eine Dateianzahl angegeben, derzeit 1000 pro Lauf. Das Perl-Skript wird alle 5 Minuten ausgeführt und verarbeitet (falls zutreffend) bis zu 1000 Dateien. Limit für die Anzahl der Dateien, damit die Downstream-Verarbeitung mithalten kann, wenn Perl Daten in die Datenbank verschiebt, was einen komplexen Workflow auslöst.
Gibt es eine andere Möglichkeit, Dateinamen aus dem Verzeichnis zu erhalten, im Idealfall auf 1000 begrenzt (durch Variable festgelegt), was die Geschwindigkeit dieses Skripts erheblich erhöhen würde?
Brilliant. Ich muss vielleicht zurückgehen und einige Verzeichniszugriffe umgestalten! –
das definierte Zeug ist implizit, während (meine $ file = readdir $ dir) {} ist OK –
Das löste das Problem für mich. Erlaubt auch die genaue Kontrolle darüber, wie viele Dateinamen abgerufen wurden, um den Stopp bei der gewünschten Schwelle zu ermöglichen. Danke daotoad. – Walinmichi