Tôi cần thực hiện một số phân tích cú pháp các tệp nhật ký lớn (5-10 Gb) trong Javascript / Node.js (Tôi đang sử dụng Cube).
Dòng nhật ký trông giống như sau:
10:00:43.343423 I'm a friendly log message. There are 5 cats, and 7 dogs. We are in state "SUCCESS".
Chúng ta cần phải đọc từng dòng, làm một số phân tích cú pháp (ví dụ như loại bỏ 5
, 7
và SUCCESS
), sau đó bơm dữ liệu này vào Cube ( https://github.com/square/cube ) sử dụng client JS của họ.
Thứ nhất, cách chuẩn trong Node để đọc trong một tệp, từng dòng là gì?
Có vẻ như đây là một câu hỏi khá phổ biến trên mạng:
- http://www.quora.com/What-is-the-best-way-to-read-a-file-line-by-line-in-node-js
- Đọc tệp một dòng tại một thời điểm trong node.js?
Rất nhiều câu trả lời dường như chỉ ra một loạt các mô-đun của bên thứ ba:
- https://github.com/nickewing/line-reader
- https://github.com/jahewson/node-byline
- https://github.com/pkrumins/node-lazy
- https://github.com/Gagle/Node-BufferedReader
Tuy nhiên, đây có vẻ như là một nhiệm vụ khá cơ bản - chắc chắn, có một cách đơn giản trong stdlib để đọc trong một tệp văn bản, từng dòng?
Thứ hai, sau đó tôi cần xử lý từng dòng (ví dụ: chuyển đổi dấu thời gian thành đối tượng Ngày và trích xuất các trường hữu ích).
Cách tốt nhất để làm điều này, tối đa hóa thông lượng là gì? Có cách nào đó không chặn việc đọc từng dòng hoặc gửi nó đến Cube không?
Thứ ba - Tôi đang đoán sử dụng phân tách chuỗi và JS tương đương của hàm chứa (IndexOf! = -1?) Sẽ nhanh hơn rất nhiều so với regexes? Có ai có nhiều kinh nghiệm trong việc phân tích cú pháp một lượng lớn dữ liệu văn bản trong Node.js không?
Chúc mừng, Victor