1. awk256

    No comment

    awk256
Changes in body
Source | HTML | Preview
@@ -1,202 +1,202 @@
**この記事は、Neo4j v4.0(2020-01)に合わせて更新しています!**
Windows10でグラフDB Neo4jをインストールしてみました。
グラフDBとは、RDBでは処理困難な、非常に複雑なネットワーク状のデータ処理に特化したデータベースです。
* 1つのSQL文で結合関係が10個以上発生するような処理
* SQLでは、書き切れないような処理(遅くて困っているものも含めて)
* そもそも、関係性が複雑すぎてデータベース設計自体が困難
グラフDBのデータモデルは、文字通り、グラフ(頂点と辺)です。RDBと違って結合関係を永続化します。辺(WRITE)の前後に始点の終点のIDを持たせて、インデックスのような働きをさせています(トラバーサルと言います)。
![data-model.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/69832/dc5b4e07-bcd9-0557-ec5c-e3c03b6ffaa3.png)
RDBのように結合関係を紐解く必要がないために、とても複雑な処理を簡明な構文で書けるし、高速処理が可能です。
ネットワーク状のデータとは、どのようなデータでしょうか。
そもそも、すべてのデータは何かしらの繋がりを持ち、本質的にネットワークの形状をしています。そこにあるのは、データ間の繋がりの密度が高いか低いか、階層が深いか浅いか、だけの問題です。そのなかでグラフDBは、繋がりの密度が高く、階層が深いデータ処理に向いています。
-グラフモデルの場合、データベース設計がとても簡単です。エンジニアでなくても、自分が担当している業務フローは書けると思います。それが、そのままデータベースのスキーマになります。
+グラフモデルの場合、データベース設計がとても簡単です。エンジニアでなくても、自分が担当している業務フローは書けると思います。それが、そのままデータベースのスキーマになります。
![paradise-paper.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/69832/d8ce1b06-d65b-994b-6393-6fb7b1b02f06.png)
>このスキーマは、バラダイス文書(Paradise Paper、あの「パナマ文書」の後続版)です
https://neo4j.com/blog/analyzing-paradise-papers-neo4j/
複雑なネットワーク構造のデータを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](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/69832/aad6e062-ddf6-7da7-f279-9d26b6a1d55a.png)
パスワードをリセットします。
![windows-install-2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/69832/f89a244f-8b64-84ae-3981-885213bba942.png)
次のようにワーキングパネルが表示されます。ここまで表示できたらインストールは成功です。
![windows-install-3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/69832/983e9cbc-5dd8-823f-c554-783a04e65c4e.png)
## 演習用の映画データベース作成
Neo4jブラウザーへ、次のように入力し、実行します(右上の実行パターンをクリック)。
```
:play movie graph
```
映画データベースの紹介画面が表示されたら右に移動します。そして、次のような映画データベース作成用のCypherクエリ文が表示されたら、枠のなかをクリックし、コマンドラインにコピーしてから実行します。
![neo4j-install-3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/69832/5a5dded9-2134-82dd-c182-db808ef5e7c4.png)
次のようなグラフが表示されたらデータベース作成は成功です。
![movie-graph.png](https://qiita-image-store.s3.amazonaws.com/0/69832/4868ec58-2240-c16e-d1a0-65cbce839e25.png)
## Neo4jのデータ処理
Neo4jのデータ処理は、GUI及びCUIを適切にミックスして行います。
Keanu Reevesさんが出演した映画をグラフとして出力してみます。
```
MATCH (actor:Person {name:'Keanu Reeves'})-[r:ACTED_IN]->(movie)
RETURN actor,movie
```
![keanu-movie-1.png](https://qiita-image-store.s3.amazonaws.com/0/69832/f2e55263-de27-94f9-e465-5fda36df519e.png)
グラフの中身はテキストとしても出力できます。
```
MATCH (actor:Person {name:'Keanu Reeves'})-[r:ACTED_IN]->(movie)
RETURN actor.name,movie.title
```
![keanu-movie-2.png](https://qiita-image-store.s3.amazonaws.com/0/69832/0468afa3-a703-89eb-3bf6-b2c1b959916c.png)
Cypherを勉強してみたい方は、こちらのオンライントレーニングがお薦めです。
https://neo4j.com/graphacademy/online-training/introduction-to-neo4j/
筆者から言わせると、Cypherはアート(芸術作品)です。
##Neo4jのストップ
「Ctrl+C」を使います。
以上、Neo4j v4.x(2020-01)のインストール手順でした。