Muszę przeprowadzić analizę dużych (5–10 GB) plików dziennika 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 czytać każdą linię, zrobić kilka parsowania (np rozebrać się 5
, 7
a SUCCESS
), a następnie pompować te dane do Cube ( https://github.com/square/cube ), wykorzystując ich klient JS.
Po pierwsze, jaki jest kanoniczny sposób w Node, aby czytać plik, wiersz po wierszu?
Wydaje się, że jest to dość powszechne pytanie online:
- http://www.quora.com/What-is-the-best-way-to-read-a-file-line-by-line-in-node-js
- Czytać plik po jednym wierszu na raz w node.js?
Wiele odpowiedzi wydaje się wskazywać na kilka modułów innych firm:
- https://github.com/nickewing/line-reader
- https://github.com/jahewson/node-byline
- https://github.com/pkrumins/node-lazy
- https://github.com/Gagle/Node-BufferedReader
Wydaje się jednak, że jest to dość podstawowe zadanie - z pewnością w standardowej bibliotece standardowej jest prosty sposób, aby czytać w pliku tekstowym, wiersz po wierszu?
Po drugie, muszę następnie przetworzyć każdą linię (np. Przekonwertować znacznik czasu na obiekt Date i wyodrębnić przydatne pola).
Jaki jest najlepszy sposób, aby to zrobić, maksymalizując przepustowość? Czy jest jakiś sposób, który nie blokuje czytania w każdym wierszu lub wysyłania go do Cube?
Po trzecie - zgaduję, że używam podziałów ciągów, a odpowiednik zawiera w JS (IndexOf! = -1?) Będzie o wiele szybszy niż wyrażenia regularne? Czy ktoś miał duże doświadczenie w analizowaniu ogromnych ilości danych tekstowych w Node.js?
Pozdrawiam, Victor