Opensourcetechブログ

OpensourcetechによるNGINX/Kubernetes/Zabbix/Neo4j/Linuxなどオープンソース技術に関するブログです。

グラフデータベース(GraphDB)のneo4jを使ってみる!

こんにちは、鯨井貴博@opensourcetechです。

 Neo4j開発メンバーと一緒

 

 今回は、グラフデータベース(GraphDB)であるneo4jを使ってみようと思います。

http://neo4j.com/

 

グラフデータベースって何、という質問が聞こえてきそうですが、

以下のようなものになり、

丸で囲ってあるものがノード(node)と言われるデータ、

矢印がリレーションシップ(relationship)と言われるノード間の関係性を表しています。

f:id:opensourcetech:20150728162157p:plain

 

 

まずは、neo4jのインストールからいきましょう。

環境としては、windows8.1上にインストールしています。

以下のURLからneo4jをダウンロードします。

http://neo4j.com/

f:id:opensourcetech:20150728162424p:plain

 

右上にある「Download Neo4j」をクリックすると、

以下の画面が表示されるので、「Download Community Edition」を選択します。

f:id:opensourcetech:20150728162629p:plain

 

 

ダウンロード後は、インストーラーを起動しインストールします。

特に難しいことはないかと思います。

f:id:opensourcetech:20150728162741p:plain

f:id:opensourcetech:20150728162748p:plain

f:id:opensourcetech:20150728162752p:plain

f:id:opensourcetech:20150728162756p:plain

f:id:opensourcetech:20150728162759p:plain

f:id:opensourcetech:20150728162802p:plain

f:id:opensourcetech:20150728162807p:plain

 

 

そして、起動。

データベースディレクトリを選択し、

statusが変化してきます。

f:id:opensourcetech:20150728162810p:plain

f:id:opensourcetech:20150728162814p:plain

 

statusが、「Neo4j is ready. Browse to http://localhost:7474」となれば、

ブラウザからneo4jを使用することが出来るようになり

f:id:opensourcetech:20150728162817p:plain

ます。

 

ブラウザから「http://localhost:7474」にアクセスすると、

まず認証画面が表示されますので、

デフォルトアカウント及びデフォルトパスワードの

neo4j/neo4jでログインします。

f:id:opensourcetech:20150728162834p:plain

 

ログイン後、デフォルトパスワードの変更を行います。

f:id:opensourcetech:20150728163321p:plain

 

そうすると、グラフデータベースを作成する準備完了です!

f:id:opensourcetech:20150728163354p:plain

 

 

今回は最初にも紹介した、以下のグラフデータベースを作成してみます。

ざっくり説明すると、

「Zeus-Enterprise」という会社に雇用されている講師の「鯨井貴博」が

生徒である「A」「B」「C」に教えているという関係性を表しています。

f:id:opensourcetech:20150728162157p:plain

 

データの入力には、「Cypher Query Language」という専門の言語を使用します。

詳細は、以下のURLで見ることができます。

http://neo4j.com/docs/stable/cypher-query-lang.html

 

まずは、何もデータベースが存在しない状態を確認します。

MATCH n RETURN n

これで、データベース全体を確認することが出来ます。

f:id:opensourcetech:20150728163641p:plain

 

まだ「MATCH n RETURN n」を実行しても、

no worsとなり何もデータがないと返されます。

f:id:opensourcetech:20150728163645p:plain

 

まず会社というノードを作成します。

CREATE(company:会社{name:"Zeus-Enterprise"})

f:id:opensourcetech:20150728163650p:plain

すると、ノードが追加された旨を示すメッセージが出力され、

「MATCH n RETURN n」でグラフデータベースが表示されるようになります。

初めて操作した際には、「おっ、表示された!」とかなり楽しく感じました。

f:id:opensourcetech:20150728163658p:plain

f:id:opensourcetech:20150728163702p:plain

 

ノードをクリックすると、下部にidとnameというノードが持つ属性が表示されます。

f:id:opensourcetech:20150728163707p:plain

 

会社と同じ要領で、講師および生徒のノードを追加します。

Create(teacher:講師{name:"鯨井貴博"})
CREATE(student:生徒{name:"A"})
CREATE(student:生徒{name:"B"})
CREATE(student:生徒{name:"C"})

 

すると、「MATCH n RETURN n」で各ノードが表示されます。

ですが、それぞれのノード間の関係性はまだ作成していないので、

次からはそれを作成します。

f:id:opensourcetech:20150728163711p:plain

 

 

以下のようにして、「Zeus-Enterprise」という会社が「鯨井貴博」という講師を雇用している関係(Relationship)を作成します。

 

MATCH (company:会社 { name:'Zeus-Enterprise' }),(teacher:講師 { name:'鯨井貴博' }) MERGE (company)-[roles:雇用している]->(teacher)

f:id:opensourcetech:20150728163715p:plain

f:id:opensourcetech:20150728163719p:plain

 

作成と、ノード間に矢印(Relationship)が確認出来ます。

f:id:opensourcetech:20150728163722p:plain

 

 

同様の手順で講師(ノード)と生徒ノード)間の関係(Relationship)を作成します。

 

構成である「鯨井貴博」が生徒である「A」を教えている関係性は、

以下のように表現します。

MATCH (teacher:講師{name:"鯨井貴博"}),(student:生徒{name:"A"}) MERGE (teacher)-[roles:教えている]->(student)

 

また、講師:生徒を1:多でまとめて関係性を持たせる場合、

以下のようにすることも出来ます。
MATCH (teacher:講師{name:"鯨井貴博"}),(student:生徒) MERGE (teacher)-[roles:教えている]->(student)

 

すると、以下のように会社・講師・生徒間の関係性が完成します。

f:id:opensourcetech:20150728163731p:plain

 

完成したグラフデータベースのノードは、

ドラッグ&ドロップで動かすことができ、全体の見た目の調整も出来ます。

f:id:opensourcetech:20150728163737p:plain

 

 

なお、不要となったグラフデータベースは、

以下で全削除出来ます。

MATCH (n) OPTIONAL MATCH (n)-[r]-() DELETE n,r

 

上記の他にも、

neo4jインストールディレクトリ内にあるdataディレクトリの中身を

削除してやれば初期状態に戻すことも出来ます。

※ログインパスワードもデフォルトパスワードに戻るので注意。

 

 

今回初めて、グラフデータベースというものを使ってみましたが、

作成したデータがグラフィックで確認できるというのは、

非常に面白いですね。

 

にほんブログ村 IT技術ブログ Linuxへ
Linux

にほんブログ村 IT技術ブログ オープンソースへ
オープンソース

Opensourcetech by Takahiro Kujirai