Ich muss einige große (5-10 GB) Protokolldateien in Javascript / Node.js analysieren (ich verwende Cube).
Die Logline sieht ungefähr so aus:
10:00:43.343423 I'm a friendly log message. There are 5 cats, and 7 dogs. We are in state "SUCCESS".
Wir brauchen jede Zeile zu lesen, einige der Parsing (zB Streifen aus 5
, 7
und SUCCESS
), dann diese Daten in Cube - Pumpe ( https://github.com/square/cube ) ihre JS - Client.
Was ist die kanonische Methode in Node, um eine Datei Zeile für Zeile einzulesen?
Es scheint eine ziemlich häufige Online-Frage zu sein:
- http://www.quora.com/Was-ist-der-bester- Weg-zum-Lesen-einer-Datei-Linie-durch-Linie-in-Knoten-js
- Eine Datei zeilenweise in node.js lesen?
Viele der Antworten scheinen auf eine Reihe von Modulen von Drittanbietern zu verweisen:
- https://github.com/nickewing/line-reader
- https://github.com/jahewson/node-byline
- https://github.com/pkrumins/node-lazy
- https://github.com/Gagle/Node-BufferedReader
Dies scheint jedoch eine ziemlich grundlegende Aufgabe zu sein - sicherlich gibt es innerhalb der stdlib eine einfache Möglichkeit, eine Textdatei zeilenweise einzulesen?
Zweitens muss ich dann jede Zeile verarbeiten (z. B. den Zeitstempel in ein Datumsobjekt konvertieren und nützliche Felder extrahieren).
Was ist der beste Weg, um den Durchsatz zu maximieren? Gibt es eine Möglichkeit, die das Lesen in jeder Zeile oder das Senden an Cube nicht blockiert?
Drittens - ich vermute, dass String-Splits verwendet werden und das JS-Äquivalent von enthält (IndexOf! = -1?) Viel schneller ist als reguläre Ausdrücke? Hat jemand viel Erfahrung mit dem Parsen großer Mengen von Textdaten in Node.js?
Prost, Victor