読者です 読者をやめる 読者になる 読者になる

FastestCSV がヤクい件

Ruby の標準添付CSV パーサが遅いというのは有名な話なので
これまでは主にFasterCSV を使っていました。


FasterCSV のベンチマーク - *Trace Output* にあるとおり、標準のパーサと比較して

結果

csv を parse して行数を数えるだけのスクリプト(後述)の実行時間を GNU time で測定しました。

対象 結果
ruby 1.8.4 + 標準添付の csv 12分26秒56
ruby 1.8.4 + FasterCSV 0.1.9 2分34秒92

FasterCSV は標準添付の csv パーサの 5〜6 倍速いようです。

と、それなりに満足していたのですが、とあるPHP で書かれた「CSV を解析してほげほげする処理」を
Ruby で書き直してみたところ、10倍以上の時間が掛かるようになってしまいました。
# 4万行↑のCSV のため、数十秒以上の開きが……。


そこで、先ほどのベンチマークにコメントされていた

moonwolf 2006/06/02 14:28
flexを使ってFastestCSVという拡張ライブラリを書いてみました。
Pythonの2〜3倍くらいの実行時間にまで早くなりましたw


http://d.hatena.ne.jp/miyamuko/20060301#c1149226101

id:moonwolf 氏のFastestCSV を試してみることに。


ちょっと見つけにくかったですが、RAA - csvscan にありました。
CSVScan が正式名称なのでしょうか。

インストールはREADME.ja を見ればすぐに分かるので割愛。


試してみた結果は非常に満足。PHP とほぼ同じくらいの速度で解析されているようです。


使い方が標準のCSV やFasterCSV と少しだけ違うので気をつけないといけないですね。

require "csvscan"   # ライブラリのロード

open(ARGV.shift) {|io|
   CSVScan.scan(io) {|row|
      p row
   }
}