その他
    ホーム技術発信DoRubyRuby標準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を使うようにしよう。