新製品・アップデートのご紹介MongoDB は、Voyage AI の買収を通じて、Atlas における生成 AI アプリケーションの精度と信頼性を強化します。詳しく見る >>
新着情報今すぐチェック!:AI 対応開発向け MongoDB MCP Server(パブリックプレビュー)ブログを読む >>
新着情報MongoDB 8.0:圧倒的な速度と性能を提供。詳しく見る >>

グラフデータベースとしての MongoDB

MongoDB は $graphLookup ステージでグラフ機能を提供しています。MongoDB Atlas で無料のクラスターを作成して、$graphLookup をお試しください。

無料で始める

グラフデータベースとは何ですか?

グラフデータベースは、データをノードとエッジに保存します。ノードにはエンティティに関する情報を、エッジにはノード間の関係またはアクションに関する情報を保存します。このデータモデルにより、グラフデータベースは相互接続されたデータ間の関係を作成できるため、従来のデータベースよりもデータ内の接続やパターンを簡単に検索できます。

グラフデータベースでは、次の重要な用語を使用します。

  • ノード(または頂点):ノードはデータベースの名詞と考えることができます。これらは、人、場所、物事に関する情報を保存します。たとえば、Airport(空港)は、airport_code(空港コード)とcountry(国)というプロパティを持つノードになります。MongoDB では、これらはコレクション内のドキュメントになります。
  • エッジ(またはデータ間の関係):エッジはデータベースにおける動詞と考えることができます。エッジはノード間で行われるアクションに関する情報を保存します(例: 「is」、「has」、「likes」、「follows」。user_1 follows user_2、または airport_1 has restaurant_2 など)。MongoDB では、それらは $graphLookup オペレーターを通じて定義されます。
  • プロパティ:プロパティは、特定のノードまたはエッジに関する情報を保存するキーと値のペアです。たとえば、airport_code があります。これらは、MongoDB ドキュメント内のプロパティと同じです。
  • ラベル:ラベルは、オプションで関連するノードのグループにタグを付けるために使用できます。たとえば、空港の詳細を持つすべてのノードに「Airport」というラベルを付けることができます。

目次

グラフデータベースでのデータの保存方法

グラフデータベースでのデータの保存方法を見ていきましょう。たとえば、航空旅行情報を保存したいとします。

各空港はノードで表され、空港に関する情報はノードのプロパティに保存されます。たとえば、ニュージーランドのオークランド空港用のノードを作成し、airport_code: AKLcountry: New-Zealand などのプロパティを設定できます。

2つの空港間のフライト、つまり 2 つのノード間の関係は、エッジで表されます。エッジのプロパティには、フライトに関する情報が含まれています。この例では、オークランド空港とブリスベン空港のノード間にエッジを作成できます。このエッジには、airplane: 73H 388airline: Qantas などのプロパティを持たせることができます。

空港のノードに加えて、空港レストランなどの他の関連エンティティのノードを作成することもできます。空港ノードに「Airport」、レストランノードに「Restaurant」のようなラベルを適用することを選択できます。以下のグラフ可視化図は、複数のノード、エッジ、プロパティ、ラベルを持つグラフを示しています。

グラフデータベースの主要機能

グラフデータベースは、複雑なデータ関係を管理するためのビッグデータの台頭に伴い、人気を集め始めました。現在では、ソーシャルネットワーク、レコメンデーションエンジン、不正検出などのアプリケーションの重要な部分となっています。組織が他のオプションよりもグラフデータベースを選択する理由をいくつか以下に示します。

関係マネジメント

グラフデータベースは関係を重視し、複雑な関係でも直接たどることができるため、複数のレベルやトラバーサルを必要とするクエリに優れています。ノード間の関係をクエリしてパターンを探し、予測を行うことができます。インテリジェントな意思決定やレコメンデーションの重要性がますます高まる中、グラフデータベースは従来のリレーショナルデータベースが苦手とする領域で真価を発揮します。

グラフアナリティクス

グラフアナリティクスは、グラフ構造を分析して、相互接続されたデータ要素間のデータに関する洞察、パターン、関係を提供する手法です。ノード(エンティティ)間の接続と、それらの関係(エッジ)を使用して、複雑なデータ分析を実行します。一部のデータベースはグラフのようなクエリをサポートしていますが、従来のデータベースのほとんどは大規模なグラフアナリティクス向けに最適化されていません。

柔軟なスキーマ

ほとんどのグラフデータベースは、柔軟なスキーマを提供しています。これにより、要件が必然的に変化し進化するにつれて、開発者はデータベースを簡単に変更できるようになります。柔軟なスキーマは、最新のアプリケーションを構築するアジャイルチームにとって非常に価値があります。

相互接続されたデータにおけるパフォーマンス

従来のデータベースでは、結合の性質が複雑なため、複数レベルの関連データをクエリすることが通常困難であり、その結果パフォーマンスが低下します。グラフデータベースは、複数レベルで相互接続されたデータであっても、関係を直接たどり、クエリできるように最適化されています。

MongoDB とグラフデータの統合方法

MongoDB は汎用ドキュメントデータベースです。MongoDB はドキュメントにデータを保存するため、グラフ構造での保存やクエリを簡単に行うことができます。下の図に示すように、ドキュメントモデルは、キーと値、リレーショナル、オブジェクト、グラフ、地理空間など、他のデータモデルを包含するスーパーセットです。

MongoDB には、グラフをクエリするための $graphLookup 集計パイプラインステージがあります。$graphLookup は、グラフ、ツリー、および階層データを走査する場合に理想的です。$graphLookup は、スタンドアロンのグラフデータベースほど高性能ではない可能性があり、完全なグラフ作成アルゴリズム機能を提供しない可能性があることに留意してください。

アプリケーションでグラフクエリを頻繁に実行する場合は、MongoDB データベースとグラフデータベースを組み合わせることを検討してください。データベースの結合はアーキテクチャに大きな複雑さをもたらし、異なるシステム間でデータを同期させたり、異なる言語でクエリを行う必要があることに注意してください。そのため、グラフクエリの要件を MongoDB に組み込まれた機能で満たすことができる場合は、すべてを1か所にまとめ、単一の API を使用してデータとやり取りする方が良いでしょう。

グラフデータベースとしての MongoDB の使用開始

MongoDB には、再帰検索を実行する $graphLookup 集計パイプラインステージがあります。$graphLookup を使用して、ドキュメント間の接続を走査できます。

MongoDB Atlas サンプルデータセットに含まれる routes コレクションの例を見てみましょう。routes コレクションには、空港間の航空路線に関する情報が含まれています。以下は、routes コレクションのサンプルドキュメントです。

 

 

上記のドキュメントには、オークランド空港(AKL)からブリスベン空港(BNE)までのルートに関する情報が保存されています。このドキュメントは、このルートに割り当てられた航空機がボーイング 737-800(73H)およびエアバス 380-800(388)であることを示しています。このドキュメントは、このルートを運航する航空会社がカンタス航空であることも示しています。

オークランド空港から直行便または乗り継ぎ便で到達可能なすべての目的地をクエリしてみましょう。MongoDB の集計パイプラインを使用して、クエリを作成できます。集計パイプラインは、$match ステージから開始できます。このステージを使用して、src_airportAKLであるドキュメントを照合します。次に、$graphLookup ステージを使用して、src_airport が現在のドキュメントの dst_airport と一致するドキュメントを再帰的に検索できます。以下は、aggregate コマンドを MongoDB Shell で実行するための完全なコマンドです。 このクエリはすべての可能な経路を検索するため、実行には数分かかる可能性が高いことに注意してください。

 

 

結果はドキュメントのセットです。結果内の各ドキュメントは、AKL を出発地とするルートです。各ドキュメントには、routesThatCanBeReached という名前の配列も含まれています。この配列には、ドキュメントに記載されているルートから直接または間接的に到達できるすべてのルートが一覧表示されます。numberOfAdditionalStops フィールドは、このルートを完了するために、乗客が最初のフライトの後に経由する追加の停留地の数を示します。以下は、上記の aggregate コマンドを実行した出力の一部です。

 

 

このクエリをさらに絞り込みたいとします。結果を最大1回停機する行程のみに限定します。これを行うには、maxDepth を 0 に設定して、クエリで 0 の最大再帰深度を使用する必要があることを示します。また、restrictSearchWithMatch プロパティを使用して、特定の航空会社のフライトのみを検索することもできます。MongoDB Shell で実行する完全な aggregate コマンドは以下のとおりです。

 

 

先ほど実行したコマンドと同様に、結果は一連のドキュメントです。各ドキュメントには airportsThatCanBeReachedWithOnlyOneStop という名前の配列が含まれており、これには接続から始まりカンタス航空が運航するルートに関する情報が含まれています。以下は、上記の aggregate コマンドを実行した出力の一部です。

 

 

上記の例は、$graphLookup で実現できることのほんの一部です。$graphLookup に関する公式 MongoDB ドキュメントと、アグリゲーションフレームワークに関する無料の MongoDB University コースをご覧ください。

グラフデータベースとリレーショナルデータベースの比較

従来のリレーショナルデータベースよりもグラフデータベースを選択する主な目的は、グラフデータベースは複数の関係を直接トラバースできるためです。これは、複雑な結合を使用するリレーショナルデータベースでのみ実現できます。

グラフデータベースとリレーショナルデータベースの他の顕著な違いは以下の通りです。

 

特性 グラフデータベース リレーショナルデータベース
データモデル 柔軟なスキーマ、主なコンポーネントはエンティティとその関係を表すノードとエッジでどちらもプロパティ(キー/値のペア)を持つことが可能事前定義または固定のスキーマ、データはプロパティとその値を表す列と行を持つテーブルに構造化
クエリ言語Cypher、Gremlin などのグラフクエリ言語構造化クエリ言語(SQL)
インデックスの作成トラバース向けに最適化、隣接リストや行列を使用した隣接ノード間の直接リンク(インデックスフリー)ハッシュインデックスや B木など、さまざまな種類のインデックス作成メカニズムを使用してクエリのパフォーマンスを最適化
クエリのパフォーマンス関係の走査に最適化されているため、深く相互接続されたデータや複雑な関係をより高速にクエリ可能関係に結合を使用するため、クエリが遅く複雑に

 

グラフデータベースの種類

グラフデータベースにはいくつかの種類があり、クエリ機能、根底にあるデータモデル、そして取り扱うするユースケースに基づいて分類されており、多くは独自のクエリ言語を持っています。

  • プロパティグラフデータベースは、エッジとノードの両方のプロパティを格納するプロパティグラフモデルを使用します。例えば、Neo4j は Cypher クエリ言語を使用しています。
  • Resource Description Framework(RDF)グラフデータベースは RDF モデルを使用します。このモデルでは、データは主語・述語・目的語の形式のトリプルとして表現されます。たとえば、Apache Jena は SPAR クエリ言語を使用します。
  • マルチモデルデータベースは、柔軟性を高めるために、グラフ、ドキュメント、キーバリューなどのさまざまなモデルをサポートしています。たとえば、ArangoDB は ArangoDB クエリ言語を使用します。

グラフデータベースの重要な検討事項

グラフデータベースは、エンティティ間の関係を分析してパターンを探したり、インテリジェントな推奨事項を生成したり、ネットワークをモデル化したり、グラフアルゴリズムを計算したりする必要がある場合に最適です。

ネイティブグラフデータベースは、トラバーサル以外のクエリではパフォーマンスが低くなる傾向があります。ほとんどのアプリケーションではそのようなクエリが必要になるため、汎用データベースが必要です。グラフデータベースと汎用データベースの両方から恩恵を得られるアプリケーションの場合、開発者には2つの選択肢があります。

  • 汎用データベース(ドキュメントデータベースやリレーショナルデータベースなど)をグラフデータベースと組み合わせます。
  • グラフ機能を備えた汎用データベース(MongoDBなど)を使用してください。

グラフデータの一般的なユースケース

グラフデータベースは、親子関係を表す必要があるさまざまなユースケースに適しています。最も一般的な例としては、詐欺の検出、レコメンデーションエンジンの構築、ITネットワークの管理、データ間のグラフアルゴリズムの計算などが挙げられます。

不正検出

グラフデータベースは、マネーロンダリング、クレジットカード詐欺、保険詐欺、税務詐欺、その他の金融トランザクションにおける犯罪行為の検出に一般的に使用されています。近年、犯罪者の手口はますます巧妙化しています。犯罪者は、単一の点やアカウントを起点とするのではなく、検出されない可能性がはるかに高い小規模なスキームからなる不正リングを作り出します。グラフデータベースにより、アナリストはデータ間のつながりを調べて不正のパターンを見つけることができます。

レコメンデーションエンジンの構築

現代の企業は、収益を増やすための戦略的な方法として、顧客にインテリジェントなレコメンデーションを提供したいと考えています。グラフデータベースにより、アプリケーションは前の購入データを分析して、顧客が次に購入したいものを判断できます。

IT ネットワークの管理

グラフデータベースは、IT スペシャリストがネットワーク、IT インフラストラクチャ、IoT デバイスをモデル化および管理するのに役立ちます。これらのエンティティは現実世界で物理的に接続されているため、グラフに自然にマッピングされます。グラフデータベースを使用すると、組織は影響分析を簡単に実行し、停止時に備えた計画を立てることができます。

グラフアルゴリズムの計算

データ間の接続に関する計算を効率的に実行する必要がある場合、グラフデータベースは優れた選択肢です。これらは、最短経路や PageRank などのグラフアルゴリズムの計算に広く使用されています。これらのアルゴリズムは、2つの場所間の最安航空券の探求から、ソーシャルネットワークにおける影響力の判断まで、あらゆる分野で使われています。

ナレッジグラフ

ナレッジグラフはグラフデータベースを使用してセマンティックな意味とコンテキストを提供し、より豊富で洞察に富んだアナリティクスを可能にします。ナレッジグラフは、複数のソースからデータを抽出し、コンテキストに基づいてノード(エンティティ)間の関係を特定し、グラフを構築することで、グラフモデルでデータを統合して表現します。

グラフデータベースとしての MongoDB の使用開始

atlas_database

MongoDB Atlas

MongoDB は $graphLookup ステージでグラフ機能を提供しています。MongoDB の完全管理型サービスとしてのデータベースである MongoDB Atlas で無料のクラスターを作成して、$graphLookup をお試しください。

無料ではじめる
general_content_learn

MongoDB University

MongoDB University の無料コース「M121:MongoDB 集計フレームワーク」で $graphLookup の使用方法を学びましょう。

詳しく見る

よくある質問

今すぐ Atlas を利用する

すぐに利用を開始することができます。無料のクラスターには 512 MB のストレージが付属しているため、サンプル データを使用してプラットフォームに慣れ親しんでいただけます。
無料トライアルご相談・お問い合わせ
トライアルには以下が含まれています。
  • 世界中の 115 以上のリージョンで利用可能
  • サンプルデータセット
  • 常時認証
  • エンドツーエンドの暗号化
  • コマンドラインツール