Je dois analyser des fichiers journaux volumineux (5 à 10 Go) en Javascript/Node.js (j'utilise Cube).
La ligne de conduite 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 un peu d'analyse syntaxique (par exemple, enlever les caractères 5
, 7
et SUCCESS
), puis de pomper ces données dans Cube ( https://github.com/square/cube ) en utilisant leur client JS.
Tout d'abord, quelle est la manière canonique dans Node de lire un fichier, ligne par ligne ?
Cette question semble être assez courante sur Internet :
- 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 y a sûrement un moyen simple dans la stdlib pour lire un fichier texte, ligne par ligne ?
Ensuite, je dois traiter chaque ligne (par exemple, convertir l'horodatage en un objet Date, et extraire les champs utiles).
Quelle est la meilleure façon de le faire, en maximisant le débit ? Existe-t-il un moyen de ne pas bloquer la lecture de chaque ligne ou l'envoi au Cube ?
Troisièmement, je suppose que l'utilisation des séparations de chaînes de caractères et de l'équivalent JS de contains (IndexOf != -1 ?) sera beaucoup plus rapide que les regex ? Quelqu'un a-t-il une grande expérience de l'analyse de quantités massives de données textuelles dans Node.js ?
A la vôtre, Victor