MongoDB は、開発者が最新のアプリケーションをより速く構築できるように設計されたドキュメントデータベースです。柔軟なJSONのようなドキュメントにデータを保存するため、アプリケーションコードで使用されるのと同様にデータを簡単にモデル化できます。柔軟なスキーマにより、ダウンタイムなしでデータモデルを展開し、迅速に反復処理し、非均一データを簡単に処理できます。
MongoDB は強力なクエリエンジン、水平スケーリング、組み込みの高可用性を提供しており、Rapid プロトタイプから大規模なプロジェクトクリティカルなワークロードまですべてをサポートできます。
MongoDB は、次のような幅広いワークロードタイプをサポートするフルトランザクションの運用データベースです。
コア アーキテクチャ
MongoDB は、関係データベースとは区別されるいくつかの主要アーキテクチャ コンポーネント上に構築されています。
ドキュメント データベース: 柔軟なドキュメントデータモデル、アプリケーションのニーズにデータをマッピングできます。
トランザクション: マルチドキュメントACIDトランザクションでは、データの一貫性を必要とする複雑な操作が可能になります。
水平スケーリング: シャーディングにより、水平スケーリングが可能になり、大規模なデータセットと 高スループットを処理できます。
ドキュメント データベース
MongoDB のレコードはドキュメントです。ドキュメントは、フィールドと値のペアで構成されるデータ構造です。MongoDB ドキュメントは JSON オブジェクトに似ています。フィールドの値には、他のドキュメント、配列、および複数のドキュメントの複数の配列が含まれる場合があります。
MongoDB の柔軟なオブジェクト指向データモデルにより、コードベースのオブジェクトモデルをミラーリングする方法でデータを構造化できます。これにより、関係データベースを使用するときに必要な複雑なオブジェクト関係マッピングが不要になります。
以下は、アプリケーションのオブジェクトモデルをミラーリングした形式で、ドキュメントが複雑な階層データを表現できることを示すMongoDBドキュメントの例です。
{ _id: ObjectId("507f1f77bcf86cd799439011"), name: "Alice", birthdate: ISODate("1990-01-01T00:00:00Z"), address: { street: "123 Main St", city: "Springfield", state: "IL" }, hobbies: ["reading", "hiking", "coding"] }
ドキュメントデータモデルの追加の利点も次のとおりです。
ドキュメントは、多くのプログラミング言語のネイティブ データ型に対応しています。
埋め込みドキュメントと配列により、パフォーマンスを低下させる可能性があるコストのかかる結合の必要性が減ります。
動的スキーマは多形データをサポートし、これにより、同じコレクション内のドキュメント間でさまざまな構造が可能になります。
MongoDB はドキュメントをコレクションに保存します。コレクションは 関係テーブル と似ていますが、固定の事前定義されたスキーマを強制するものではありません。
コレクションに加えて、 MongoDB は読み取り専用ビューをサポートしています。
トランザクション
MongoDB はマルチドキュメントトランザクション をサポートしており、複数の読み取り操作と書込み (write) 操作を単一の all-or-nothingイベントとして実行できます。
主なトランザクション機能には、次のものが含まれます。
ACID の保証: トランザクションは、複数の操作にわたってアトミック性、整合性、分離、 耐久性 を提供します。
マルチドキュメント操作: データの一貫性を維持しつつ、複数のドキュメントにまたがる複雑な操作を実行できます。
分散トランザクション: 同じACID保証を使用して、シャーディングされたクラスター間でのトランザクションを調整できます。
詳細については、「 トランザクション 」を参照してください。
高可用性
MongoDB に組み込まれているレプリケーションメカニズムは、 自動フェイルオーバー、データの冗長性、読み取りキャパシティーの増加を提供します。自動フェイルオーバー を使用すると、プライマリサーバーが使用できなくなった場合、クラスターは自動的に新しいプライマリを選択し、書込み (write) は引き続き利用可能になります。さらに、データの耐久性を向上させるために、データの複数のコピーが異なるサーバーに保存されます。
水平スケーリング
MongoDB はシャーディング と呼ばれる手法による水平スケーリングをネイティブにサポートしています。
主なシャーディング機能には、次のようなものがあります。
自動データ分散: MongoDB はシャードキーに基づいてデータを自動的に分割し、マシンのクラスター全体に分散します。
ゾーン シャーディング: 地理的ゾーンを定義し、シャードキー範囲に基づいてドキュメントの配置を制御できます。
シャードキーの調整:アプリケーションの進化に伴い、パフォーマンスを向上させるために、シャードキーを調整できます。