この記事はアピリッツの技術ブログ「DoRuby」から移行した記事です。情報が古い可能性がありますのでご注意ください。
こんにちは、ワイYです。
今回は、Rubyの標準CSVはどの程度遅いのか、FasterCSVというRubyプラグインを用いて検証してみました。
検証前の準備・RubyプラグインFasterCSVをgemを用いてインストールする。gem install fastercsv・検査データとして郵便局のHPから郵便番号CSVを取得する。
検証方法Ruby標準のbenchmarkモジュールを使って、Ruby標準CSVとRubyプラグインFasterCSVにそれぞれ郵便番号CSVを読み取らせて比較する。
検証環境
OS: Windows XP
CPU: Core 2 Duo 2.4GHz
MEMORY: 3GB
Ruby v1.8.6
fastercsv v1.2.3
プラグインFasterCSVの使い方require ‘rubygems’
require ‘fastercsv’
#CSVファイルを読み込み一行ずつ処理をする
FasterCSV.foreach(“csvファイルパス指定”){ |csv|
p row #=>配列
}
検証に用いたコード検証には、ハッシュのキーを郵便番号、値を住所を挿入するようなプログラムにしました。require ‘rubygems’
require ‘benchmark’
require ‘csv’
require ‘fastercsv’
$KCODE=’sjis’
Benchmark.bm(15) do |x|
#FasterCSV
x.report(” FasterCSV”) do
hash = {}
FasterCSV.foreach(“KEN_ALL.CSV”){ |row|
hash[ row[2] ] = row[6] + row[7] + row[8]
}
end
#ruby標準CSV
x.report(“CSV”) do
hash = {}
CSV.foreach(“KEN_ALL.CSV”){ |row|
hash[ row[2] ] = row[6] + row[7] + row[8]
}
end
end
結果3回実験してみたが、RubyプラグインFasterCSVの方が5倍ほど早い事がわかった。詳細は、下図を参照してください。
まとめRubyでCSV関連を扱うときはプラグインのFasterCSVを使うようにしよう。