【ぐらふでーたべーす】

グラフデータベース とは?

最終更新:
💡 データの人間関係を丸ごと記憶するつながりの達人

ノード(頂点)とエッジ(辺)でデータ同士の関係を表し、保存・検索するデータベース。人や物のつながりをたどる用途などに使い、Neo4jやAmazon Neptuneが例。

📌 このページのポイント
人や物と、そのつながりを保存 人:Alice name: Alice 人:Bob name: Bob フォロー 技術書B 分野:IT いいね いいね 枠:人や物のノード 線:関係 / 枠の中:属性の例 関係の向きと種類を保存する
Neo4jのプロパティグラフを説明する架空の例。AliceがBobをフォローし、2人が同じ本にいいねを付ける。矢印は関係の向きで、通信や処理の順番ではない。
ひよこ ひよこ
グラフデータベースの「グラフ」って円グラフとかのグラフ?
ペンギン先生 ペンギン先生
数学のグラフ理論のグラフで、点と線で関係を表すものだよ。たとえば人をノードにし、「AliceがBobをフォローしている」という関係をエッジにする。数字の増減を描くグラフとは意味が違うんだ。
ひよこ ひよこ
普通のデータベースでも関係は表せるよね?
ペンギン先生 ペンギン先生
リレーショナルDBでも、外部キーやJOINなどで関係を表せるよ。グラフDBは関係を直接モデル化してたどる用途に向いている。どちらが速いかはデータ量、関係の数、索引や検索条件などによるので、何段階でも必ず速いとは言えないんだ。
ひよこ ひよこ
どんな場面で使われるの?
ペンギン先生 ペンギン先生
人や商品のつながりを利用する推薦、送金などの関係を調べる不正検知、知識の関係を整理するナレッジグラフなどが例だよ。グラフ構造を使うことと、必ず特定のグラフDB製品で保存することは別なんだ。
ひよこ ひよこ
Neo4jってよく聞くけど、どう検索するの?
ペンギン先生 ペンギン先生
Cypherというクエリ言語を使うよ。たとえばPersonラベルとname属性を持つ人、FOLLOWSという関係を用意した例なら、MATCH (a:Person {name: "Alice"})-[:FOLLOWS]->(b) RETURN b でAliceがフォローする相手を取得する。aを絞る条件を指定しなければ、全体の該当関係が対象になるんだ。
ひよこ ひよこ
全部のグラフDBが同じ仕組みなの?
ペンギン先生 ペンギン先生
違うよ。Neo4jのようなプロパティグラフのほか、RDFを使うモデルもある。Amazon Neptuneは両方に対応するけれど、モデルと利用するクエリ言語を選ぶ。ノード、属性、検索の規則を製品に合わせて確認するんだ。
ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「グラフデータベース」って出てきたら「データ同士のつながりを保存・検索するのが得意なデータベース」と思えればだいたいOK!
📖 おまけ:英語の意味
「Graph Database」 = グラフデータベース
💬 ここでのGraphは棒グラフや折れ線グラフではなく、数学のグラフ理論(ノードとエッジのネットワーク)のことだよ

参考資料

← 用語集にもどる