Redis と MongoDB を相互に組み合わせて使用することでメリットが得られるユースケースの例を誰か教えてください。
3 に答える
Redis と MongoDB を併用すると、良い結果が得られます。MongoDB と Redis (および MySQL と Sphinx) を実行することで有名な会社は Craiglist です。Jeremy Zawodny によるこのプレゼンテーションを参照してください。
MongoDB は、さまざまな方法でインデックス付けされた、永続的でドキュメント指向のデータにとって興味深いものです。Redis は、揮発性データ、またはレイテンシーの影響を受けやすい半永続データに対してより興味深いものです。
MongoDB 上での Redis の具体的な使用例をいくつか示します。
2.2 より前の MongoDB には、有効期限のメカニズムがまだありません。キャップ付きコレクションは、実際の TTL の実装には使用できません。Redis には TTL ベースの有効期限メカニズムがあり、揮発性データの保存に便利です。たとえば、ユーザー セッションは一般的に Redis に保存されますが、ユーザー データは MongoDB に保存され、インデックスが作成されます。MongoDB 2.2 では、コレクション レベルで低精度の有効期限メカニズムが導入されていることに注意してください (たとえば、データのパージに使用されます)。
Redis は、便利なセット データ型とそれに関連する操作 (結合、交差、複数セットの差分など) を提供します。この機能の上に、基本的なファセット検索またはタグ付けエンジンを実装するのは非常に簡単です。これは、MongoDB の従来のインデックス作成機能に興味深い追加機能です。
Redis は、リストに対する効率的なブロッキング ポップ操作をサポートしています。これは、アドホック分散キューイング システムの実装に使用できます。バックエンドアプリケーションはタイムアウトで複数のキューをリッスンしたり、アイテムを別のキューにアトミックに転送したりできるため、MongoDB のテーラブルカーソル IMO よりも柔軟性があります。 、永続的な機能データを MongoDB に保持します。
Redis は、pub/sub メカニズムも提供します。分散アプリケーションでは、イベント伝播システムが役立つ場合があります。これも Redis の優れた使用例ですが、永続データは MongoDB に保持されます。
Redis を使用するよりも MongoDB を使用してデータ モデルを設計する方がはるかに簡単であるため (Redis はより低レベルです)、メインの永続データに対する MongoDB の柔軟性と、Redis が提供する追加機能 (低レイテンシー) から利益を得るのは興味深いことです。 、アイテムの有効期限、キュー、pub/sub、アトミック ブロックなど...)。それは確かに良い組み合わせです。
Redis と MongoDB サーバーを同じマシンで実行しないでください。MongoDB メモリはスワップ アウトするように設計されていますが、Redis はそうではありません。MongoDB が何らかのスワッピング アクティビティをトリガーすると、Redis のパフォーマンスは壊滅的なものになります。それらは異なるノードに分離する必要があります。
明らかに、これよりもはるかに多くの違いがありますが、非常に高い概要については次のとおりです。
ユースケースの場合:
- Redis は、キャッシュ レイヤーまたは分散計算用の共有ホワイトボードとしてよく使用されます。
- MongoDB は、多くの場合、従来の SQL データベースのスワップアウト代替として使用されます。
技術的に:
- Redis は、ディスクの永続性を備えたインメモリ データベースです (データベース全体が RAM に収まる必要があります)。
- MongoDB は、インデックス用に十分な RAM のみを必要とするディスク バックアップ データベースです。
重複する部分もありますが、両方を使用することは非常に一般的です。理由は次のとおりです。
- MongoDB は、より多くのデータを安価に格納できます。
- データセット全体では Redis の方が高速です。
- MongoDB の文化は「すべてを保存し、後でアクセス パターンを把握する」です。
- Redis の文化は、「データへのアクセス方法を慎重に検討してから保存する」ことです。
- どちらにも、それらに依存するオープン ソース ツールがあり、その多くは一緒に使用されます。
Redis は従来のデータストアの代わりとして使用できますが、Mongo、Postgresql、MySQL などの別の通常の「長い」データ ストアで最もよく使用されます。