代表的なユースケース

グラフDB はどんな場面で威力を発揮するのか。RDB では難しい、あるいは非効率になりがちなユースケースを具体的に紹介します。いずれも「データ間の関係を探索する」ことが処理の中心にあるのが共通点です。

ソーシャルネットワーク

グラフDB の最も代表的なユースケースです。Facebook、LinkedIn、Twitter(X)などの SNS では、ユーザー間の「フォロー」「友人」「いいね」「共有」といった多様な関係が絶え間なく生まれます。

典型的なクエリ

Cypher クエリ例: 共通の友人

// Alice と Bob の共通の友人を探す
MATCH (alice:User {name:"Alice"})-[:FRIEND]->(mutual)<-[:FRIEND]-(bob:User {name:"Bob"})
RETURN mutual.name

RDB で同じことをすると: friends テーブルに対して自己結合を2回行い、さらに重複排除が必要です。友人数が多くなると中間結果が膨大になり、性能が急激に悪化します。

レコメンデーション

EC サイトや動画配信サービスで見かける「この商品を買った人はこれも買っています」「あなたへのおすすめ」は、グラフDB の得意分野です。

協調フィルタリングの仕組み

  1. ユーザー A が購入した商品群を特定
  2. 同じ商品を購入した他のユーザー B, C, D を発見
  3. B, C, D が購入しているが A は未購入の商品を抽出
  4. 出現頻度や評価でランキング

Cypher クエリ例: 商品レコメンド

// ユーザー A に商品をレコメンド
MATCH (a:User {name:"A"})-[:PURCHASED]->(p:Product)<-[:PURCHASED]-(other:User)
      -[:PURCHASED]->(rec:Product)
WHERE NOT (a)-[:PURCHASED]->(rec)
RETURN rec.name, count(other) AS score
ORDER BY score DESC
LIMIT 5

RDB でこの処理を SQL で記述すると、3段階の JOIN と NOT EXISTS サブクエリが必要になります。 商品数・ユーザー数が増えると中間テーブルが肥大し、実用的な応答時間を維持するのが困難になります。

不正検知(フロード検出)

金融機関やEC サイトにおける不正取引の検出は、グラフDB が急速に普及している分野です。 不正は多くの場合、複数のアカウントや取引を経由した「パターン」として現れます。

検出できるパターン例

Cypher クエリ例: 循環取引の検出

// 3〜5ステップの循環取引パターンを検出
MATCH path = (a:Account)-[:TRANSFER*3..5]->(a)
WHERE all(r IN relationships(path) WHERE r.amount > 100000)
RETURN path

なぜ RDB では難しいか: 循環パターンの検出は「任意の深さの自己結合」が必要です。再帰CTE で書けなくもないですが、深さが不定の場合にクエリが複雑化し、性能も実用に耐えないケースが多くなります。

ナレッジグラフ

Google の検索結果で表示される「ナレッジパネル」(人物や場所の概要が右側に出る機能)は、ナレッジグラフの代表例です。 概念・事実・エンティティの関係を柔軟に記述し、検索や推論に活用します。

活用例

// 「Python の作者が生まれた国の首都」を探索
MATCH (:Language {name:"Python"})<-[:CREATED]-(person)-[:BORN_IN]->(country)
      -[:HAS_CAPITAL]->(capital)
RETURN capital.name
// → アムステルダム... ではなくデン・ハーグ(ハーグ)

ネットワーク・IT基盤管理

通信ネットワークや IT インフラの構成管理にもグラフDB が活用されています。 サーバー、スイッチ、VLAN、アプリケーション、依存ライブラリなどの複雑な依存関係を把握するのに適しています。

典型的なクエリ

CMDB(Configuration Management Database)をグラフDB で構築する企業が増えています。従来の RDB ベースの CMDB では、構成アイテム間の複雑な依存関係を表現・検索するのが困難でした。

サプライチェーン管理

製造業のサプライチェーンでは、原材料→部品→モジュール→製品→流通→小売という多段階の関係があります。

// 特定サプライヤーの問題が影響する最終製品を特定
MATCH (s:Supplier {name:"X社"})-[:SUPPLIES]->(part:Part)
      -[:USED_IN*1..5]->(product:Product)
RETURN DISTINCT product.name

ID・アクセス管理(IAM)

「ユーザー → グループ → ロール → 権限 → リソース」という多段階の関係を管理するアクセス制御は、グラフDB の自然な適用領域です。

ユースケース別 RDB vs グラフDB

ユースケースRDB の適性グラフDB の適性
ソーシャルネットワーク小規模なら可最適
レコメンデーション単純なものなら可最適
不正検知定型パターンなら可最適
ナレッジグラフ不向き最適
ネットワーク管理浅い構成なら可最適
サプライチェーン単純な BOM なら可最適
ID・アクセス管理2〜3段階なら可最適
受注・在庫管理最適不向き
会計・帳票最適不向き
BI・集計レポート最適不向き

まとめ

次章「代表的な製品と選び方」では、主要なグラフDB 製品とクエリ言語を比較します。