ページ

2010年11月6日

membase、めちゃくちゃ遅い?いや、遅すぎ?

最近はいろいろとベンチマーク的なことをやったりして、それが仕事なのか趣味なのかよく分からない日々を送っています。しかも、会社の人はみんな忙しそうにしているので、暇そうなのはCTOと僕ぐらいです。そんなこんなで、自分で手を動かしている訳ですが・・・。

さて、membaseが気になるお年頃で、membaseとmemcacheで速度比較してみました。以前、repcacheとの速度比較もしたのですが、データをなくしちゃったというか、ほとんど劣化しなかったので、とってもつまらなかったです。membaseもmemcache互換プロトコルをサポートしてくるので、コードを書き換える必要はありません。会社で試したときは、うまく動かなかったのですが、家ではちゃんと動いています。何が違うのでしょう?

まず、membaseの独断と偏見の特徴は次の3つです。
  • クラスタ構成
  • memcache互換プロトコル
  • レプリケーションとデータの永続化
それでは、ベンチマークします。コードは以前の記事で使ったこれです。測定環境は、家のiMacです。会社のマシンより遥かにいいマシンです。えへん。memcache,membaseのサーバはVMWare上のUbuntu 10.10で動かしています。なので、ネットワーク構成がブリッジになっています。

で、membaseはdata bucket(データの保存形式)が二つあります。一つがmembaseのオリジナルのもので、もう一つがmemcacheです。違いがあまりわからないのですが、memcacheはon memoryということでしょうか?

で、測定結果です。

まず、addする時間。1000回addした時の平均ですね。テーブルにするのがめんどいので普通のリストで書きます。ごめんなさい。
  • membase (membase bucket) : 0.32 m sec
  • membase (memcache bucket) : 0.22 m sec
  • memcache : 0.034 m sec
まず、addする時間ですが、memcacheに比べて10倍遅いです。なんど計っても、違いがありません。memcacheのbucketなら多少速いですが、memcacheと比べるとやっぱり遅すぎます。

それでは検索というか、フェッチするスピードです。
  • membase (membase bucket) : 0.30 m sec
  • membase (memcache bucket) : 0.22 m sec
  • memcache : 0.032 m sec
検索もやっぱり一桁遅いです。membaseはとても魅力的な機能を持っていますが、10倍の速度差は許容できないです。多分、一般的にmemcacheより10倍遅ければ、APIが同じでも全体の作りを変えないといけません。
MongoDBがより複雑なことをしておきながらKVSとして使う場合2から3倍の速度劣化しかないのにくらべると、やはりmembaseは納得できる遅さではありません。

ということで、membaseはmemcacheの代替ではなく、使いどころをちゃんと考えないと行けないです。
でわでわ。

0 件のコメント: