ホーム DoRuby Ruby標準csv遅い

Ruby標準csv遅い

この記事はアピリッツの技術ブログ「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を使うようにしよう。

記事を共有
モバイルバージョンを終了