Home > プログラムについて | 研究について > mruby-{Redis,Vedis,Memcached}でSET/GETの簡易ベンチマークしてみた

mruby-{Redis,Vedis,Memcached}でSET/GETの簡易ベンチマークしてみた


mrubyでKey-Value Storeにアクセスできるクライアントをこれまでいくつか作ってきたので、Vedisの性能が見たいというのとその他ちょっとした興味でそれぞれのKVSのSET/GETを投げてみて速度の比較をしてみました。

といっても、それぞれの良さを考慮したベンチマークではなくソフトの良し悪しを測るものではないので、この条件だとこういう結果になるという参考程度に見て頂ければと思います。

比較対象は、Redis、Vedis(In-Memory)、Vedis(On-Disk)、Memcachedです。それぞれ、Fedora19のyumでインストールした後にserviceコマンドで起動させただけの状態です。マシンはCPUコア2つのメモリ8GBを使いました。

RedisやMemcachedはこのエントリを見ている人は僕以上に詳しいと思うので、Vedisのみについて簡単に紹介しておきます。VedisはRedisのコマンド互換でサーバ機能を持たず、アプリ自身のプロセスで動作するKVSです。In-Memoryで使用した場合はそのプロセス上にデータを保存、On-Diskの場合は指定のファイルにデータを保存します。詳しくは過去のエントリ「mrubyでRedis使うのはオーバースペックな人のためにmruby-vedis作った」をご覧下さい。

ベンチマーク

mrubyで比較ですので、ベンチマーク比較として以下のような簡単なコードを書いて(suzukaze7さんのmruby-msgpackの記事を参考)比較しました。また、クライアントには、

を使っています。

class SimpleBenchmark

  def initialize(width = 0)
    @width = width
  end

  def measure(label)
    start = Time.now
    yield if block_given?
    passed = Time.now - start

    puts "#{make_fixed_label(label)}passed time #{passed} sec"
  end

  def make_fixed_label(label)
   if @width - label.length > 0
      label + ' ' * (@width - label.length)
    else
      label
    end
  end

end

benchmark = SimpleBenchmark.new
r = Redis.new "127.0.0.1", 6379
v = Vedis.new              # In-Memory
vd = Vedis.new "/tmp/vedis.db"      # On-Disk
m = Memcached.new "127.0.0.1:11211"

n = 100000

[r, v, vd, m].each do ¦kvs¦
  benchmark.measure("#{kvs.class}: ") do
    n.times do ¦t¦
      kvs.set t.to_s, t.to_s
      if kvs.get(t.to_s) != t.to_s
        raise "#{kvs.class}: set/get #{t.to_s} failed"
      end
    end
  end
end

r.close
v.close
vd.close
m.close

単純に10万回KeyとValueを変えてSET/GETを行っているだけのベンチマークです。実行結果は以下のようになりました。

$ ./bin/mruby bench.rb
Redis: passed time 28.6142429999999 sec
Vedis: passed time 0.16603299999999 sec
Vedis: passed time 0.2991210 sec
Memcached: passed time 26.0939140 sec

3行目のVedisはOn-Diskタイプになります。現状ではホ~という感じですが、アプリで外部にKVSをもつ必要がない場合などにVedisは非常に高速なので使いやすそうという印象は受けました。また、RedisやMemcachedの設定を変えるとまた違った結果になるのだろうと思います。

ということで、今回はVedisの性能も含めて大体の速度の雰囲気を掴みたかったのでこのような簡単なベンチマークを試してみました。Vedisはあまり馴染みのないソフトウェアだと思うので、これを機に幾つか試してみると面白いだろうなぁと感じました。

コメント:0

コメントフォーム
Remember personal info

トラックバック:0

このエントリーのトラックバックURL
http://blog.matsumoto-r.jp/wp-trackback.php?p=4071
Listed below are links to weblogs that reference
mruby-{Redis,Vedis,Memcached}でSET/GETの簡易ベンチマークしてみた from 人間とウェブの未来

Home > プログラムについて | 研究について > mruby-{Redis,Vedis,Memcached}でSET/GETの簡易ベンチマークしてみた

検索
フィード
メタ情報

Return to page top