SNS、レコメンド、ナレッジグラフ、サプライチェーン、ネットワーク監視など、関係性(Relation)そのものがデータの本質となる領域では、RDBでは表現が複雑化し、JOINが肥大化し、性能が急激に低下します。
そこで注目されるのが グラフデータベース(Graph Database) です。本記事では、グラフDBを支える理論モデル、クエリパターン、アルゴリズム、RDBとの違いを体系的に解説します。
グラフDBとは?
グラフDBは、ノード(頂点)とエッジ(辺)で構成される「グラフ理論」に基づくデータモデルです。
(User A) ---friend---> (User B) ---liked---> (Product C)
- ノード(Node):人、商品、場所などの実体
- エッジ(Edge):実体間の関係(friend, follow, buy, route)
- プロパティ(Property):ノードやエッジに付属する属性
RDBのようにJOINを多用せず、関係を直接オブジェクトとして保持する点が最大の違いです。
データモデル:Property Graph と RDF Graph
① Property Graph(Neo4j, TigerGraph, JanusGraph)
- ノード・エッジに自由な属性を付けられる
- ラベル(Label)で分類可能
例:Neo4jのモデル
(user:User {id: 1, name: "Alice"})-[:FRIEND {since: 2021}]->(user:User {id: 2, name: "Bob"})
② RDF Graph(SPARQL, Triple Store)
RDFは以下の「三つ組」で世界を表現します:
Subject – Predicate – Object
<Alice> <knows> <Bob>
知識表現・セマンティックウェブ、Google検索のナレッジグラフで利用。
クエリ言語:Cypher / Gremlin / SPARQL
① Cypher(Neo4j)
グラフパターンをそのまま書ける直感的な構文。
// Alice の友達を取得 MATCH (a:User {name: "Alice"})-[:FRIEND]->(friends) RETURN friends;
② Gremlin(Apache TinkerPop)
トラバーサル(経路移動)中心のDSL。
g.V().has("name", "Alice").out("FRIEND")
③ SPARQL(RDF)
SELECT ?friend WHERE { ?alice <name> "Alice" . ?alice <knows> ?friend . }
グラフの中心概念:トラバーサル(Traversal)
グラフクエリの本質は 再帰的探索(Traversal) です。
- 隣接(1-hop)探索
- n-hop探索
- パス探索(最短経路など)
- コミュニティ検出(クラスタリング)
最短経路(Shortest Path)
代表的には Dijkstra法、BFS、A* が使われます。
MATCH p = shortestPath((a:City {id:1})-[:ROAD*]-(b:City {id:99})) RETURN p;
グラフアルゴリズム:Graph Analyticsの核心
グラフDBの最大の価値は、グラフ固有のアルゴリズムが高速に実行できる点です。
① PageRank(ページ重要度)
Google検索の基礎アルゴリズム。
[ PR(v) = (1 – d) + d \sum_{u \in In(v)} \frac{PR(u)}{Out(u)} ]
② 中心性(Centrality)
- Degree Centrality
- Closeness Centrality
- Betweenness Centrality
ネットワークの重要ノードを見つける。
③ Community Detection(コミュニティ検出)
- Louvain法
- Label Propagation
④ Path Finding(経路探索)
- Dijkstra
- A*
- Bidirectional Search
RDBとグラフDBの比較
| 項目 | RDB | グラフDB |
|---|---|---|
| JOIN | テーブル横断JOIN、増えるほど遅くなる | エッジを直接探索するため高速 |
| モデル | 表形式(リレーショナル) | ノード&エッジ(グラフ理論) |
| 用途 | 集計・トランザクション | ネットワーク解析・関係探索 |
| スケール | テーブルが増えるほど複雑化 | 関係が増えるほど強くなる |
グラフDBが活きるユースケース
- ソーシャルグラフ(友達・フォロー関係)
- レコメンデーション(同じ商品を見たユーザー)
- ナレッジグラフ(検索エンジン、生成AI基盤)
- 不正検知(多数の関連から異常なパターンを検出)
- ネットワーク管理(ルーティング、依存関係)
- サプライチェーン管理(依存関係追跡)
特に最近は 生成AI × ナレッジグラフ が急成長しています。
高度トピック:グラフストレージとインデックス構造
- 隣接リスト(Adjacency List)
- 隣接行列(Adjacency Matrix)
- Compressed Sparse Row(CSR)
- エッジリスト(Edge List)
- ラベルインデックス
- パスインデックス(最短経路高速化)
多くのグラフDBは CSR + ラベルインデックス を内部に持ち、トラバーサルを高速化しています。
まとめ
- グラフDBは「関係性」を高速に計算するためのデータモデル
- Property Graph と RDF Graph の2系統が存在
- Cypher / Gremlin / SPARQL は用途で使い分け
- 最短経路、中心性、コミュニティなどグラフ固有の分析が可能
- ナレッジグラフ・レコメンド・不正検知などで強力
RDBが苦手とする「関係の深いデータ」を扱う際、グラフDBはデータ基盤の新たな選択肢になります。