1. 概要

多くの場合、アプリケーションのプライマリデータストアとして非リレーショナルデータベースを決定するのは難しいと感じています。

この記事では、2つの一般的な非リレーショナルデータベースRedisMongoDBについて説明します。

まず、RedisとMongoDBが提供する機能について簡単に説明します。 次に、RedisまたはMongoDBを相互に比較して、いつ使用するかについて説明します。

2. Redis

Redis は、豊富な機能セットを提供するメモリ内データ構造ストアです。 キャッシュ、メッセージブローカー、キューとして便利です。

2.1. 特徴

2.2. インストール

最新のRedisサーバーを公式ウェブサイトからダウンロードしてインストールできます。

$ wget http://download.redis.io/releases/redis-6.0.9.tar.gz
$ tar xzf redis-6.0.9.tar.gz
$ cd redis-6.0.9
$ make

3. MongoDB

MongoDB は、JSONのようなドキュメント構造で情報を格納するNoSQLドキュメントデータベースです。 これは、スキーマレスデータストアとして、設計および実装フェーズで急速に変化するアプリケーション、プロトタイピング、およびスタートアップに役立ちます。

3.1. 特徴

  • インタラクティブなコマンドラインインターフェイスMongoDBShell(mongosh)を提供して、管理操作を実行し、データをクエリ/更新します
  • 結合をサポートするJSONベースのクエリ構造
  • 地理ベースの検索、グラフ検索、テキスト検索などのさまざまなタイプの検索をサポートします
  • マルチドキュメントACIDトランザクションをサポート
  • SpringDataのサポート
  • コミュニティ、エンタープライズ、およびクラウド( MongoDB Atlas )エディションで利用可能
  • C ++、 Java 、Go、Python、Rust、Scalaなどの主要テクノロジー用のさまざまなドライバー
  • MongoDBCompassを介してデータを探索および操作するためのGUIを提供します
  • MongoDBチャートを使用してデータを視覚的に表現します
  • MongoDB BIコネクタは、BIおよび分析プラットフォームへの接続を提供します

3.2. インストール

最新のMongoDBサーバーをダウンロードできます。または、macOSを使用している場合は、Homebrewを使用してコミュニティエディションを直接インストールできます。

brew tap mongodb/brew
brew install [email protected]

4. いつRedisを使用しますか?

4.1. キャッシング

Redisは、頻繁に要求されるアイテムにサブミリ秒の応答時間を提供することにより、クラス最高のキャッシュパフォーマンスを提供します

さらに、 EXPIRE EXPIREAT PEXPIREなどのコマンドを使用してキーの有効期限を設定できます。

同時に、 PERSIST コマンドを使用してタイムアウトを削除し、キーと値のペアを永続化できるため、キャッシュに最適です。

4.2. 柔軟なデータストレージ

Redisは、文字列、リスト、セット、ハッシュなどのさまざまなデータ構造を提供して、データの保存方法と整理方法を決定します。 したがって、Redisは、データベース構造の実装に対して完全な自由を与えてくれます。

ただし、DBの設計を検討するのにも長い時間がかかる場合があります。 同様に、Redisを使用してスキーマの内部構造を構築および維持することは困難な場合があります。

4.3. 複雑なデータストレージ

同様に、リスト、セット、ハッシュを組み合わせることで、キュー、配列、並べ替えられたセット、グラフなどの複雑なデータ構造をストレージに実装できます。

4.4. チャット、キュー、およびメッセージブローカー

Redisは、パターンマッチングを使用してpub/subメッセージキューを使用してメッセージを公開およびサブスクライブできます。 したがって、Redisはリアルタイムチャットとソーシャルメディアフィードアプリケーションをサポートできます。

同様に、リストデータ構造を使用して軽量キューを実装できます。 さらに、Redisのリストはアトミック操作をサポートし、ブロッキング機能を提供するため、メッセージブローカーの実装に適しています。

4.5. セッションストア

Redisは、永続性機能を備えたメモリ内データストアを提供するため、Web/モバイルアプリケーションのセッションを保存および管理するのに適しています。

4.6. IoTと組み込みシステム

Redisの公式ドキュメントによると、 4および5以降の新しいバージョンは、ARMプロセッサとRaspberryPiをサポートしています。

また、Andriodで動作し、公式にサポートされているプラットフォームとしてAndroidを含めるための取り組みが行われています。

そのため、RedisはIoTや組み込みシステムに最適であり、 その小さなメモリフットプリントと低いCPU要件。

4.7. リアルタイム処理

非常に高速なメモリ内データ構造であるため、リアルタイム処理アプリケーションに使用できます。

たとえば、Redisは、株価アラート、リーダーボード、リアルタイム分析などの機能を提供するアプリケーションを効率的に提供できます。

4.8. 地理空間アプリ

Redisは、地理空間インデックスを管理するために、ソートされたセットに基づいて構築された専用のメモリ内データ構造GeoSetを提供します。 また、 GEOADD GEOPOS GEORADIUS などの特定の地理コマンドを提供して、地理空間データを追加、読み取り、分析します。

したがって、Redis を使用して、ドライブ時間やドライブ距離などのロケーションベースの機能を備えたリアルタイムの地理空間アプリケーションを構築できます。

5. いつMongoDBを使用しますか?

5.1. 動的クエリ

MongoDBは、強力なクエリツールのセットを提供します。 また、地理ベースの検索、グラフ検索、テキスト検索など、さまざまな柔軟なクエリスキームを提供して、効率的なデータ検索を実現します。

同時に、JSON構造化クエリのサポートにより、MongoDBは、データ検索と分析が日常業務であるシナリオに適しているように見えます。

5.2. 急速に変化するスキーマ

MongoDBは、スキーマをすばやく変更する必要がある設計段階と初期の実装段階で役立ちます。 同時に、基になるデータを想定せず、スキーマを必要とせずに最適化します。

5.3. プロトタイピングとハッカソン

JSONのようなドキュメント構造に従うことで、 MongoDBは、ラピッドプロトタイピング、フロントエンドチャネルとの迅速な統合、およびハッカソンを可能にします。

同時に、RDBMSの複雑さに対処したくないジュニアチームにも役立ちます。

5.4. カタログ

MongoDBは、自己記述型の動的スキーマを提供することで、eコマース、資産管理、在庫などのカタログに製品、機能、推奨事項を簡単に追加できるようにします。

また、JSON構造化ドキュメントのフィールドまたはフィールドのセットにインデックスを付けることで、高度な検索や分析などの機能にMongoDBで表現力豊かなクエリを使用できます。

5.5. モバイルアプリ

MongoDBのJSONドキュメント構造により、地理空間インデックスとともにさまざまなデバイスからのさまざまなタイプのデータを保存できます。

さらに、ネイティブシャーディングによる水平方向のスケーラビリティにより、モバイルアプリのスケーリングが容易になります。 したがって、MongoDBは、大量のユーザーにサービスを提供し、ペタバイトのデータを処理し、1秒あたり数十万の操作をサポートできるため、モバイルアプリを支援するための価値のある選択肢になります。

5.6. コンテンツが豊富なアプリ

最新のコンテンツが豊富なアプリのRDBMSにさまざまなコンテンツを組み込むことは簡単ではありません。 一方、 MongoDBでは、テキスト、オーディオ、ビデオなどのリッチコンテンツを保存および提供できます

また、 MongoDB GridFS を使用すると、16MBを超えるファイルを効率的に簡単に保存できます。 ファイル全体をメモリにロードせずに、大きなファイルの一部にアクセスできます。

さらに、すべてのサーバー間でファイルとメタデータを自動的に同期します。 その結果、MongoDBは、コンテンツが豊富なアプリをサポートするためのより適切な選択肢のように見えます。

5.7. ゲームアプリ

モバイルアプリやコンテンツが豊富なアプリと同様に、ゲームにも大規模なスケーリングと動的なデータ構造が必要です。 したがって、MongoDBはゲームアプリにとって有望な選択肢となります。

5.8. グローバルクラウドデータベースサービス

MongoDB Atlasは、AWS、Google Cloud、Azureなどの複数のクラウドサービスで利用できます。 さらに、レプリケーションとフェイルオーバーのメカニズムが組み込まれているため、可用性の高い分散システムを提供します。 したがって、データベースを迅速に展開および管理し、グローバルクラウドデータベースサービスとして使用できます。

6. 結論

この記事では、非リレーショナルデータベースの選択肢としてRedisとMongoDBについて説明しました。

まず、両方のデータベースが提供する機能を確認しました。 次に、一方が他方よりも優れているシナリオを検討しました。

Redisは、キャッシング、メッセージブローカー、およびキューのより優れたソリューションとして有望であると確信できます。 同時に、リアルタイム処理、地理空間アプリ、および組み込みシステムで価値があることが証明できます。

一方、 MongoDBは、JSONのようなオブジェクトを格納するための確かな選択肢です。その結果、MongoDBは、プロトタイプ作成、現代のコンテンツリッチ、モバイル、およびゲームアプリケーション。