グラフDB ぐらふでーたべーす
Neo4jグラフ理論ノードエッジレコメンド不正検知
グラフDBについて教えて
簡単に言うとこんな感じ!
グラフDBは「人間関係図をそのままDBにした」ようなものだよ!「AさんはBさんをフォローしてる」「BさんはC商品を買った」「C商品はDカテゴリに属する」みたいなつながりを超高速に辿れるんだ。SNSのレコメンド・不正検知・ナレッジグラフなど「関係性が命」なデータに最強なんだ!
グラフDBとは
**グラフDB(Graph Database)とは、データをノード(頂点)とエッジ(辺)**で表現するNoSQLデータベースです。数学のグラフ理論に基づき、エンティティ(人・物・場所など)をノードとして、その間の関係性をエッジとして管理します。
RDBで複雑な関係性を表現しようとすると、中間テーブルと複数のJOINが必要になり、階層が深くなるほど指数的に処理が遅くなります。グラフDBでは隣接するノードへのポインタを直接持つため、何段階先の関係でも高速に辿れます。これをインデックスフリー隣接性と呼びます。
グラフDBが特に力を発揮するのは「AからBへの最短経路は?」「この人と共通の趣味を持つ人は?」「この取引は不正パターンに似ているか?」といった、つながりを辿る問い合わせです。SNSのフォロー関係、商品レコメンド、サイバー攻撃の経路分析、組織の権限管理などに活用されています。
グラフDBの構成要素
| 要素 | 説明 | 例 |
|---|---|---|
| ノード(Node) | エンティティ(データの主体) | 人・商品・場所・組織 |
| エッジ(Edge/Relationship) | ノード間の関係 | フォローする・購入した・所属する |
| プロパティ(Property) | ノード/エッジが持つ属性 | 名前・日付・金額・強度 |
| ラベル(Label) | ノードの種類 | Person・Product・Location |
| 方向性 | エッジの向き(有向/無向) | AがBをフォロー(A→B) |
歴史と背景
- 1970年代:グラフ理論はオイラーの橋問題(1736年)に遡る。DBへの応用は後年
- 2000年:Neo4jが開発開始(公開は2007年)。グラフDBの代名詞的存在に
- 2010年代:FacebookがSocial Graph、GoogleがKnowledge Graphを構築し注目が高まる
- 2015年:W3C RDFとSPARQLがセマンティックWebのグラフDB標準として定着
- 2018年:Amazon NeptuneがフルマネージドグラフDBとして公開
- 2020年代:AIのナレッジグラフ・不正検知・サプライチェーン管理でさらに注目増
グラフDB vs RDB(関係性クエリの比較)
| 観点 | RDB | グラフDB |
|---|---|---|
| 3段階の関係探索 | 3回JOINが必要・処理が遅い | ポインタ追跡で高速 |
| 深さ不定の探索 | 再帰CTEが必要 | 1クエリで対応 |
| パスの最短経路 | 複雑な実装が必要 | 標準機能で対応 |
| スキーマ変更 | テーブル変更が必要 | 柔軟に追加可能 |
| 単純なCRUD | 高速・シンプル | やや冗長 |
関連する規格・RFC
| 規格・RFC番号 | 内容 |
|---|---|
| W3C RDF | Resource Description Framework。セマンティックWebのグラフ表現標準 |
| SPARQL 1.1 | RDFグラフへの問い合わせ言語 |
| openCypher | Neo4jのCypherクエリ言語のオープン仕様 |
| GQL (ISO/IEC 39075) | グラフDBの国際標準クエリ言語(2024年制定) |
関連用語
- NoSQL — グラフDBが属するNoSQLカテゴリの全体像
- ドキュメント指向DB — 別形式のNoSQL。グラフDBと組み合わせることも
- キー・バリュー型DB — シンプルさを重視した別形式のNoSQL
- エンティティ — グラフDBのノードに相当するデータの主体
- 外部キー — RDBでの関係表現。グラフDBではエッジに相当
- データモデリング — グラフDBの設計で重要な概念