Мені потрібно здійснити розбір великих (5-10 Gb) логістів у 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.
По-перше, який канонічний спосіб у «Вузлі» читати у файлі, рядок за рядком?
Здається, досить поширене питання в Інтернеті:
- 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?
Ура, Вікторе