Apacheのアクセスログ(commonあるいはcombined形式)をLTSVに変換するツールをJavaで書いてみた。
使い方:
mcp.jarをダウンロードし、
cat access_log | java -cp mcp.jar net.jumperz.app.MCP.MCP net.jumperz.io.multicore.example.MCombined2LTSV
パースするコードそのものはこんな感じで普通。正規表現は使っていない。たぶんJava1.4以上でコンパイル可能。
こういう処理をさくっとマルチコア対応にするためのフレームワーク、MCPというのを作ったので、早速利用してみると、手元の4コアのマシンでは約140万行/秒(common形式のログ)という爆速で変換が終了する。dankogai氏が書かれているperlスクリプトより約20〜30倍速い(正規表現を使うかどうかという点が大きく関係していると思われるが)。
MCPについてはScutumブログに詳しく書いたので、参考まで。『テキストデータ処理を簡単にマルチコア対応にするJavaフレームワーク、MCPの実装』
最近Rubyの勉強もしている。Ruby関連の本を読んでいると『使いづらい言語』の代表みたいにDISられ気味なJavaだが、この例のように、速度が簡単に出るあたり、すごく魅力がある言語だと思う。