Jeffrey Erickson氏|シニア・ライター| 2024年10月30日
MongoDBは、2007年に、アド・サービス・ビジネスにおける多数の小規模トランザクション(その名前)を追跡したいという開発者が作成しました。最初は10genと呼ばれていた新しいデータベースは、JSONタイプのファイルの単純なドキュメント「バケット」にデータを保持し、非常に迅速にスケール・アップできました。データ・モデルや正確なトランザクションの同時実行性は、単に広告インプレッションを数えるだけであり、その価値は低かったため、あまり必要ありませんでした。
ただし、MongoDBは、開発者が飢えていたようなデータベースのシンプルさを提供しました。2009年にオープンソース開発モデルで発売され、2018年にSSPL(Server Side Public License)に移行され、多くのオープンソース開発スタックで事実上の標準データストアになるように進化し、Expedia、Lyft、eBayなどを含む顧客リストを備えています。それがどういうものか見てみましょう。
MongoDBは、一般的なオープン・ソース・ドキュメント・データベースで、最新のWebおよびモバイル・アプリケーションで広く使用されています。NoSQLデータベースとして分類されます。つまり、従来の表ベースのリレーショナル・メソッドではなく、柔軟なドキュメント指向のアプローチでデータを格納します。MongoDBの魅力の大部分は、そのシンプルさと「開発者目線の設計」にあります。たとえば、Mongo相互作用は、作成、読取り、更新、削除の頭字語CRUDによって定義されます。
MongoDBは、JSONドキュメントにデータを保存し、様々な種類のアプリケーションに対して、構造化データ、非構造化データ、半構造化データなど、格納されたデータを比較的簡単に使用できます。MongoDBの柔軟なデータ・モデルにより、開発者は非構造化データを格納しながら、データ保護と可用性を実現するためのファイル・アクセスとレプリケーションの高速化をサポートできます。つまり、開発者はMongoDBを使用して高度なアプリケーションを設計および構築できます。
MongoDBは、何千もの広告サービス・サイトにわたってインプレッションを追跡するために開発されましたが、オープン・ソースのWeb開発における柔軟なデータ・ストアとしてすぐに広く普及しました。2007年の発売以来、継続的に進化し、アドホック・クエリ、インデックス作成、リアルタイム集計を含む堅牢な機能セットを蓄積しています。開発者にとってMongoDBの主な利点は、最も一般的なリレーショナル・データベースと比較して、直感的に使用でき、すぐに開始できることです。MongoDBに格納されているJSONドキュメントの型は、一般的なプログラミング言語(JavaScriptやPython辞書など)で見つかった使い慣れたデータ型にマップされます。Mongoは、PHP、.Net、Java、Python、Node.jsなど、ほとんどのプログラミング言語のドライバ・サポートを備えたクライアント・ライブラリの徹底的なメニューも提供しています。
とはいえ、すべての技術と同様に、MongoDB にも得意分野と不得意分野があります。オンライン広告を追跡するように設計されており、高速同時アクセスが必要でしたが、トランザクション精度が低下し、リアルタイム分析がほとんど行われませんでした。現在でも、MongoDBは、可用性、スケーラビリティおよび最終的な一貫性を表すBASEの原則に基づいて形成されています。そのため、MongoDBは通常、高可用性およびスケーラビリティが主な設計上の考慮事項であるシナリオで使用されます。対照的に、財務業務やミッションクリティカルなエンタープライズ環境などのジョブでは、開発者は通常、リレーショナル・データベースを選択します。これにより、データベース操作の信頼性と一貫性を確保するために、ACIDトランザクション(原子性、一貫性、分離および耐久性)が提供されます。しかし、最近では、テクノロジー業界は、JSONの開発のシンプルさとSQLのメリットを通じて、開発者に両者の長所を提供できるソリューションを提供しています。
データはアプリケーションからMongoDBデータベースにどのように送られますか。
MongoDBには、小規模、中規模、さらには大規模なエンタープライズ・プロジェクトに取り組む開発者のニーズに合せて、様々な構成およびサービス・レベルが用意されています。
主なポイント
MongoDBは、ドキュメント指向のデータ・モデルを使用するNoSQLデータベースです。各レコードは、MySQLなど、一般的なリレーショナル・データベースに共通する行や列ではなく、コレクションに格納されているドキュメントです。
MongoDBは、BSONまたはバイナリJSONという形式を使用してJSONドキュメントを格納します。これらのドキュメントの非リレーショナル特性は、構造化アプリケーション・データだけでなく、半構造化データおよび非構造化データを格納し、データベースで処理できることを意味します。リレーショナル・データベースとは異なり、MongoDBは厳密なスキーマを使用しません。かわりに、ドキュメントには柔軟性があり、配列およびネストされたドキュメントを含めることができ、複雑で階層的なデータ・ストレージが可能になります。
非常に大規模なデータ・セットを処理する場合、MongoDBなどのデータベースをドキュメント化するには、シャーディングと呼ばれる手法を使用して、複数のノードまたはクラスタ間でデータをスケール・アウトまたは分散します。このモデルにより、高速なストレージとリコールが可能になります。このアーキテクチャは、MongoDBが広告配信用に作成されたもので、何百万もの広告をいつでも何千ものWebサイトで呼び出す必要がある可能性があることを前提としています。1つの広告を別の広告に対して分析する必要はなかったため、データを物理的に分散して分離することができました。
階層ドキュメント・データベースは読取り操作では非常に高速ですが、システムはすべてのネストされたエンティティのデータを分析する必要があるため、データ分析が遅くなる可能性があります。対照的に、リレーショナル・データベースはデータを個別の表に格納し、データベース内の多くの表で単一のオブジェクトを参照できるため、大規模な分析操作をより効率的に実行できます。これらの異なる強みを考慮して、開発チームは通常、アプリケーションの現在のニーズに最適なデータ管理システムを選択します。または、リレーショナル・ドキュメント・データとJSONドキュメント・データの両方およびその他の多くのデータ型への完全なSQLアクセスを提供するマルチモーダル・データベースを選択することもできます。
ACIDとベース
選択する内容は、アプリケーションのニーズによって異なります。
| ACID(原子性、一貫性、分離、耐久性) | BASE(基本的に使用可能、ソフト状態、最終的には一貫性がある) |
|---|---|
|
原子性:トランザクション全体が1つの単位として扱われるようにします。すべての変更が成功するか、いずれの変更も成功しません。これにより、データが一貫性のない状態のままになる可能性のある部分的な更新が防止されます。 一貫性:トランザクション後に、データベースがある有効な状態から別の有効な状態に遷移することを保証します。ビジネス・ルールとデータの整合性を強制します。 分離:同時トランザクションが相互に干渉しないことを確認します。複数のトランザクションが同時に発生する場合でも、各トランザクションは単独で実行されます。 耐久性:トランザクションがコミットされると、変更は永続ストレージに書き込まれ、クラッシュなどのシステム障害の影響を受けません。 |
基本的に利用可能:データの可用性を最大化することに重点を置いています。システムは、部分的な障害でも動作し続けるように努め、ほとんどの読取りおよび書込み操作を続行できます。 ソフト状態:データの一貫性は、書込み操作の直後に保証されません。変更がすべてのレプリカに反映される前にわずかな遅延が発生し、一時的な不整合が発生する可能性があります。 最終的に一貫性:時間の経過とともに、レプリカ間で変更を同期するバックグラウンド・プロセスによって一貫性が実現されます。 |
|
長所: 高いデータの整合性と強力な一貫性により、ACIDは財務取引などの正確性を要求するアプリケーションに最適です。 |
長所: 高可用性と拡張性により、BASEは、特に分散システムにおいて、高い稼働時間と応答性を必要とするアプリケーションに最適です。一貫性要件が緩和されると、書込み速度が速くなり、スケーラビリティが向上します。 |
|
短所: パフォーマンス・オーバーヘッドは、ACIDの保証を維持すると、書込み速度が低下する可能性があることを意味します。スケーラビリティの高い環境では、厳密な一貫性要件の管理が困難になる可能性があります。 |
短所: データ同期中に一時的な不整合が発生する可能性があるため、厳密なデータ整合性と即時の一貫性が重要なアプリケーションにはBASEが適していません。 |
MongoDBは、リレーショナル・データベースの表に類似したコレクションにデータを格納します。各コレクションには、構造によって異なる複数のドキュメントが保持されます。ドキュメントは自己記述的であるため、ドキュメント構造をシステムに宣言する必要はありません。つまり、各ドキュメントにはドキュメント内の各フィールドを記述するメタデータが含まれます。
パフォーマンスを向上させるために、MongoDBはドキュメント内の任意のフィールドに対する索引付けをサポートします。索引は、問合せの効率的な実行をサポートし、プライマリ索引とセカンダリ索引を含めることができます。MongoDBのクエリ言語は、CRUD (作成、読取り、更新、削除)操作をサポートし、複雑な集計、テキスト検索および地理空間クエリを可能にします。応答時間を短縮するために、MongoDBには、開発者がサーバー側で複雑なデータ処理を設定できる集計フレームワークが用意されています。つまり、SparkやHadoopのように、データが存在するクラスタで分析を実行でき、データを別のプラットフォームに移動する必要がありません。これにより、クライアントとの間で転送されるデータの量を削減できます。
MongoDBは、レプリカ・データ・セットをサポートすることで、高可用性を提供し、パフォーマンスを向上させるために機能します。レプリカは、すべてのインスタンスに読取りおよび書込み操作を分散することで、ロード・バランシングに使用できます。また、これらのレプリカ・セットにより、冗長性が確保され、異なるデータベース・サーバー上の複数のデータ・コピーを介してデータ可用性が向上します。ハードウェア障害またはメンテナンスの場合、レプリカ・セットを使用すると、MongoDBで自動フェイルオーバーおよびデータ冗長性を実現できます。
スケーラビリティのために、MongoDBはシャーディングによる水平スケーリングをサポートしています。これは、複数のマシン上の複数のデータベースにデータを分散する方法です。シャード・クラスタは、多数のレプリカ・セットで構成できます。シャーディングは、シャード・キーを定義して構成され、シャード間でデータを分散する方法を決定します。この手法は、データ・セットを分割して複数のサーバーにロードすることで、大規模なデータ・セットおよび高スループット操作を管理するのに役立ちます。
シャーディングの仕組み
各シャードは、シャード・データベースのデータのサブセットをホストする独立したデータベース・インスタンスです。
各タイプのデータベース(MySQL、Postgres、Oracle Databaseなど)またはドキュメント指向(CouchDB、DynamoDB、MongoDBなど)には長所と短所があり、それらの間の選択は、通常、開発中のアプリケーションの特定の要件と制約によって異なります。
リレーショナル・データベース管理システム(RDBMS)は構造化問合せ言語(SQL)を使用しますが、MongoDBのドキュメントに重点を置いた形式はドキュメント・ストアAPIを使用します。それでも、MongoDB問合せ言語(MQL)は、ドキュメントの作成、読取り、更新、削除などの操作でJavaScriptに似た言語を使用します。
MongoDBには表および行の概念がなく、スキーマがないため、データベースを使用する前に定義する構造が少なくなります。ただし、中央スキーマがない場合、コレクションにアクセスする各アプリケーションは、ドキュメントを理解する必要があります。したがって、スキーマはアプリケーション・コード内にあり、データベースで定義されていません。あるアプリがスキーマを変更すると、他のアプリが壊れる可能性があります。スキーマが基本的にRDBMSおよびデータ編成のブループリントであり、相互関係が明示的に定義されるリレーショナル・データベースと比較して、MongoDBにはデータ間の関係という固有の概念がありません。
MongoDBではキー値ストア、グラフ、ドキュメントなどのデータに異なる形式が使用され、データ構造は時間の経過とともに変化する可能性があるため、データ・ストアの柔軟性は注目に値します。これは、データの整合性を確保するために、厳密な定義、階層および検証プロシージャを使用するRDBMSとは異なります。
基本的なMongoDBインスタンスの設定は簡単ですが、シャーディングおよびレプリカを含む大規模な分散MongoDBクラスタの構成および保守は複雑になる可能性があり、そのアーキテクチャおよび構成オプションについて十分に理解する必要があります。
| リレーショナル | MongoDB | |
|---|---|---|
| データ・モデル | 固定行および固定列を含む表を使用し、データは事前定義されたスキーマで構造化されます。 | 動的スキーマを持つJSONのような構造であるドキュメントのコレクションを使用します。 |
| スキーマの柔軟性 | データを追加する前に設定する必要がある事前定義済スキーマが必要です。 | 動的スキーマがあります。コレクション内の他のすべてのドキュメントに影響を与えずに、新しいフィールドをドキュメントに追加できます。 |
| クエリ言語 | 複雑なクエリに対して非常に強力なSQLを使用して、データを定義および操作します。 | SQLよりも直感的ですが、完全性が低く、汎用性が高いドキュメントベースの問合せ言語を使用します。 |
| スケーリング | 従来は垂直方向にスケーリングするため、既存のマシンにさらに電力を供給していましたが、シャーディングやOracle Real Application Clustersなどの成熟した機能は水平方向のスケーリングをサポートしています。 | シャーディングを使用して複数のマシン間で水平方向にスケーリングするように設計されており、これにより、マシン・クラスタ全体にデータが分散されます。 |
| トランザクション | 複数行トランザクションをサポートし、ACIDに準拠しているため、データの損失や破損が発生しないアプリケーションに適しています。 | マルチドキュメント・トランザクションをサポートしますが、ほとんどの従来のリレーショナル・データベース(特に分散データ)よりも堅牢性が低いことが知られています。 |
| パフォーマンス | トランザクションの正確性を確保するために構築されていますが、大量のデータに対してはパフォーマンスが低下する可能性があります。ただし、分析パフォーマンスは一般的に優れています。 | 大量のデータにわたる高い読取りパフォーマンスのために構築されています。 |
MongoDBは、ブログやノート作成アプリなどの単純なCRUDアプリケーションから、Amazon Primeなどの複雑なプラットフォームまで、幅広い用途に適しています。MongoDBは、コンテンツ管理システム(CMSes)や、データ同期が高速である必要があるゲーム・アプリケーション、バイオメトリック・ヘルスケア・データなど、多くのユースケースで選択されることがよくあります。その汎用性により、MEANやMERNなどの一般的なオープン・ソース開発スタックの基礎となっています。
必要なときに選択:
MongoDBは、直感的なAPI、柔軟なデータ・モデル、次のような機能により、開発者に人気を博しています。
オープンソースコミュニティとのMongoDBの人気は、アプリケーション開発とメンテナンスをより直感的かつスケーラブルにする多くの方法に起因しています。次の利点があります。
MongoDBには多くの利点がありますが、特に大容量のデータ・ボリュームの中で柔軟性と高パフォーマンスを必要とするアプリケーションには、多くの潜在的な欠点があります。
MongoDBは、そのエコシステム内で適切に機能するNoSQLデータベースですが、様々なデータ統合ツールおよびコネクタを介して他のタイプのデータベース管理システムと対話するように構築されています。このツールセットには、MongoDBからデータを抽出および移行するためのETL (抽出、変換、ロード)インフラストラクチャが含まれており、その逆も同様です。これは、レポートや複雑なデータ分析のためにリレーショナル・データベースにデータを送信する場合に便利です。MongoDBアプリケーションは、REST APIを使用して異なるデータベース・プラットフォーム間で通信することもできます。
MongoDB互換性のよい例として、開発者がOracle Autonomous JSON Databaseに接続されたMongoDBのオープン・ソース・ツールおよびドライバを使用できるOracle Database API for MongoDBがあります。これにより、オラクルのマルチモデル機能にアクセスでき、分析、機械学習(ML)および空間分析のためにデータを別のデータベースに移動することを回避できます。Autonomous JSON Databaseは、MongoDB Atlasのマルチモーダルの代替手段と考えてください。多くの場合、既存のアプリケーションに変更はほとんどまたはまったく必要ありません。
開発者は、APIを介してMongoDB機能にアクセスするかわりに、Oracle Cloud Infrastructure (OCI)上のOracle Autonomous JSON DatabaseにJSON中心のワークロードを移行できます。これにより、NoSQLスタイルのドキュメントAPI (Simple Oracle Document AccessまたはSODA、およびOracle Database API for MongoDB)、サーバーレス・スケーリング、高パフォーマンスのACIDトランザクション、包括的なセキュリティ、および低従量課金制の価格機能を備えたJSON中心のアプリケーション用のクラウド・ドキュメント・データベース・サービスが提供されます。MongoDBからOracle Autonomous JSON Databaseへの移行はOracle Cloud Infrastructure (OCI) GoldenGateで実現されるため、ダウンタイムはありません。
MongoDBユーザーは、JSON中心のアプリケーションをより汎用的に構築できるようになりました。Oracle Autonomous Databaseは、開発者が単一のデータベース内でSQL、JSONドキュメント、グラフ、地理空間、テキスト、ベクトルを使用して新しい機能を迅速に構築できるようにすることで、すべてのニーズを満たすことができる単一のデータ・プラットフォームを使用して、ビジネス需要に柔軟に対応できるようにします。
また、Oracle Databaseの革新的な新機能であるJSONリレーショナル二面性により、どちらのモデルもトレードオフすることなく、リレーショナル表とJSONドキュメントの両方のメリットが得られます。
Autonomous Databaseは、統合的なAIサービスとデータベース内の機械学習(ML)を利用して、テキストや画像の分析、音声認識、パーソナライズされた推奨でアプリケーションを強化します。さらに、Autonomous Database Select AIは自動的に自然言語をデータベース・クエリに変換し、複雑なインターフェイスのを介したカスタム・コーディングや手動操作を行うことなく、コンテキストに応じて対話を行うことができます。また、データベースは完全に自律型であるため、開発チームは、自動化されたセキュリティ対策と継続的な監視を通じて、稼働時間を確保し、データを保護することで、アプリケーションの構築に集中できます。
今すぐ無料で開始したり、ワークショップを試してSQL、JSON、Oracle Graphを同じアプリケーションで使用する方法を学ぶこともできます。
eコマース・プラットフォーム、IoTアプリケーションなどのユースケースでは、MongoDBはさまざまな業界でその汎用性を実証しています。多様なデータタイプを処理し、複雑なクエリをサポートするその能力により、現代のテクノロジースタックにおける有能なコンポーネントとしての地位を確立しています。企業がデータから最大の価値を引き出そうとする中、MongoDB はその成功に欠かせない役割を果たすでしょう。
開発者とそのビジネス同僚も同様に、俊敏性、スケーラビリティおよび効率を最大化するために特別に設計されたクラウドネイティブ・アプリケーションの恩恵を受けることができます。クラウドが改善する10の追加の方法について、詳細をご確認ください。
SQLとMongoDBの違いは何ですか。
MongoDBは、構造化問合せ言語(SQL)に適さない非構造化データを保存します。
MongoDBはバックエンド言語ですか。
いいえ。ただし、バックエンドWebアプリケーションの一部として使用できます。
MongoDBは言語またはフレームワークですか。
これは、表ではなくドキュメントに格納されている非構造化データを使用するデータベース管理システムです。