J'ai besoin de faire une analyse de grands fichiers journaux (5-10 Go) dans Javascript / Node.js (j'utilise Cube).
La ligne de connexion ressemble à quelque chose comme:
10:00:43.343423 I'm a friendly log message. There are 5 cats, and 7 dogs. We are in state "SUCCESS".
Nous devons lire chaque ligne, faire une analyse (par exemple, supprimer 5
, 7
et SUCCESS
), puis pomper ces données dans Cube ( https://github.com/square/cube ) en utilisant leur client JS.
Premièrement, quelle est la manière canonique dans Node de lire dans un fichier, ligne par ligne?
Cela semble être une question assez courante en ligne:
- http://www.quora.com/What-is-the-best-way-to-read-a-file-line-by-line-in-node-js
- Lire un fichier une ligne à la fois dans node.js?
Beaucoup de réponses semblent pointer vers un tas de modules tiers:
- https://github.com/nickewing/line-reader
- https://github.com/jahewson/node-byline
- https://github.com/pkrumins/node-lazy
- https://github.com/Gagle/Node-BufferedReader
Cependant, cela semble être une tâche assez basique - il existe sûrement un moyen simple dans stdlib de lire dans un fichier texte, ligne par ligne?
Deuxièmement, je dois ensuite traiter chaque ligne (par exemple, convertir l'horodatage en un objet Date et extraire les champs utiles).
Quelle est la meilleure façon de faire cela, en maximisant le débit? Y a-t-il un moyen qui ne bloque pas la lecture de chaque ligne ou son envoi à Cube?
Troisièmement - je suppose que l'utilisation de séparations de chaînes, et l'équivalent JS de contains (IndexOf! = -1?) Sera beaucoup plus rapide que les expressions rationnelles? Quelqu'un a-t-il eu beaucoup d'expérience dans l'analyse de quantités massives de données texte dans Node.js?
Bravo, Victor