データベース基本概念

グラフ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)
グラフDBのデータ構造例(SNSのレコメンド) 田中 Person 鈴木 Person 佐藤 Person 商品A Product 商品B Product IT書籍 Category フォロー フォロー 購入 購入 属する 属する Cypherクエリ例(田中がフォローする人が買った商品) MATCH (田中:Person)-[:フォロー]->(:Person)-[:購入]->(p:Product) RETURN p.name

歴史と背景

  • 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 RDFResource Description Framework。セマンティックWebのグラフ表現標準
SPARQL 1.1RDFグラフへの問い合わせ言語
openCypherNeo4jのCypherクエリ言語のオープン仕様
GQL (ISO/IEC 39075)グラフDBの国際標準クエリ言語(2024年制定)

関連用語