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の記事を参考)比較しました。また、クライアントには、
を使っています。
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を行っているだけのベンチマークです。実行結果は以下のようになりました。
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
トラックバック: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 人間とウェブの未来