In un sistema Solaris che elabora un numero elevato di file e memorizza le loro informazioni in un database (sì, so che l'utilizzo del database è il modo più veloce per ottenere informazioni sul numero di file che abbiamo). Ho bisogno di un modo rapido per monitorare i file mentre procedono attraverso il sistema nel loro percorso verso l'archiviazione in un database.il modo più veloce per contare il numero di file in una directory contenente centinaia di migliaia di file
Attualmente utilizzo uno script perl che legge nella directory in un array e quindi acquisisce la dimensione dell'array e lo invia a uno script di monitoraggio. Sfortunatamente mentre il nostro sistema cresce, questo monitor sta diventando sempre più lento.
Sto cercando un metodo che funzioni molto più rapidamente invece di mettere in pausa e aggiornare ogni 15-20 secondi dopo aver eseguito l'operazione di conteggio su tutte le directory interessate.
Sono relativamente certo che il mio collo di bottiglia è la directory di lettura nell'operazione di array.
Non ho bisogno di informazioni sui file, non ho bisogno di dimensioni o nomi di file, solo il numero di file nella directory.
Nel mio codice non conto i file nascosti oi file di testo che utilizzo per conservare le informazioni di configurazione. Sarebbe bello se questa funzionalità fosse preservata ma non è certamente obbligatoria.
Ho trovato alcuni riferimenti al conteggio degli inode con codice C o qualcosa del genere, ma non sono molto esperto in quell'area.
Mi piacerebbe rendere questo monitor il più possibile in tempo reale.
Il codice perl che uso si presenta così:
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;
discussioni utilizzo Perl o forchette per ridurre al minimo il tempo di attesa –
@mpapec Mi piace l'idea, nel migliore dei casi questo sarebbe ancora fare il mio tempo di attesa vicino alla quantità di tempo che ci sarebbe se ho eseguito questo codice solo sulla mia directory più lunga? Se è così, non è una cattiva idea, ma sfortunatamente la maggior parte delle mie directory ha meno di 50 file mentre uno o due ne hanno migliaia. Mi piacerebbe trovare un modo per evitare di leggere tutti i file nella directory. – Andrew