Ho già appreso che readline può essere utilizzato per leggere il file riga per riga, ad es.File di lettura efficiente riga per riga nel nodo
readline
.createInterface({input: fs.createReadStream('xxx')})
.on('line', (line) => { apply_regexp_on_line })
.on('close',() => { report_all_regexps });
Tuttavia, questo è piuttosto lento, dal momento che ho confrontato le prestazioni di grep
e regexp JavaScript, e quest'ultimo ha prestazioni migliori sulle espressioni regolari che ho provato. (vedi benchmark) Quindi penso di dover incolpare la lettura asincrona del nodo.
Nella mia situazione, non mi interessa affatto asincrono, ho solo bisogno di sfruttare la regexp veloce da JavaScript per elaborare file di registro molto grandi (in genere 1-2 GB, a volte fino a 10 GB). Qual è il modo migliore per fare questo? La mia unica preoccupazione è la velocità.
Punti bonus: alcuni file di registro sono compressi con gzip, quindi è necessario decomprimerli. Se qualcuno mi può consigliare un veloce lettore line-by-line sia per il testo semplice che per il testo gzippato, sarei molto apprezzato.
Non si sa cosa 'apply_regexp_on_line' ma è possibile utilizzare il programma unix' sed' per eseguire sostituzioni di stringa? È abbastanza veloce Probabilmente puoi scrivere uno script di shell semplice e veloce per eseguire la decompressione e il seding. –
Si prega di consultare il link di riferimento nella domanda. 'sed' non è veloce come JavaScript. Fondamentalmente 'apply_regexp_on_line' catturerebbe del testo nel file di log usando regexp e lo memorizzasse, e' report_all_regexps' avrebbe riportato il testo catturato in un dato formato. – xis
grazie per l'informazione. Non mi aspettavo che 'sed' fosse più lento della regex di javascript! argomento votato e aggiunto ai preferiti. Sono ansioso di conoscere anche la soluzione. –