Cassandra vs Riak vs Redis 〜 NoSQLの性能を比較してみた

2014-06-01
 

CassandraとRiakとRedis、どれが一番速いのかなーってことで性能を比較してみました。
後ほど詳しく書きますが、若干Redisに有利なベンチマークの取り方しています。

各ミドルウェアの条件と特徴はこれ。

アーキテクチャ比較

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

で、Riak。

Riak

riak

最後にCassandra。

Cassandra

cassandra

これだけ見ると、一見Riakのパフォーマンスが良さそうなのですが・・・
詳しく数値を追ってみます。

スループット、レイテンシ

read

write

読み込み時のベンチマーク結果から検証します。
タイムアウトを0.5秒にしたときには、RiakとCassandraのスループット、レイテンシの中央値が良いです。
しかし特にRiakの方で99パーセンタイル以上のレイテンシが著しく高いです。
つまり、タイムアウトでエラーとなっている割合が多いことを示しています。
逆にRedisはレイテンシの中央値とmaxがそう変わらないので、タイムアウトエラーが少ないことがわかります。

タイムアウトを5秒にすると、Cassandraの99パーセンタイルのレイテンシがだいぶ低くなります。
Cassandra及びRiakはクラスター構成なので、問い合わせを受けたサーバにデータが存在していない場合、他のサーバに問い合わせるホップが発生します。
RedisはMaster-Slave構成のため、完コピだからこの辺は有利ですね。
ということを踏まえると、Cassandraのスループットは相当優秀です。オンメモリストレージのRedisと戦えるくらいの性能を示しています。

さて、次に書き込みの方ですが、
これを見るとやはりRedisが秀でているように見えます。
ですが、これは書き込み対象ノードを1つにしてしまったため、クラスター構成のCassandra及びRiakに不利なベンチマークの取り方となっています。

総括

適材適所、ですかね。
特性の違いが顕著にでました。