Saya perlu melakukan beberapa parsing file log besar (5-10 Gb) di Javascript / Node.js (Saya menggunakan Cube).
Logline terlihat seperti ini:
10:00:43.343423 I'm a friendly log message. There are 5 cats, and 7 dogs. We are in state "SUCCESS".
Kita perlu membaca setiap baris, melakukan beberapa parsing (misalnya strip out 5
, 7
dan SUCCESS
), lalu memompa data ini ke dalam Cube ( https://github.com/square/cube ) menggunakan klien JS mereka.
Pertama, apa cara kanonik di Node untuk membaca dalam file, baris demi baris?
Tampaknya pertanyaan online yang cukup umum:
- http://www.quora.com/What-is-the-best-way-to-read-a-file-line-by-line-in-node-js
- Membaca file satu baris dalam satu waktu di node.js?
Banyak jawaban yang tampaknya mengarah ke sekumpulan modul pihak ketiga:
- https://github.com/nickewing/line-reader
- https://github.com/jahewson/node-byline
- https://github.com/pkrumins/node-lazy
- https://github.com/Gagle/Node-BufferedReader
Namun, ini tampak seperti tugas yang cukup mendasar - tentunya, ada cara sederhana dalam stdlib untuk membaca dalam file teks, baris demi baris?
Kedua, saya kemudian perlu memproses setiap baris (misalnya mengubah cap waktu menjadi objek Tanggal, dan mengekstrak bidang yang berguna).
Apa cara terbaik untuk melakukan ini, memaksimalkan hasil? Adakah cara yang tidak akan memblokir pembacaan di setiap baris, atau saat mengirimkannya ke Cube?
Ketiga - Saya menebak menggunakan pemisahan string, dan JS yang setara dengan berisi (IndexOf! = -1?) Akan jauh lebih cepat daripada regex? Adakah yang punya banyak pengalaman dalam mengurai sejumlah besar data teks di Node.js?
Cheers, Victor