Мне нужно выполнить парсинг больших (5-10 Гб) лог-файлов в Javascript / Node.js (я использую Cube).
Логлайн выглядит примерно так:
10:00:43.343423 I'm a friendly log message. There are 5 cats, and 7 dogs. We are in state "SUCCESS".
Мы должны читать каждую строку, сделать некоторые синтаксический анализ (например , раздеть 5
, 7
а SUCCESS
), а затем накачать эти данные в кубе ( https://github.com/square/cube ) с помощью своего клиента JS.
Во-первых, каков канонический способ чтения файла в Node построчно?
Это довольно распространенный вопрос в сети:
- http://www.quora.com/What-is-the-best-way-to-read-a-file-line-by-line-in-node-js
- Прочитать файл по одной строке в node.js?
Многие ответы, похоже, указывают на кучу сторонних модулей:
- https://github.com/nickewing/line-reader
- https://github.com/jahewson/node-byline
- https://github.com/pkrumins/node-lazy
- https://github.com/Gagle/Node-BufferedReader
Однако это кажется довольно простой задачей - конечно, есть простой способ в stdlib читать текстовый файл построчно?
Во-вторых, мне нужно обработать каждую строку (например, преобразовать метку времени в объект Date и извлечь полезные поля).
Как лучше всего это сделать, увеличив пропускную способность? Есть ли способ, который не блокирует чтение каждой строки или отправку ее в Cube?
В-третьих, я предполагаю, что использую разбиение строк, а JS-эквивалент contains (IndexOf! = -1?) Будет намного быстрее, чем регулярные выражения? Есть ли у кого-нибудь большой опыт анализа огромных объемов текстовых данных в Node.js?
Ура, Виктор