Parsowanie ogromnych plików logów w Node.js - czytaj po linii

Muszę wykonać kilka analiz dużych plików logów (5-10 Gb) w Javascript / Node.js (używam Cube).

Logline wygląda mniej więcej tak:

10:00:43.343423 I'm a friendly log message. There are 5 cats, and 7 dogs. We are in state "SUCCESS".

Musimy przeczytać każdą linię, wykonać kilka analiz (np. Rozebrać5, 7 iSUCCESS), następnie przepompuj te dane do Cube (https://github.com/square/cube) za pomocą swojego klienta JS.

Po pierwsze, jaki jest kanoniczny sposób odczytywania w węźle pliku po linii?

Wydaje się być dość powszechnym pytaniem online:

http://www.quora.com/What-is-the-best-way-to-read-a-file-line-by-line-in-node-jsCzytaj plik po jednym wierszu naraz w node.js?

Wiele odpowiedzi wydaje się wskazywać na kilka modułów innych firm:

https://github.com/nickewing/line-readerhttps://github.com/jahewson/node-bylinehttps://github.com/pkrumins/node-lazyhttps://github.com/Gagle/Node-BufferedReader

Wydaje się jednak, że jest to dość podstawowe zadanie - na pewno istnieje prosty sposób w stdlib na odczyt w pliku tekstowym, linia po linii?

Po drugie, muszę przetworzyć każdą linię (np. Przekształcić znacznik czasu w obiekt Date i wyodrębnić użyteczne pola).

Jak najlepiej to zrobić, maksymalizując przepustowość? Czy jest jakiś sposób, który nie blokuje ani czytania w każdym wierszu, ani wysyłania go do Cube?

Po trzecie - zgaduję, że przy użyciu podziałów na łańcuchy, a odpowiednik JS z include (IndexOf! = -1?) Będzie dużo szybszy niż wyrażenia regularne? Czy ktoś miał duże doświadczenie w analizowaniu ogromnych ilości danych tekstowych w Node.js?

Pozdrawiam, Victor

questionAnswers(9)

yourAnswerToTheQuestion