Eu preciso fazer uma análise de arquivos de log grandes (5-10 Gb) em Javascript / Node.js (estou usando o Cube).
A linha de log se parece com:
10:00:43.343423 I'm a friendly log message. There are 5 cats, and 7 dogs. We are in state "SUCCESS".
Precisamos ler cada linha, fazer uma análise (por exemplo, retirar 5
, 7
e SUCCESS
) e, em seguida bombear esses dados em Cube ( https://github.com/square/cube ) usando seu cliente JS.
Primeiramente, qual é a maneira canônica no Node de ler um arquivo, linha por linha?
Parece ser uma pergunta bastante comum online:
- http://www.quora.com/What-is-the-best-way-to-read-a-file-line-by-line-in-node-js
- Ler um arquivo uma linha de cada vez no node.js?
Muitas das respostas parecem apontar para vários módulos de terceiros:
- https://github.com/nickewing/line-reader
- https://github.com/jahewson/node-byline
- https://github.com/pkrumins/node-lazy
- https://github.com/Gagle/Node-BufferedReader
No entanto, isso parece uma tarefa bastante básica - certamente, há uma maneira simples no stdlib de ler um arquivo de texto, linha por linha?
Em segundo lugar, preciso processar cada linha (por exemplo, converter o registro de data e hora em um objeto Date e extrair campos úteis).
Qual é a melhor maneira de fazer isso, maximizando a taxa de transferência? Existe alguma maneira de não bloquear a leitura em cada linha ou enviá-la para o Cube?
Em terceiro lugar - acho que usando divisões de string, e o equivalente JS de contains (IndexOf! = -1?) Será muito mais rápido que as expressões regulares? Alguém já teve muita experiência na análise de grandes quantidades de dados de texto no Node.js.
Cheers, Victor