Javascript / Node.jsで大きな(5-10 Gb)ログファイルを解析する必要があります(私は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クライアントを使用して)。
まず、ノードでファイルを1行ずつ読み取るための標準的な方法は何ですか?
オンラインでよくある質問のようです:
- http://www.quora.com/What-is-the-best-way-to-read-a-file-line-by-line-in-node-js
- node.jsで一度に1行ずつファイルを読み取りますか?
答えの多くはサードパーティのモジュールの束を指しているようです:
- 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オブジェクトに変換し、有用なフィールドを抽出します)。
これを実行してスループットを最大化する最良の方法は何ですか?各行の読み取り、またはキューブへの送信のいずれかをブロックしない方法はありますか?
3番目に、文字列分割を使用していると思いますが、JSのcontains(IndexOf!= -1?)に相当するものは、正規表現よりもはるかに高速です。Node.jsで大量のテキストデータを解析した経験はありますか?
乾杯、ビクター