AzureでNeo4jを使ってみる
この記事は、Neo4j v4.0(2020-01)に合わせて更新しています!
Azure VMでグラフDB Neo4jをインストールしてみました。
グラフDBとは、RDBでは処理困難な、非常に複雑なネットワーク状のデータ処理に特化したデータベースです。
- 1つのSQL文で結合関係が10個以上発生するような処理
- SQLでは、書き切れないような処理(遅くて困っているものも含めて)
- そもそも、関係性が複雑すぎてデータベース設計自体が困難
グラフDBのデータモデルは、文字通り、グラフ(頂点と辺)です。RDBと違って結合関係を永続化します。辺(WRITE)の前後に始点の終点のIDを持たせて、インデックスのような働きをさせています(トラバーサルと言います)。
RDBのように結合関係を紐解く必要がないために、とても複雑な処理を簡明な構文で書けるし、高速処理が可能です。
ネットワーク状のデータとは、どのようなデータでしょうか。
そもそも、すべてのデータは何かしらの繋がりを持ち、本質的にネットワークの形状をしています。そこにあるのは、データ間の繋がりの密度が高いか低いか、階層が深いか浅いか、だけの問題です。そのなかでグラフDBは、繋がりの密度が高く、階層が深いデータ処理に向いています。
グラフモデルの場合、データベース設計がとても簡単です。エンジニアでなくても、自分が担当している業務のフローは書けると思います。それが、そのままデータベースのスキーマになります。
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/linux/rpm/
サーバを用意します。
- Standard A2m v2 (2 vcpu 数、16 GiB メモリ) /* これは推奨ですが、半分ぐらいでも結構です */
- CentOS-based V7.5
- パスワードログイン
セキュリティグループに「tcp 7474,7687」を追加します。
最新のNeo4j 4.xは、Java 11が必要です。
Neo4j 3.x | Neo4j 4.x |
---|---|
Java 8 | Java11 |
VMにログインします(centos/your password)。
Java11をインストールします。
CentOSは、Java 8が標準でしたのでJava 11に切り替えました。
# yum install java-11-openjdk-devel
# java -version
java version "1.8.0_231"
Java(TM) SE Runtime Environment (build 1.8.0_231-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.231-b11, mixed mode)
# alternatives --config java // CentOS7のDefaultがjdk1.8.0
*+ 1 /usr/java/jdk1.8.0_231-amd64/jre/bin/java
2 java-11-openjdk.x86_64 (/usr/lib/jvm/java-11-openjdk-11.0.6.10-1.el7_7.x86_64/bin/java)
Enter to keep the current selection[+], or type selection number: 2
# java -version
openjdk version "11.0.6" 2020-01-14 LTS
OpenJDK Runtime Environment 18.9 (build 11.0.6+10-LTS)
OpenJDK 64-Bit Server VM 18.9 (build 11.0.6+10-LTS, mixed mode, sharing)
Neo4jインストール
Neo4j3.5からRPMパッケージが使えるようになりました。
ここでは、「Red Hat, CentOS, Fedora」をベースに解説します。
# rpm --import https://debian.neo4j.com/neotechnology.gpg.key
# cat <<EOF> /etc/yum.repos.d/neo4j.repo
[neo4j]
name=Neo4j RPM Repository
baseurl=https://yum.neo4j.com/stable
enabled=1
gpgcheck=1
EOF
コミュニティ版のインストール
# yum install neo4j-4.0.0
コマシャル版のインストール(30日間無償で使えます)
# yum install neo4j-enterprise-4.0.0
ファイル配置を確認します。
# ls /etc/neo4j/
neo4j.conf
# ls /var/lib/neo4j
certificates data import plugins
# ls /usr/bin/{neo4j,neo4j-admin,cypher-shell}
/usr/bin/cypher-shell /usr/bin/neo4j /usr/bin/neo4j-admin
インストール後の環境設定
リモートからNeo4jブラウザーに接続するためには、neo4j.conf」の設定が必要です。
次のように「リッスンアドレス」をアンコメントします。
/etc/neo4j/neo4j.conf
dbms.connectors.default_listen_address=<local IP address>
次のように初期パスワードを登録します。
# neo4j-admin set-initial-password your_password
運用中にadminユーザーのパスワードを忘れてしまった場合のリセット方法は、次のURLを参照してください。
https://neo4j.com/docs/operations-manual/current/configuration/password-and-user-recovery/
Neo4jの起動
Neo4jを起動します。
# systemctl start neo4j
# systemctl status neo4j
● neo4j.service - Neo4j Graph Database
Loaded: loaded (/usr/lib/systemd/system/neo4j.service; disabled; vendor preset: disabled)
Active: active (running) since Sun 2020-03-01 18:55:17 JST; 19min ago
Main PID: 4242 (java)
CGroup: /system.slice/neo4j.service
mq4242 /usr/bin/java -cp /var/lib/neo4j/plugins:/etc/neo4j:/usr/share/neo4j/lib/*:/var/lib/neo4j/plugins/* -server -XX:+UseG1GC -XX:-OmitStackTraceInFastThrow -XX:+AlwaysPreTo...
Mar 01 18:55:17 mongodb-shard neo4j[4242]: import: /var/lib/neo4j/import
Mar 01 18:55:17 mongodb-shard neo4j[4242]: data: /var/lib/neo4j/data
Mar 01 18:55:17 mongodb-shard neo4j[4242]: certificates: /var/lib/neo4j/certificates
Mar 01 18:55:17 mongodb-shard neo4j[4242]: run: /var/run/neo4j
Mar 01 18:55:17 mongodb-shard neo4j[4242]: Starting Neo4j.
Mar 01 18:55:19 mongodb-shard neo4j[4242]: 2020-03-01 09:55:19.086+0000 INFO ======== Neo4j 4.0.1 ========
Mar 01 18:55:19 mongodb-shard neo4j[4242]: 2020-03-01 09:55:19.098+0000 INFO Starting...
Mar 01 18:55:30 mongodb-shard neo4j[4242]: 2020-03-01 09:55:30.645+0000 INFO Bolt enabled on 0.0.0.0:7687.
Mar 01 18:55:30 mongodb-shard neo4j[4242]: 2020-03-01 09:55:30.646+0000 INFO Started.
Mar 01 18:55:33 mongodb-shard neo4j[4242]: 2020-03-01 09:55:33.590+0000 INFO Remote interface available at http://localhost:7474/
Neo4jへログイン
Webブラウザーから、次のように接続します。
PublicIP:7474
初期画面では、サーバーで設定したパスワードを入力します(neo4j/your_password)。
次のようにワーキングパネルが表示されます。ここまで表示できたらインストールは成功です。
演習用の映画データベース作成
Neo4jブラウザーへ、次のように入力し、実行します(右上の実行パターンをクリック)。
:play movie graph
映画データベースの紹介画面が表示されたら右に移動します。そして、次のような映画データベース作成用のCypherクエリ文が表示されたら、枠のなかをクリックし、コマンドラインにコピーしてから実行します。
次のようなグラフが表示されたらデータベース作成は成功です。
Neo4jのデータ処理
Neo4jのデータ処理は、GUI及びCUIを適切にミックスして行います。
Keanu Reevesさんが出演した映画をグラフとして出力してみます。
MATCH (actor:Person {name:'Keanu Reeves'})-[r:ACTED_IN]->(movie)
RETURN actor,movie
グラフの中身はテキストとしても出力できます。
MATCH (actor:Person {name:'Keanu Reeves'})-[r:ACTED_IN]->(movie)
RETURN actor.name,movie.title
Cypherを勉強してみたい方は、こちらのオンライントレーニングがお薦めです。
https://neo4j.com/graphacademy/online-training/introduction-to-neo4j/
筆者から言わせると、Cypherはアート(芸術作品)です。
Neo4jのストップ
Neo4jをストップします。
# systemctl stop neo4j
以上、Neo4j v4.x(2020-01)のインストール手順でした。
Author And Source
この問題について(AzureでNeo4jを使ってみる), 我々は、より多くの情報をここで見つけました https://qiita.com/awk256/items/a71c37477155743c6330著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .