Necesito hacer un análisis de archivos de registro grandes (5-10 Gb) en Javascript / Node.js (estoy usando Cube).
El logline se parece a:
10:00:43.343423 I'm a friendly log message. There are 5 cats, and 7 dogs. We are in state "SUCCESS".
Hay que leer cada línea, hacer un poco de análisis (por ejemplo, pelar hacia fuera 5
, 7
y SUCCESS
), entonces bombear estos datos en Cubo ( https://github.com/square/cube ) usando su cliente de JS.
En primer lugar, ¿cuál es la forma canónica en Node de leer un archivo, línea por línea?
Parece ser una pregunta bastante común en línea:
- http://www.quora.com/What-is-the-best-way-to-read-a-file-line-by-line-in-node-js
- ¿Leer un archivo una línea a la vez en node.js?
Muchas de las respuestas parecen apuntar a un montón de módulos de terceros:
- https://github.com/nickewing/line-reader
- https://github.com/jahewson/node-byline
- https://github.com/pkrumins/node-lazy
- https://github.com/Gagle/Node-BufferedReader
Sin embargo, esto parece una tarea bastante básica; seguramente, hay una forma simple dentro de stdlib para leer en un archivo de texto, línea por línea.
En segundo lugar, necesito procesar cada línea (por ejemplo, convertir la marca de tiempo en un objeto de fecha y extraer campos útiles).
¿Cuál es la mejor manera de hacer esto, maximizando el rendimiento? ¿Hay alguna forma que no bloquee la lectura de cada línea o el envío a Cube?
En tercer lugar, supongo que usar divisiones de cadenas, y el equivalente en JS de contains (IndexOf! = -1?) Será mucho más rápido que las expresiones regulares. ¿Alguien ha tenido mucha experiencia en analizar cantidades masivas de datos de texto en Node.js?
Saludos, Victor