Elasticache比較

Elasticacheとは

インメモリデータベースのサービス。
インメモリデータベースはデータをメモリ上で持ち、ディスクにアクセスする必要性を除くことによって、最小限の応答時間を達成するように設計されている。
すべてのデータはメインメモリにのみ保存および管理されているので、処理やサーバー障害によって失われてしまうリスクがあるが、すべてのオペレーションをログに保存したりスナップショットを取得したりすることで、データを存続することができる。

ElasticacheではKey-Value型のオープンソースのNoSQLデータベースであるRedisと、Key-Value型のオープンソースのキャッシュシステムであるmemcachedを利用出来る。

Redisの特徴

  • リモートディクショナリサーバーの略
  • 高速に値をRead/WriteできるNoSQL
  • データベース、キャッシュ、メッセージブローカー、およびキューとして使用
  • 全てのデータ操作は排他的
  • メモリ内Key-Valueデータストア (データアクセスが高速)
  • メモリを使い果たしたら特定のルールに従って削除する
  • それでもメモリを確保できないときは全ての書込みをエラーにする
  • MASTER-SLAVEのレプリケーション構築が可能 (SLAVEは複数設定可能)
  • レプリケーションは非同期
  • 複数の操作を1回で実行できる
  • MULTIでトランザクション開始
  • 全て実行(EXEC)or全て未実行(DISCARD)
  • 幅広いユースケースに対して効果的
  • keyに対して有効期限を設定できる(SessionID, OneTimeToken)
  • ディスクI/Oを無効化できる
  • イベント駆動アーキテクチャ
  • シングルスレッドで動作 (複数の処理を並列で行えない)
  • CPUの1コアのみを使用 (複数コアを利用する場合は複数台のRedisを立ち上げ推奨)
  • 5つのデータ型が使用可能
    • 文字列型
    • リスト型
    • セット型
    • ソート済みセット型
    • ハッシュ型
  • プライマリ/レプリカアーキテクチャ

ユースケース

  • キャッシュ
  • チャット、メッセージング、キュー
  • ゲームのリーダーボード
  • セッションストア
  • リッチメディアストリーミング
  • 地理空間
  • Machine Learning
  • リアルタイム分析

Memcachedの特徴

  • シンプル
  • キャッシュやセッションストアとして役立ちます
  • 分散型
  • 新しいノードを追加することにより簡単にスケールアウトできます
  • マルチスレッド
  • 特定のノードにおいて複数のコアを利用可能
  • ディスクI/Oが発生しない

ユースケース

  • キャッシュ
  • 永続性が重要ではないセッションストア
  • ウェブ
  • モバイルアプリケーション
  • ゲーム
  • アドテック
  • eコマース

Redis 対 Memcached

どちらも持つ特徴

Redisのみ

  • データ構造のサポート
    • String に加えて、List、Set、Sorted Set、Hash、Bit Array、HyperLogLog をサポートしています。アプリケーションは、これらの柔軟なデータ構造を使用して、さまざまなユースケースをサポートできます。たとえば、Redis の Sorted Set を使用すると、ランク別にソートされたプレイヤーのリストを維持したゲームの順位表を簡単に実装できます。
  • スナップショット
    • アーカイブまたはリカバリーに使用できる特定の時点のスナップショットを使用してデータをディスクに保存できます。
  • レプリケーション
    • Redis プライマリの複数のレプリカを作成できます。これにより、データベースの読み取りを拡張し、可用性の高いクラスターを設定できます。
  • トランザクション
    • 独立したアトミック操作として一連のコマンドを実行できるトランザクションをサポートしています。
  • Pub/Sub
    • 高性能なチャットルーム、リアルタイムのコメントストリーム、ソーシャルメディアフィード、サーバー間通信に使用できるパターンマッチングを備えた Pub/Sub メッセージングをサポートしています。
  • Lua スクリプト
  • 地理空間のサポート
    • 大規模なリアルタイムの地理空間データを処理するための専用コマンドがあります。2 つの要素 (人や場所など) 間の距離を見つけたり、ある点から所定の距離内にあるすべての要素を見つけるなどの操作を実行できます。

Memcachedのみ

  • マルチスレッドであるため複数の処理コアを使用できる