こんにちは、なかにしです。
今回は、オープンソースのグラフDB、Neo4jを試してみようと思います!
今回は入門編として「どんなことができるか」を試してみて、次回ではグラフDBを使ったデータ分析とかをやってみようと思います。
グラフDBとは
データをノード(点)とエッジ(線)で表すデータベースです。
複雑な関係の検索が得意で、例えば「友達の友達の友達」などを簡単に取得できます。
単純な CRUD は RDB の方が向いています。
レコメンデーション や ナレッジグラフの構築などによく使用されます。
使ってみた
dockerで環境構築
services:
neo4j:
image: neo4j:5.26
container_name: neo4j-practice
ports:
- "7474:7474" # HTTP (Neo4j Browser)
- "7687:7687" # Bolt (driver接続用)
environment:
- NEO4J_AUTH=neo4j/password
- NEO4J_PLUGINS=["apoc"]
- NEO4J_dbms_security_procedures_unrestricted=apoc.*
volumes:
- neo4j_data:/data
- neo4j_logs:/logs
- ./cypher:/var/lib/neo4j/import
volumes:
neo4j_data:
neo4j_logs:起動し、localhost:7474へ接続。
ログインします。
ID: neo4j
PW: password▼ 画面が出ました。
赤矢印の部分に cypher というクエリ言語 を入力して実行し、グラフを作っていきます。
ノードとエッジの定義方法
cypher というクエリ言語を使用します。
SQLではないです。
// ステップ1: ノードを1つ作る
CREATE (:Person {name: 'アリス', age: 20});
// ステップ2: もう1つノードを作る
CREATE (:Person {name: 'ボブ', age: 22});
// ステップ3: 2つをエッジでつなぐ
// MATCH で既存ノードを探して、CREATE で関係を作る
MATCH (a:Person {name: 'アリス'}),
(b:Person {name: 'ボブ'})
CREATE (a)-[:KNOWS]->(b);これで、「ボブ」と「アリス」のノードが作成され、
アリスはボブを「Knows」、つまり一方的に知っているという関係でつながれました。
直感的でいいですね。JSっぽい。
GUIで見る
早速つくったものを見ていきましょう。
先ほどの赤矢印の部分に、cypher を入力しました。
作るだけでは、グラフは表示されません。
cypher で以下を入力してグラフを表示するか、上記画像の赤矢印の部分をクリックすると、現在のグラフが表示されます。
MATCH (n)-[m]->(s)
RETURN n,m,sいいですね。
ちゃんとアリスはボブを一方的に知っています。
さらに拡張
なかにし高校を取り巻く先生と生徒を表現してみました。
おわりに
とにかく、見た目がかっこいいですよね。
今回は基本的なやり方が分かったので、次回はこのグラフを使って何ができるのか、という所まで踏み込んでいきたいと思います。
今回はここまで!
Enjoy Hacking!