プロダクトもいろいろあるが、memcachedの本家が作っており導入が簡単なmembaseを試してみた。
ネットワーク越しだと割り切ればそれなりだ。
比較用の環境
クライアント×1
memcachedサーバ×1
membaseサーバ×2(クラスタ)
クライアントからmemcachedとmembaseにそれぞれアクセス。
動作テスト兼速度比較のシーケンス
この用に動作させて、データの整合性をチェックしつつ回す。
- membaseAにsetする
- setした値をmembaseBからgetする
- setした元値とgetした値を比較する
- membaseAからdeleteする
- deleteしたはずのキーをmembaseBからgetする
- getできたらだめ
というシーケンス、1週当たりmemcacheアクセスは4回。
比較の結果
それぞれ10000回をまわしてみて時間をとった。
memcached(TCPでリモート)
# time bundle exec ruby ./memcached-cli2.rb 10000
real 1m23.989s
user 0m10.330s
sys 0m2.840s
ネットをまたぐとそれなりに時間がかかる、1分半。
membase(TCPでリモート)
# time bundle exec ruby ./memcached-cli.rb 10000
real 1m45.161s
user 0m10.290s
sys 0m2.680s
20秒くらいの差。
40000クエリで20秒差が発生と考えると、 1クエリあたり0.5ms程度の性能差があるのかね。
参考:ローカル動作memcachedの結果
参考までにローカルのmemcachedに向けて同じテストをしてみた。
# time bundle exec ruby ./memcached-cli2.rb 10000
real 0m5.096s
user 0m3.070s
sys 0m0.950s
同じ処理だと5秒でおわる、だいぶ差はあるね。
そもそもネットワーク越しのmemcached自体がmongodbより遅かったりと微妙な所は多い。
まとめ
単純にmemcache互換でクラスタしたかったら構築の楽なmembaseもあり。すでにネット越しでmemcachedを共有しているなら特に。
データの永続化を考慮するとkumofsとかokuyamaをちゃんと検討すべきで、ローカルmemcachedの速度を求めるなら設計とかから見直すほうがいいかもね。
0 件のコメント:
コメントを投稿