Jeffrey Erickson|シニア・ライター| 2024年10月30日
MongoDBは2007年、広告配信ビジネスにおける膨大な(だからこの名前になった)数の小規模トランザクションを追跡することを希望した数人の開発者によって作られました。当初10genと名付けられた新しいデータベースは、JSON型ファイルのシンプルなドキュメント「バケット」にデータを保持し、非常に迅速にスケールアップすることができました。単純に広告のインプレッションをカウントするだけなので、データモデルや厳密なトランザクション・コンカレンシーは必要ありませんでした。
しかし、MongoDBは開発者が渇望していたデータベースのシンプルさを提供することがわかりました。2009年にオープンソース開発モデルで立ち上げられ、2018年にSSPL(サーバーサイドパブリックライセンス)に移行し、Expedia、Lyft、eBayなどを含む多くの顧客を持つ、多くのオープンソース開発スタックの事実上の標準データストアへと進化しました。それがどういうものか見てみましょう。
MongoDBは、最新のWebおよびモバイル・アプリケーションで一般的に使用されるオープンソースのドキュメント・データベースです。MongoDBはNoSQLデータベースに分類され、つまり従来の表ベースのリレーショナル・データベースではなく、柔軟なドキュメント指向のアプローチでデータを保存します。MongoDBの魅力の大部分は、そのシンプルさと「開発者目線の設計」にあります。たとえば、Mongoのやりとりは、create、read、update、deleteの頭文字をとってCRUDと呼ばれます。
MongoDBはデータをJSONドキュメントで保存するので、構造化、非構造化、半構造化などの保存データをさまざまなアプリケーションで比較的簡単に使用できます。MongoDBの柔軟なデータ・モデルにより、開発者はより高速なファイル・アクセスを実現するインデックス作成のサポートや、データ保護と可用性を実現するレプリケーションを提供しつつ、非構造化データを保存することができます。つまり、開発者はMongoDBを使用して高度なアプリケーションを設計および構築できます。
MongoDBは何千もの広告配信サイトのインプレッションを追跡するために開発されましたが、すぐにオープンソースのウェブ開発における柔軟なデータストアとして幅広く普及しました。MongoDBは2007年の発売以来、継続的な進化を遂げ、アドホック・クエリ、インデックス作成、リアルタイム集計など、堅牢な機能セットを蓄積しています。開発者にとっての MongoDB の主なメリットは、一般的なリレーショナルデータベースと比較して、直感的に使用でき、すぐに使い始められることです。MongoDBに保存されるJSONドキュメントの型は、JavaScriptやPythonの辞書など、一般的なプログラミング言語で一般的に使用されるデータ型に対応しています。Mongoはまた、PHP、.Net、Java、Python、Node.jsなど、ほとんどのプログラミング言語をサポートするドライバを備えたクライアント・ライブラリの徹底したメニューを提供します。
とはいえ、すべての技術と同様に、MongoDBにも得意分野と不得意分野があります。MongoDBはオンライン広告を追跡するために設計され、高速な同時アクセスが必要でしたが、トランザクションの精度は緩く、リアルタイムの分析はほとんど必要ありませんでした。現在でも、MongoDBは可用性、スケーラビリティ、最終的な一貫性を表すBASEの原則に基づいて形成されています。そのため、MongoDBは通常、高可用性とスケーラビリティを設計上の主要な考慮事項とするシナリオで使用されます。一方、金融業務やミッションクリティカルな企業環境では、開発者は通常リレーショナル・データベースを選択します。これらはACIDトランザクション(原子性、一貫性、分離性、耐久性)を提供し、データベース操作の信頼性と一貫性を保証できるよう支援します。しかし最近になって、テクノロジー業界は、JSONの開発しやすさとSQLの利点を通じて、開発者に両方の長所を提供できるソリューションを提供しています。
アプリケーションからMongoDBデータベースにデータが移行する仕組み
MongoDBは、小規模、中規模、さらには大規模なエンタープライズ・プロジェクトに取り組む開発者のニーズに合うように、さまざまな構成とサービス・レベルで提供されています。
主なポイント
MongoDBは、ドキュメント指向のデータ・モデルを使用するNoSQLデータベース、MySQLなどの一般的なリレーショナル・データベースで使用される行や列の代わりに、各レコードがコレクションに格納されたドキュメントになります。
MongoDBは、BSONまたはバイナリJSONという形式を使用してJSONドキュメントを格納します。これらのドキュメントの非リレーショナルな性質は、半構造化データや非構造化データだけでなく、構造化されたアプリケーションデータも保存でき、データベースが処理できることを意味します。リレーショナル・データベースとは異なり、MongoDBは柔軟性のないスキーマは使いません。その代わり、ドキュメントは柔軟で、配列やネストされたドキュメントを含めることができ、複雑で階層的なデータ保存が可能です。
MongoDBのようなドキュメント・データベースは、非常に大きなデータセットを扱う場合、シャーディングと呼ばれる手法を使って複数のノードやクラスタにデータをスケールアウトまたは分散します。このモデルによって、高速なストレージとリコールが可能になります。このアーキテクチャは、MongoDBが何百万もの広告を何千ものウェブサイトから瞬時に呼び出す必要がある広告配信のために作られたことを考えると理にかなっています。ある広告を別の広告と照らし合わせて分析する本質的な必要性がないため、データを物理的に分散および分離することができました。
階層型ドキュメント・データベースは、読み取り操作は非常に高速ですが、システムがすべてのネストしたエンティティのデータを分析する必要があるため、データ分析に時間がかかることがあります。一方、リレーショナル・データベースは、データを個別のテーブルに格納し、単一の「オブジェクト」がデータベース内の多くのテーブルで参照される可能性があるため、大規模な分析業務をより効率的に行うことができます。このように異なる強みがあるため、開発チームは通常、アプリケーションの現在のニーズに最適なデータ管理システムを採用します。または、あるいは、リレーショナルとJSONの両方のドキュメント・データだけでなく、他の多くのデータ型にもSQLでフルアクセスできるマルチモーダルなデータベースを選択する可能性があります。
ACIDとBASE表の比較
どちらを選ぶかは、アプリケーションのニーズにより決まります。
| ACID(原子性、一貫性、分離性、耐久性) | BASE(基本的に使用可能、ソフト状態、最終的には一貫性がある) |
|---|---|
|
原子性:トランザクション全体が1つの単位として扱われることを保証します。すべての変更が成功するか、あるいはどれも成功しないかのどちらかです。これにより、部分的な更新によってデータが一貫性のない状態になることを防ぎます。 一貫性:トランザクション後に、データベースがある有効な状態から別の有効な状態に遷移することを保証します。ビジネスルールとデータの整合性を実現します。 分離性:同時に実行されるトランザクションが互いに干渉しないようにします。複数のトランザクションが同時に発生しても、各トランザクションは分離して実行されているように見えます。 耐久性:トランザクションがコミットされると、変更は永続ストレージに書き込まれ、クラッシュなどのシステム障害の影響を受けません。 |
基本的に利用可能:データの可用性を最大化することに重点を置いています。このシステムは、部分的な障害が発生した場合でも運用を維持するよう努め、ほとんどの読み取りおよび書き込み操作を続行できるようにします。 ソフト状態:データの整合性は、書き込み操作の直後に保証されるわけではありません。変更がすべてのレプリカに反映されるまでに若干のタイムラグがあり、一時的な不整合が発生する可能性があります。 最終的に一貫性:時間の経過とともに、レプリカ間で変更を同期するバックグラウンド・プロセスによって一貫性が実現されます。 |
|
長所: 高いデータ整合性と強力な一貫性により、ACIDは金融取引のような正確性が要求されるアプリケーションに最適です。 |
長所: 高い可用性とスケーラビリティにより、BASEは、特に分散システムにおいて高い稼働時間と応答性を必要とするアプリケーションに最適です。一貫性要件が緩和されているため、書き込み速度とスケーラビリティの向上が実現します。 |
|
短所: パフォーマンス・オーバーヘッドとは、ACID保証を維持することが書き込み速度の低下につながる可能性があることを意味します。厳しい一貫性要件は、高度にスケーラブルな環境では管理が困難になる可能性があります。 |
短所: データの同期中に一時的な不整合が発生する可能性があるため、BASEは厳密なデータの整合性と即時の一貫性が重要なアプリケーションには適していません。 |
MongoDB には表と行の概念がなく、スキーマもないので、データベースが使えるようになる前に定義する構造が少なくて済みます。各コレクションは複数のドキュメントを保持し、その構造はさまざまです。ドキュメントは自己記述型なので、ドキュメントの構造をシステムに宣言する必要はありません。つまり、各ドキュメントにはドキュメント内の各フィールドを記述したメタデータが含まれています。
パフォーマンスを向上させるために、MongoDBはドキュメント内のあらゆるフィールドに対するインデックス作成をサポートしています。インデックスはクエリの効率的な実行をサポートし、プライマリおよびセカンダリ・インデックスを含むことができます。MongoDBのクエリ言語はCRUD(作成、読み込み、更新、削除)操作をサポートし、複雑な集計、テキスト検索、地理空間クエリを可能にします。応答時間を短縮するために、MongoDBは集約フレームワークを提供しており、それにより開発者は複雑なデータ処理をサーバー側で設定することができます。つまり、データをApacheSparkやHadoopのような別のプラットフォームに移すことなく、データが存在するクラスタ上で分析を実行できます。これにより、クライアントとの間で転送されるデータ量を減らすことができます。
MongoDB はレプリカ・データセットをサポートすることで、高可用性を実現し、パフォーマンスを向上させます。レプリカは、読み取りと書き込みの操作をすべてのインスタンスに分散することで、ロード・バランサに使用できます。これらのレプリカ・セットはまた、異なるデータベース・サーバー上の複数のデータ・コピーによって冗長性を提供し、データの可用性を高めます。ハードウェアの障害や メンテナンスの際にも、レプリカ・セットを使うことでMongoDBは自動的にフェイルオーバーを行い、データの冗長性を確保できます。
スケーラビリティのために、MongoDBは複数のマシンの複数のデータベースにデータを分散させる方法であるシャーディングによる水平方向のスケーリングをサポートしています。シャード・クラスタは多数のレプリカセットで構成できます。シャーディングはシャード・キーを定義することで構成され、シャード間でデータが分散される方法を決定します。この手法は、データセットと負荷を複数のサーバーに分割することで、大規模なデータセットと高スループットの運用の管理を支援します。
シャーディングの仕組み
各シャードは、shardedデータベースのデータのサブセットをホストする独立したデータベース・インスタンスです。
MySQL、Postgres、Oracle Databaseのようなリレーショナル・データベースと、CouchDB、DynamoDB、MongoDBのようなドキュメント指向のデータベースには、それぞれ長所と短所があり、一般的に、これらの選択は、開発するアプリケーションの特定の要件と制約によって決まります。
リレーショナル・データベース管理システム(RDBMS)は構造化クエリ言語(SQL)を使用しますが、MongoDBのドキュメントに特化したフォーマットはドキュメントストアAPIを使用します。それでも、MongoDB Query Language(MQL)はJavaScriptのような言語を使い、ドキュメントの作成、読み込み、更新、削除などの操作を行います。
MongoDBには表と行の概念がなく、スキーマもないため、データベースが使えるようになる前に定義する構造が少なくて済みます。しかし、中央のスキーマがないため、コレクションにアクセスするアプリケーションはそれぞれドキュメントを理解する必要があります。つまり、「スキーマ」はアプリケーション・コードの中にあり、データベースで定義されているわけではありません。あるアプリケーションがスキーマを変更すると、他のアプリケーションが壊れる可能性があります。スキーマが基本的にRDBMSの設計図であり、データの構成や相互関係が明示的に定義されているリレーショナル・データベースに比べて、MongoDBにはデータ間の関係という固有の概念がありません。
データストアの柔軟性は顕著で、MongoDBはキー/値ストア、グラフ、ドキュメントなど、データにさまざまな形式を使用し、データ構造は時間の経過とともに変更することができます。これは、厳しい定義、階層、データの整合性の保証を支援するための検証手順を使用するRDBMSとは異なります。
基本的な MongoDBインスタンスを設定することは簡単ですが、 シャーディングやレプリカを使った大規模な分散MongoDBクラスタの設定や保守は複雑になる可能性があり、 そのアーキテクチャや構成オプションをよく理解する必要があります。
| リレーショナル | MongoDB | |
|---|---|---|
| データ・モデル | 行と列が固定された表を使用し、データはデフォルトのスキーマで構造化されます。 | 動的なスキーマを持つJSONのような構造であるドキュメントのコレクションを使用します。 |
| スキーマの柔軟性 | デフォルトのスキーマが必要で、データが追加できるようになる前に設定する必要があります。 | 動的スキーマを備えています。コレクション内の他のすべてのドキュメントに影響を与えることなく、ドキュメントに新しいフィールドを追加することができます。 |
| クエリ言語 | データの定義と操作に、複雑なクエリに非常に強力なSQLを使用します。 | SQLと比較してより直感的ではあるものの、完全性や汎用性に劣ると考えられているドキュメントベースのクエリ言語を使用します。 |
| スケーリング | 従来は垂直方向に拡張するため、既存のマシンにさらにパワーを加えていましたが、シャーディングやOracle Real Application Clustersなどの成熟した機能により、水平方向のスケーリングもサポートします。 | 複数のマシンにデータを分散するシャーディングを使用して、マシンのクラスタ間で水平方向に拡張できるように設計されています。 |
| トランザクション | 複数行のトランザクションをサポートし、ACIDに準拠しているため、データの損失や破損が生じる可能性のないアプリケーションに適しています。 | マルチドキュメントのトランザクションをサポートしますが、従来のリレーショナル・データベースと比較すると、特に分散データに対して堅牢でないことが知られています。 |
| パフォーマンス | 正確なトランザクションを保証するように構築されていますが、データ量が多い場合はパフォーマンスが低下することがあります。ただし、分析パフォーマンスは通常、向上します。 | 大量のデータにおいて高い読み取りパフォーマンスを実現するように構築されています。 |
MongoDBは、ブログやメモ帳アプリのようなシンプルなCRUDアプリケーションから、Amazon Primeのような複雑なプラットフォームまで、さまざまな用途に適しています。MongoDBは、コンテンツ管理システム(CMS)、データの同期が高速に行われる必要があるゲーム・アプリケーション、生体認証ヘルスケア・データなど、多くのユースケースでよく選ばれています。その汎用性により、MEANやMERNといった一般的なオープンソース開発スタックの基盤となっています。
必要に応じてお選びください。
MongoDBは、直感的なAPI、柔軟なデータ・モデル、次のような機能により、開発者に人気を博しています。
オープンソース・コミュニティでMongoDBが普及している理由は、アプリケーションの開発と保守をより直感的でスケーラブルにする数多くの方法にあります。主な利点は以下の通りです。
MongoDBは、特に大量データの中で柔軟性と高いパフォーマンスを必要とするアプリケーションにとって多くの利点がありますが、多くの欠点を伴う可能性があります。
MongoDBはNoSQLデータベースであり、そのエコシステム内でうまく機能しますが、さまざまなデータ統合ツールやコネクタを通じて他のタイプのデータベース管理システムともやりとりできるように構築されています。このツールセットには、MongoDBからデータを抽出して移行したり、その逆を行うためのETL(抽出、変換、読み込み)インフラストラクチャが含まれています。これは、レポートや複雑なデータ分析のためにリレーショナル・データベースにデータを送信する場合に役立ちます。MongoDBアプリケーションは、REST APIを使って異なるデータベースプラットフォーム間で通信することもできます。
MongoDBの互換性の良い例として、開発者がMongoDBのオープンソースツールとドライバーをOracle Autonomous JSON Databaseに接続して使えるようにする、Oracle Database API for MongoDBがあります。これにより、オラクルのマルチモデル機能にアクセスでき、分析、機械学習(ML)および空間分析のためにデータを別のデータベースに移動することを回避できます。Autonomous JSON Databaseは、MongoDB Atlasに代わるマルチモーダルなデータベースだとお考えください。多くの場合、既存のアプリケーションの変更はほとんどまたはまったく必要ありません。
開発者は、APIを介してMongoDB機能にアクセスする代わりに、JSON中心のワークロードを Oracle Cloud Infrastructure (OCI)上の Oracle Autonomous JSON Databaseに移行するだけです。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とMySQLの違いを教えてください。
MongoDBは非構造化データを保存するので、構造化クエリ言語(SQL)には適していません。
MongoDBはバックエンド言語ですか。
いいえ。ただし、バックエンドWebアプリケーションの一部として使用できます。
MongoDBは言語またはフレームワークですか。
テーブルではなくドキュメントに格納されている非構造化データを使用するデータベース管理システムです。