Мне нужно выполнить парсинг больших (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
), затем перекачать эти данные в Cube (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 содержит (IndexOf!= -1?) будет намного быстрее, чем регулярные выражения? Кто-нибудь имел большой опыт в анализе массивных текстовых данных в node.js?
Cheers, Виктор