CassandraとRiakとRedis、どれが一番速いのかなーってことで性能を比較してみました。
後ほど詳しく書きますが、若干Redisに有利なベンチマークの取り方しています。
各ミドルウェアの条件と特徴はこれ。
で、Riak。
最後にCassandra。
これだけ見ると、一見Riakのパフォーマンスが良さそうなのですが・・・
詳しく数値を追ってみます。
読み込み時のベンチマーク結果から検証します。
タイムアウトを0.5秒にしたときには、RiakとCassandraのスループット、レイテンシの中央値が良いです。
しかし特にRiakの方で99パーセンタイル以上のレイテンシが著しく高いです。
つまり、タイムアウトでエラーとなっている割合が多いことを示しています。
逆にRedisはレイテンシの中央値とmaxがそう変わらないので、タイムアウトエラーが少ないことがわかります。
タイムアウトを5秒にすると、Cassandraの99パーセンタイルのレイテンシがだいぶ低くなります。
Cassandra及びRiakはクラスター構成なので、問い合わせを受けたサーバにデータが存在していない場合、他のサーバに問い合わせるホップが発生します。
RedisはMaster-Slave構成のため、完コピだからこの辺は有利ですね。
ということを踏まえると、Cassandraのスループットは相当優秀です。オンメモリストレージのRedisと戦えるくらいの性能を示しています。
さて、次に書き込みの方ですが、
これを見るとやはりRedisが秀でているように見えます。
ですが、これは書き込み対象ノードを1つにしてしまったため、クラスター構成のCassandra及びRiakに不利なベンチマークの取り方となっています。
アーキテクチャ比較
Cassandra
●version: 2.0.5 ●構成: cluster ●depend: Java, Python ●データモデル: カラム指向 ●アーキテクチャ: Gossip ●ノード管理: 設定ファイル/コマンド/GUI ●無停止ノード管理: 無停止 ●CUIクライアント: cqlsh ●管理ツール: 付属のweb ui Cassandraのインストール〜クラスター構築はこちらをどうぞ。 Cassandra2系のクラスターをRHEL系LInuxに構築するRiak
●version: 2.0.0pre11 ●構成: cluster ●depend: Erlang ●データモデル: Key-Value ●アーキテクチャ: Gossip ●ノード管理: コマンド/GUI ●無停止ノード管理: 無停止 ●CUIクライアント: erlangシェル ●管理ツール: 付属のweb ui Riakのインストール〜クラスター構築はこちらをどうぞ。 Riak2.0.0preをつかってみたRedis
●version: 2.8.3 ●構成: master-slave ●depend: C ●データモデル: Key-Value ●アーキテクチャ: オンメモリ ●ノード管理: 設定ファイル/コマンド ●無停止ノード管理: slave追加は無停止 ●CUIクライアント: redis-cli ●管理ツール: phpredmin, phpRedisAdmin Redisのインストールはyumでrpm入れて終わりなので特に書きませんでした。ベンチマーク条件
ベンチマークをとった条件はこんな感じです。 ●スペック: CPU8コア、メモリ16GB ●時間: 60分 ●構成: 3ノード ●操作: 50スレッドで読み込み。2スレッドで書き込み。 ●初期key数: 120,000 ●keyごとのサイズ: 80KB ●timeout: 500/1000/5000 Redis: 書き込みはmasterに, 読み込みはslave1とslave2から。 CassandraとRiak: 書き込みはnode1に, 読み込みはnode1〜3から。 Riakのstrageモードはbitcast。 Riak, Cassandraは2ノードにデータを保存。 使ったのはBasho Benchです。 RiakのBasho製なので、てっきりRiakに有利かと思ったのですが・・・結果
Basho Benchでグラフを出力しました。 まずはRedisから。Redis
![redis](https://x1.inkenkun.com/wp-content/uploads/2014/06/redis-300x225.png)
Riak
![riak](https://x1.inkenkun.com/wp-content/uploads/2014/06/riak-300x225.png)
Cassandra
![cassandra](https://x1.inkenkun.com/wp-content/uploads/2014/06/cassandra-300x225.png)
スループット、レイテンシ
![read](https://x1.inkenkun.com/wp-content/uploads/2014/06/read-217x300.png)
![write](https://x1.inkenkun.com/wp-content/uploads/2014/06/write-217x300.png)