Help us understand the problem. What is going on with this article?

WindowsでNeo4jを使ってみる

この記事は、Neo4j v4.0(2020-01)に合わせて更新しています!

Windows10でグラフDB Neo4jをインストールしてみました。

グラフDBとは、RDBでは処理困難な、非常に複雑なネットワーク状のデータ処理に特化したデータベースです。

  • 1つのSQL文で結合関係が10個以上発生するような処理
  • SQLでは、書き切れないような処理(遅くて困っているものも含めて)
  • そもそも、関係性が複雑すぎてデータベース設計自体が困難

グラフDBのデータモデルは、文字通り、グラフ(頂点と辺)です。RDBと違って結合関係を永続化します。辺(WRITE)の前後に始点の終点のIDを持たせて、インデックスのような働きをさせています(トラバーサルと言います)。

datamodel4type.png

RDBのように結合関係を紐解く必要がないために、とても複雑な処理を簡明な構文で書けるし、高速処理が可能です。

ネットワーク状のデータとは、どのようなデータでしょうか。

そもそも、すべてのデータは何かしらの繋がりを持ち、本質的にネットワークの形状をしています。そこにあるのは、データ間の繋がりの密度が高いか低いか、階層が深いか浅いか、だけの問題です。そのなかでグラフDBは、繋がりの密度が高く、階層が深いデータ処理に向いています。

グラフモデルの場合、データベース設計がとても簡単です。エンジニアでなくても、自分が担当している業務のフローは書けると思います。それが、そのままデータベースのスキーマになります。

datamodel-of-network&IT.png
Displaying 17 nodes, 63 relationships.

このスキーマは、オンラインサンドボックスの「Network and IT Management」のデータモデルです。
https://neo4j.com/sandbox/

複雑なネットワーク構造のデータをSQLで処理しようとすると、いわゆる「ジョインボム(join bomb)」の問題に直面します。想像を絶する長さでノロノロしたクエリのことです。それでも、SQLで書き切れるなら幸いな方です。プロシジャーを書く羽目になるかも知れません。その時点でリアルタイム処理は遠のいてしまいます。

Neo4jは、とても複雑なネットワーク状のデータ処理に最適化された、Cypher(サイファー)というクエリ言語を使ってデータ処理を行います。

Neo4jのインストール

事前準備

[参考]
https://neo4j.com/docs/operations-manual/current/installation/windows/

最新のNeo4j 4.xは、Java 11が必要です。

Neo4j 3.x Neo4j 4.x
Java 8 Java 11

OpenJDK11をダウンロードします。
https://jdk.java.net/archive/

[file]
openjdk-11.0.2_windows-x64_bin.zip

ZIPファイルを解凍し、次のように配置します。

C:\Java\jdk-11.0.2

パースを通す必要があります。

  • スタートメニューから 「Windowsシステムツール」→「コントロールパネル」を選ぶ
  • 「システムとセキュリティ」→「システム」→「システム詳細設定」→「環境変数」を選ぶ
  • 「システム環境変数」で、次のように登録
変数名 JAVA_HOME
変数値 C:\Java\jdk-11.0.2
  • 「Path」を選んで、次のように登録
%JAVA_HOME%\bin

環境変数パネルを閉じて、結果をチェックします。

C:\Users\lee>java -version
openjdk version "11.0.2" 2019-01-15
OpenJDK Runtime Environment 18.9 (build 11.0.2+9)
OpenJDK 64-Bit Server VM 18.9 (build 11.0.2+9, mixed mode)

Neo4jインストール

Neo4j Download CenterからWindowsパッケージをダウンロードします。
https://neo4j.com/download-center/#community

[file]
neo4j-community-4.0.1-windows.zip

ファイルを解凍し、${NEO4J_HOME}に移動します。

>cd neo4j-community-4.0.1
>dir /b
bin
certificates
conf
data
import
lib
LICENSE.txt
LICENSES.txt
logs
neo4j.cer
NOTICE.txt
plugins
README.txt
run
UPGRADE.txt

Neo4jの起動

Neo4jを起動します。

>bin\neo4j console
2020-03-02 08:57:47.364+0000 INFO  ======== Neo4j 4.0.1 ========
2020-03-02 08:57:47.368+0000 INFO  Starting...
2020-03-02 08:57:51.720+0000 INFO  Bolt enabled on localhost:7687.
2020-03-02 08:57:53.994+0000 INFO  Started.
2020-03-02 08:57:54.681+0000 INFO  Remote interface available at http://localhost:7474/

ストップするときは、「Ctrl+C」を使います。

これは、フォーグランドで起動しており、neo4j startのようにバックグラウンドで起動しようとすると失敗します。

>bin\neo4j start
Service start failed - service 'neo4j' not found

Neo4jをサービス登録したい場合は、こちらを参照してください。
https://neo4j.com/docs/operations-manual/current/installation/windows/#windows-service

Neo4jへログイン

Webブラウザーから、次のように接続します。

localhost:7474

初期画面では、既定ユーザーとパスワードを使って接続します(neo4j/neo4j)
windows-install-1.png

パスワードをリセットします。
windows-install-2.png

次のようにワーキングパネルが表示されます。ここまで表示できたらインストールは成功です。
windows-install-3.png

演習用の映画データベース作成

Neo4jブラウザーへ、次のように入力し、実行します(右上の実行パターンをクリック)。

:play movie graph

映画データベースの紹介画面が表示されたら右に移動します。そして、次のような映画データベース作成用のCypherクエリ文が表示されたら、枠のなかをクリックし、コマンドラインにコピーしてから実行します。

neo4j-install-3.png

次のようなグラフが表示されたらデータベース作成は成功です。

movie-graph.png

Neo4jのデータ処理

Neo4jのデータ処理は、GUI及びCUIを適切にミックスして行います。

Keanu Reevesさんが出演した映画をグラフとして出力してみます。

MATCH (actor:Person {name:'Keanu Reeves'})-[r:ACTED_IN]->(movie)
RETURN actor,movie 

keanu-movie-1.png

グラフの中身はテキストとしても出力できます。

MATCH (actor:Person {name:'Keanu Reeves'})-[r:ACTED_IN]->(movie)
RETURN actor.name,movie.title 

keanu-movie-2.png

Cypherを勉強してみたい方は、こちらのオンライントレーニングがお薦めです。
https://neo4j.com/graphacademy/online-training/introduction-to-neo4j/

筆者から言わせると、Cypherはアート(芸術作品)です。

Neo4jのストップ

「Ctrl+C」を使います。

以上、Neo4j v4.x(2020-01)のインストール手順でした。

awk256
{"概要":"データベースが大好きなサーバサイドのエンジニア。IoTビックデータ分析基盤のアーキテクト、Neo4jとMongoDBのテクニカルサポートなど", "所属":"クリエーションライン株式会社", "執筆":["グラフデータベースNeo4jの他","https://www.amazon.co.jp/李昌桓/e/B004LWEKOU"]}
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした