Redis と MongoDB はどのように異なりますか?

Remote Dictionary Server (Redis) と MongoDB は、非構造化形式でデータを保存する 2 つの NoSQL データベースです。NoSQL データベースは、テーブル、行、列を使用するリレーショナルデータベースとは異なる方法でデータを保存します。Redis は、データを key-value ペアとして格納するオープンソースのインメモリデータベースです。高いパフォーマンスを実現するためにデータを RAM に保存しますが、追加機能としてオンディスク永続ストレージも提供します。MongoDB は、ソースを入手できるドキュメントデータベースであり、シリアル化された JSON 形式でデータを保存します。データは外部メモリに保存されますが、エンタープライズエディションにはインメモリストレージエンジンが搭載されています。

Redis について読む »

MongoDB について読む »

データモデル: Redis とMongoDB

Redis と MongoDB は異なるデータモデルを使用し、アーキテクチャによってデータの格納方法が異なります。 

Redis

Redis は RAM にデータを保存するので、メモリから直接データにアクセスできます。これにより、低レイテンシーのレスポンスを提供しますが、保存できるデータ量も制限されます。Redis は、スナップショットと追加専用ファイル (AOF) ロギングによってデータセットをディスクに保存します。これにより、データの耐久性が確保されます。 

Redis はデータを key-value ペアとして格納し、各データエントリには固有のキーがあります。ソートされたセット、ハッシュ、セット、リスト、文字列などのさまざまなデータタイプをサポートしています。キーの長さは任意で、合計 512 MB までです。

以下の画像は、Redis データモデルを示しています。

 

MongoDB

MongoDB はドキュメントデータモデルに従い、主に外部メモリストレージにデータを保存します。データはシリアル化されたバイナリ JSON (BSON) ドキュメントとして格納されます。ドキュメントの最大サイズは 16 MB です。

MongoDB のアーキテクチャは、ディスク容量に応じて容量を増やすことができるため、大量のデータ量をスケールする場合に役立ちます。エンタープライズユーザーは、ハイブリッドなアプローチとして、インメモリストレージエンジンを使用することもできます。頻繁にアクセスするデータにはメモリキャッシュを使用しますが、永続性については引き続き、主にディスクストレージに頼ります。

以下の画像は、MongoDB データモデルを示しています。

Redis と MongoDB の類似点

Redis と MongoDB はどちらも NoSQL データベースであり、柔軟なスキーマ設計、水平スケーラビリティ、および高可用性を提供します。これらを使用すると、文書や画像などの非構造化データをより柔軟に保存できます。リレーショナルデータベースとは異なり、スキーマを使用しない動的データモデルを使用できます。

これら 2 つの非リレーショナルデータベースにはさまざまな類似点があります。

セカンダリインデックス

Redis と MongoDB はセカンダリインデックスを提供します。この機能を使用すると、プライマリキー以外のフィールドに追加のインデックスを作成できます。これらの追加インデックスを作成すると、さまざまな条件を検索しながら、より迅速にデータをクエリおよび取得できます。セカンダリインデックスは、両方の NoSQL データベースの柔軟性とクエリパフォーマンスを向上させます。

レプリケーション

高い可用性と耐久性を提供するために、MongoDB と Redis はレプリケーションを使用しています。NoSQL データベースが複数のノードにデータを複製して冗長性を実現するレプリカセット (またはクラスター) を作成します。どちらのデータベースにも、書き込み操作を受け入れるプライマリインスタンスと、プライマリインスタンスからデータを複製する 1 つ以上のセカンダリインスタンスがあります。プライマリインスタンスに障害が発生すると、セカンダリインスタンスが引き継ぐことができます。

 

パフォーマンス

Redis と MongoDB はどちらも低レイテンシーのレスポンスを提供し、高スループットのワークロードを処理できます。Redis はインメモリデータベースです。つまり、データをメモリに保存します。このストレージシステムにより、Redis は高速の読み取りおよび書き込み操作を実現できます。MongoDB は、メモリストレージとディスクベースのストレージを組み合わせたもので、速度とデータ耐久性を提供します。 

主な相違点: Redis とMongoDB

また、Redis と MongoDB には、それぞれの機能や性能に違いがあります。両者のその他の重要な違いは次のとおりです。

スケーリング 

水平スケーリングにより、MongoDB は大量のデータを効率的に処理できます。シャーディングを使用して、複数のリージョンとノードにデータを分散します。クロスシャーディング操作では、複数のシャードにわたってクエリと更新を行うことができます。

Redis は MongoDB ほどのスケーラビリティを提供していません。Redis は、プライマリオペレーションにデフォルトでシャードを 1 つだけ使用します。シャーディングはハッシュベースで手動で管理する必要があるため、管理が複雑になります。Redis にはクロスシャード機能もありません。 

可用性

MongoDB と Redis はどちらも、レプリケーションによる可用性をサポートしています。ただし、MongoDB はレプリカセットを使用することでより高い水準の可用性をサポートします。MongoDB では、データのコピーを最大 50 個作成して、複数のノード、データセンター、さらには地理的リージョンに分散させることができます。自動フェイルオーバーメカニズムをサポートしています。プライマリノードがオフラインになると、レプリカから新しいプライマリノードを選択します。 

これとは対照的に、Redis はデフォルトでは自動フェイルオーバーを提供しません。特にレプリカが別のデータセンターにある場合は、管理者ユーザーが手動フェイルオーバーを開始します。自動フェイルオーバーが必要な場合は、Redis Sentinel という別のコンポーネントをセットアップして構成する必要があります。 

完全性

MongoDB は、マルチドキュメントの、原子性、一貫性、独立性、耐久性のある (ACID) トランザクションをサポートしています。そのため、複数の操作でデータの一貫性を保つことができます。マルチドキュメントトランザクションを使用すると、複数の操作を 1 つの単位として実行できます。MongoDB は、セッション内ですべての変更をコミットまたはロールバックします。これにより、ACID への準拠が確保されます。

逆に、Redis には ACID サポートが組み込まれていません。ただし、MULTI コマンドを使用すると、複数のコマンドを 1 つのアトミック操作にグループ化できます。しかし、これだけでは解決策にはなりません。また、Redis はトランザクション内でロールバック機能をネイティブにサポートしていないため、アプリケーションコード内にロールバック機能を実装する必要があります。 

クエリー言語

MongoDB は、複雑な空間計算やデータ分析機能を実行する場合でも、高い柔軟性でクエリを実行できます。MongoDB は JSON に似た構文をサポートする MongoDB クエリー言語 (MQL) を使用しており、高度なクエリを簡略化します。MQL を使用すると、単一または複数のキー、テキスト検索、および範囲にわたって高度なクエリを実行できます。 

これとは対照的に、Redis は複雑なクエリや検索機能ではなく、key-value の高速アクセス操作に最適化されています。Redis は主にキーを提供し、対応するデータを取得することで使用します。Redis には MQL のようなクエリー言語はありません。代わりに、データを操作するためのさまざまなコマンドが用意されています。例えば、GET コマンドを使用して、対応するキーを指定することで値を取得できます。 

使用する場面: Redis とMongoDB

迅速なクエリが可能な一時的なデータストレージには、Redis を使用してください。豊富なクエリ機能を備えた複雑なデータの長期的、永続的なストレージには、MongoDB を使用してください。 

Redis では、よく利用するデータへの高速アクセスが可能なため、キャッシュ/セッションストレージに適しています。パブリッシュ/サブスクライブ (pub/sub) メッセージング方式のサポートが組み込まれているため、リアルタイムアプリケーションやイベント駆動型アーキテクチャで使用できます。また、ソートされたセットやリストなどの高度なデータ構造も用意されており、レート制限、タスクキュー、ジョブスケジューリングシステムの実装に使用できます。また、データのカウントや集計にも効率的であるため、リーダーボードデータやその他の統計情報の追跡にも適しています。

これとは対照的に、MongoDB を使用すると、複雑なアプリケーションデータを大規模に保存できます。スキーマを使用しない従来のデータベース構造とストレージを提供するため、デベロッパーはより柔軟なアプローチを取ることができます。大量の書き込みと読み取りを効率的に処理し、大規模なデータセットを処理できます。コンテンツ管理や大規模なユーザープロファイルの管理に使用できます。  MongoDB には地理空間インデックスも組み込まれており、空間クエリをサポートしているため、ロケーションベースのアプリケーションや地理空間コンポーネントを含むデータに適しています。

Redis と MongoDB を一緒に使用することはできますか?

Redis と MongoDB を一緒に使用することは、多くのアプリケーションで一般的な戦略です。Redis のスピードはもちろん、MongoDB の長期ストレージ機能を補完します。Redis と MongoDB の両方を使用して、データベースのパフォーマンスを最適化し、スケーラビリティを高め、アプリケーションに柔軟なシステムを提供できます。

例えば、Redis を使用してリアルタイムのデータ処理を行うことができます。Redis はリアルタイムのデータ処理シナリオを処理するため、ライブストリーミングデータのキャプチャと処理に最適です。その後、Redis で処理したデータや結果を MongoDB に保存して、アーカイブやより複雑な統合分析を行うことができます。

もう 1 つの例は、Redis と MongoDB にまたがるハイブリッドデータモデルです。Redin の key-value ストアと MongoDB のドキュメント指向モデルを同時に使用できます。Redis は、頻繁にアクセスするメタデータにアクセスするためのシンプルなシステムを提供しますが、より複雑なデータ構造には MongoDB を使用できます。 

相違点の要約: Redis とMongoDB

 

Redis

MongoDB

データモデル

メモリデータストアに基づく key-value。

永続的なドキュメントデータベース。

スケーリング

Redis はスケーラビリティがそれほど高くありません。

MongoDB データベースは、データの水平スケーリング、シャーディング、パーティショニングにより、高いスケーラビリティを有します。

可用性

クラスターの自動フェイルオーバーをモニタリングするには、Redis Sentinel という別のコンポーネントが必要です。

デフォルトでは自動フェイルオーバー。

完全性

Redis には、単一のアトミック操作を作成するコマンドが用意されています。ロールバックはアプリケーションコードで管理する必要があります。

MongoDB には、マルチドキュメントの ACID トランザクションとロールバックのサポートが組み込まれています。

クエリー言語

Redis はクエリにコマンドを使用します。

MongoDB は MongoDB クエリー言語 (MQL) を使用してデータのクエリと操作を行います。

AWS はお客様の Redis と MongoDB の要件でどのように役立ちますか?

Amazon Web Services (AWS) には、Redis と MongoDB での作業をサポートするさまざまなサービスがあります。

Amazon MemoryDB for Redis は、Redis と互換性があり、耐久性のあるインメモリデータベースサービスで、超高速なパフォーマンスを実現します。これは、マイクロサービスアーキテクチャで作成されたモダンアプリケーション用に構築されています。MemoryDB は、マルチ AZ トランザクションログを使用して、複数のアベイラビリティーゾーン (AZ) にわたってデータを永続的に保存し、高速なフェイルオーバー、データベースリカバリ、およびノードの再起動を可能にします。高いスループットと共に、マイクロ秒の読み取りレイテンシーと 1 桁ミリ秒の書き込みレイテンシーを実現できます。 

Amazon ElastiCache for Redis は、フルマネージドキャッシュサービスであり、クラウド上でのキャッシュの設定、運用、スケールを容易にします。ElastiCache for Redis を使えば、プライマリデータベースやデータストアからのデータをキャッシングすることで、アプリケーションのスピードを加速し、マイクロ秒単位の読み取り/書き込みレイテンシーを解除することができます。

Amazon DocumentDB (MongoDB 互換) はフルマネージド型のネイティブ JSON ドキュメントデータベースで、エンタープライズワークロードを簡単にスケールできます。柔軟な JSON 形式でデータを保存、クエリ、インデックス作成、集計する機能により、アプリケーションの開発と展開をかつてないほど迅速に行うことができます。マネージドデータベースを使用すると、手動でデータベース管理タスクを実行する必要がなくなるため、生産性が向上し、開発が効率化されます。

今すぐアカウントを作成して、AWS で Redis と MongoDB の使用を開始しましょう。

AWS での次のステップ

Redis で構築を開始する

AWS で Redis の使用を開始する方法の詳細

詳細 
MongoDB で構築を開始する

AWS で MongoDB の使用を開始する方法の詳細

詳細