1. ホーム
  2. mongodb

[解決済み] MongoDBとredis

2023-01-21 23:40:59

質問

RedisとMongoDBを併用することで、どのようなメリットがあるのか、ユースケースの例を教えていただけませんか?

どのように解決するのですか?

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は便利なセットデータ型とそれに関連する操作(union, intersection, difference on multiple sets, etc ...)を提供します。この機能の上に、基本的なファセット検索やタグ付けエンジンを実装するのは非常に簡単で、MongoDBのより伝統的なインデックス作成機能への興味深い追加となります。

  • Redisはリストに対する効率的なブロッキングポップ操作をサポートしています。これは、アドホックな分散キューイングシステムを実装するために使用することができます。バックエンドアプリケーションがタイムアウトを伴う複数のキューをリッスンしたり、アイテムを別のキューにアトミックに転送したりできるので、MongoDBのテーラブルカーソルよりも柔軟性がありますIMO ... もしアプリケーションがキューイングを必要とするならば、キューをRedisに保存し、永続的な機能データをMongoDBに保持することは理にかなっています。

  • Redisはpub/subメカニズムも提供します。分散アプリケーションでは、イベントプロパゲーションシステムが便利な場合があります。これはまたRedisの優れたユースケースであり、一方で永続的なデータはMongoDBに保持されます。

データモデルの設計はRedisよりもMongoDBのほうがはるかに簡単なので(Redisはより低レベル)、主な永続データにMongoDBの柔軟性を、そしてRedisが提供する追加機能(低遅延、アイテム期限切れ、キュー、パブ/サブ、原子ブロックなど)から利益を得られるのは興味深いことです。これは実に良い組み合わせです。

RedisとMongoDBのサーバーを同じマシンで実行することは絶対に避けてください。MongoDBのメモリはスワップアウトされるように設計されていますが、Redisはそうではありません。もしMongoDBが何らかのスワップ動作を引き起こした場合、Redisのパフォーマンスは壊滅的なものになるでしょう。これらは別のノードに分離する必要があります。