Ho bisogno di analizzare alcuni file di log di grandi dimensioni (5-10 Gb) in Javascript / Node.js (sto usando Cube).
La logline ha un aspetto simile a:
10:00:43.343423 I'm a friendly log message. There are 5 cats, and 7 dogs. We are in state "SUCCESS".
Dobbiamo leggere ogni riga, fare qualche analisi (es nudo fuori 5
, 7
e SUCCESS
), poi la pompa questi dati in cubo ( https://github.com/square/cube ) usando il loro client JS.
In primo luogo, qual è il modo canonico in Node di leggere un file, riga per riga?
Sembra essere una domanda abbastanza comune online:
- http://www.quora.com/What-is-the-best-way-to-read-a-file-line-by-line-in-node-js
- Leggere un file una riga alla volta in node.js?
Molte delle risposte sembrano indicare un gruppo di moduli di terze parti:
- https://github.com/nickewing/line-reader
- https://github.com/jahewson/node-byline
- https://github.com/pkrumins/node-lazy
- https://github.com/Gagle/Node-BufferedReader
Tuttavia, questo sembra un compito abbastanza semplice: sicuramente c'è un modo semplice all'interno di stdlib per leggere in un file di testo, riga per riga?
In secondo luogo, devo quindi elaborare ogni riga (ad esempio convertire il timestamp in un oggetto Date ed estrarre campi utili).
Qual è il modo migliore per farlo, massimizzando il throughput? C'è un modo che non si blocchi sulla lettura di ogni riga o sull'invio a Cube?
Terzo: immagino che l'uso di divisioni di stringhe e l'equivalente JS di contiene (IndexOf! = -1?) Sarà molto più veloce delle regex? Qualcuno ha avuto molta esperienza nell'analisi di enormi quantità di dati di testo in Node.js?
Salute, Victor