1. awk256

    No comment

    awk256
Changes in body
Source | HTML | Preview
@@ -1,169 +1,202 @@
-WindowsにグラフデータベースNeo4jをインストールしてみました。Neo4jは、シンプルなグラフ構造のデータからSQLライクなサイファークエリ(Cypher Query)を使って、SQLをはらかに超える複雑なデータ処理が可能な革新的なデータベースです。
+**この記事は、Neo4j v4.0(2020-01)に合わせて更新しています!**
->本記事は、Neo4j v3.5.9(2 September 2019 Release)に合わせて更新しています。
-**参考**
+Windows10でグラフDB Neo4jをインストールしてみました。
-* [Install Neo4j](https://neo4j.com/docs/developer-manual/current/get-started/#install-neo4j)
-* [Post-installation tasks](http://neo4j.com/docs/operations-manual/3.0/deployment/post-installation/)
+グラフDBとは、RDBでは処理困難な、非常に複雑なネットワーク状のデータ処理に特化したデータベースです。
-##JDKのインストール
-JDK8をダウンロードし、インストールしてください。Neo4j v3.x`の開発は、JDK8をベースにしています。
+* 1つのSQL文で結合関係が10個以上発生するような処理
+* SQLでは、書き切れないような処理(遅くて困っているものも含めて)
+* そもそも、関係性が複雑すぎてデータベース設計自体が困難
-[Windows 64:jdk-8u101-windows-x64.exe](http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html)
+グラフDBのデータモデルは、文字通り、グラフ(頂点と辺)です。RDBと違って結合関係を永続化します。辺(WRITE)の前後に始点の終点のIDを持たせて、インデックスのような働きをさせてます(トラバーサルと言います)。
-JDKのインストールが終了したら、「コントロール パネル>システムとセキュリティ>>システム>システムの詳細設定>詳細設定>環境変数>システムの環境変数」でJAVA_HOMEを設定してください。
+![data-model.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/69832/dc5b4e07-bcd9-0557-ec5c-e3c03b6ffaa3.png)
-下記は、筆者の環境です。
+RDBのように結合関係を紐解く必要がないために、とても複雑な処理を簡明な構文で書けるし、高速処理が可能性です。
-```
-JAVA_HOME=C:\Java\jdk1.8.0_25\jre
-```
+ネットワーク状のデータとは、どのようなデータでしょうか。
+
+そもそも、すべてのデータは何かしらの繋がりを持ち、本質的にネットワークの形状をしています。そこにあるのは、データ間の繋がりの密度が高いか低いか、階層が深いか浅いか、だけの問題です。そのなかでグラフ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インストールパッケージのダウンロード
-インストールパッケージをこちらから入手してください。とりあえず、お試しならCommunity Serverを選んで下さい。
+# Neo4jのインストール
+##事前準備
-[neo4j.com/download/other-releases](https://neo4j.com/download/other-releases/)
+[参考]
+https://neo4j.com/docs/operations-manual/current/installation/windows/
-![commuity-neo4j 3.5.9(zip).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/69832/2750041d-9c76-297e-8f0f-fc3ffdeb20c7.png)
+最新のNeo4j 4.xは、Java 11が必要です。
->Enterprise Serverは、有償版ですが1カ月限定で無料で利用できます。
-Neo4j Desktopは、有償版のクライアント側のSDKですが、開発などローカルで利用する場合は、無償で利用できます。Neo4j Desktopは、Neo4j Server EnterpriseとNeo4j Browser、Bloom、ETLツール、APOCプロシージャ、グラフライブラリなどを統合して利用できます。詳しく知りたい方は、クリエーションライン社のブログを参照してください(https://www.creationline.com/lab/24847)。
+|Neo4j 3.x|Neo4j 4.x|
+|---------|---------|
+|Java 8 |Java 11 |
-##Neo4jのインストール
+OpenJDK11をダウンロードします。
+https://jdk.java.net/archive/
-インストールパッケージを解凍し、適切なディレクトリに配置してください。
-neo4j-community-3.5.9-windows.zipを解凍し、neo4j-community-3.5.9-windowsをC:\neo4j-community-3.5.9\のように移動するとか。
+[file]
+openjdk-11.0.2_windows-x64_bin.zip
-##Neo4jの開始
+ZIPファイルを解凍し、次のように配置します。
-Neo4jのホームディレクトリに移動し、Neo4jサーバーを起動してください
+|C:\Java\jdk-11.0.2|
+|------------------|
+
+パースを通す必要があります。
+
+* スタートメニューから 「Windowsシステムツール」→「コントロールパネル」を選ぶ
+* 「システムとセキュリティ」→「システム」→「システム詳細設定」→「環境変数」を選ぶ
+* 「システム環境変数」で、次のように登録
+
+|変数名|JAVA_HOME
+|------|------|
+|変数値|C:\Java\jdk-11.0.2|
+
+* 「Path」を選んで、次のように登録
+
+|%JAVA_HOME%\bin|
+|---------------|
+
+環境変数パネルを閉じて、結果をチェックします
```
-C:\neo4j-community-3.5.9>dir
- ドライブ C のボリューム ラベルは OS です
- ボリューム シリアル番号は 88AD-CFAC です
+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)
+```
+
- C:\neo4j-community-3.5.9 のディレクトリ
+## Neo4jインストール
-2019/09/19 14:08 <DIR> .
-2019/09/19 14:08 <DIR> ..
-2019/09/19 13:52 <DIR> bin
-2019/09/19 14:08 <DIR> certificates
-2019/09/19 13:52 <DIR> conf
-2019/09/19 13:52 <DIR> data
-2019/08/22 11:45 <DIR> import
-2019/09/19 13:52 <DIR> lib
-2019/09/19 13:04 36,700 LICENSE.txt
-2019/09/19 13:04 103,692 LICENSES.txt
-2019/08/22 11:45 <DIR> logs
-2019/09/19 13:04 1,317 neo4j.cer
-2019/09/19 13:04 6,918 NOTICE.txt
-2019/09/19 13:52 <DIR> plugins
-2019/09/19 13:04 1,648 README.txt
-2019/08/22 11:45 <DIR> run
-2019/09/19 13:04 97 UPGRADE.txt
+Neo4j Download CenterからWindowsパッケージをダウンロードします。
+https://neo4j.com/download-center/#community
+
+[file]
+neo4j-community-4.0.1-windows.zip
+
+ファイルを解凍し、${NEO4J_HOME}に移動します。
-C:\neo4j-community-3.5.9>bin\neo4j console
-2019-09-19 05:08:31.862+0000 INFO ======== Neo4j 3.5.9 ========
-2019-09-19 05:08:31.875+0000 INFO Starting...
-2019-09-19 05:08:34.867+0000 INFO Bolt enabled on 127.0.0.1:7687.
-2019-09-19 05:08:36.213+0000 INFO Started.
-2019-09-19 05:08:36.914+0000 INFO Remote interface available at http://localhost:7474/
```
+>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サーバーが起動している状態です。
-Webブラウザーから接続してください。
-
+Neo4jを起動します。
+
```
-http://localhost:7474
+>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へのログイン
+これは、フォーグランドで起動しており、neo4j startのようにバックグラウンドで起動しようとすると失敗します。
-データベース毎に1回目のログインでは、既定のユーザーとパスワードを入力し、Neo4サーバーに接続します(neo4j/neo4j)。
+```
+>bin\neo4j start
+Service start failed - service 'neo4j' not found
+```
-![commuity-neo4j 3.5.9-login.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/69832/9dd57730-acf6-1db8-bb18-2a09f7b84d30.png)
+Neo4jをサービス登録したい場合は、こちらを参照してください。
+https://neo4j.com/docs/operations-manual/current/installation/windows/#windows-service
+## Neo4jへログイン
-既定のパスワードは変更が必要です。パスワードを決めて「Change password」をクリックします。
+Webブラウザーから、次のように接続します。
-![commuity-neo4j 3.5.9-change-passwd.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/69832/5d5b2156-86fe-e3da-df14-c520ab86055a.png)
+```
+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)
+
-![commuity-neo4j 3.5.9-init.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/69832/98cc004c-efa8-0a5f-bf89-c994f4bfea17.png)
+次のようにワーキングパネルが表示されます。ここまで表示できたらインストールは成功です。
+![windows-install-3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/69832/983e9cbc-5dd8-823f-c554-783a04e65c4e.png)
## 演習用の映画データベース作成
-Neo4jのWebインターフェースから簡単に映画データベース(サンプルグラフデータベース)が作成できます。コマンドライン「$」に、下記の構文を入力し、右端の実行ボタン(▶)をクリックします
+Neo4jブラウザーへ、次のように入力し、実行します(右上の実行パターンをクリック
```
:play movie graph
```
-映画データベースの紹介画面が表示されたら右に移動します。そして、次のような映画データベース作成用のCypherクエリ文が表示されたら、枠のなかをクリックするとコマンドラインにコピーされますので、そのまま実行ボタン(▶)をクリックします。
+映画データベースの紹介画面が表示されたら右に移動します。そして、次のような映画データベース作成用のCypherクエリ文が表示されたら、枠のなかをクリックし、コマンドラインにコピーしてから実行します。
-![setup306-4.png](https://qiita-image-store.s3.amazonaws.com/0/69832/1a0ce00c-f425-db5d-dec8-95e640756c33.png)
+![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を適切にミックスして行います。
-Neo4jのデータ処理では、Cypher(サイファー)というSQLライクなクエリ言語を利用します。
-Keanu Reevesさんが出演した映画を検索してみましょう
+Keanu Reevesさんが出演した映画をグラフとして出力してみま
```
-MATCH (actor:Person)-[r:ACTED_IN]->(movie)
-WHERE actor.name = "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)-[r:ACTED_IN]->(movie)
-WHERE actor.name = "Keanu Reeves"
-
+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クエリは、SQLを超える型破りのクエリ言語です。興味ある方は:play movie graphの続きにある演習用のCyhperクエリを実行してみてください。Webインターフェースの他の機能に触れてみるのもいいでしょう。
+Cypherを勉強してみたい方は、こちらのオンライントレーニングがお薦めです。
+https://neo4j.com/graphacademy/online-training/introduction-to-neo4j/
-[Neo4jウェブインターフェースを使い倒す](
-http://qiita.com/awk256/items/4448899663a6aa82e88d)
+筆者から言わせると、Cypherはアート(芸術作品)です。
##Neo4jのストップ
-Neo4jをストップは、下記のようにストップコマンドを実行します。
-
-```
-# /usr/neo4j/bin/neo4j stop
-```
-
-
-##まとめ
-以上、Neo4jのインストール手順を紹介しました。興味ある方は、次のサイトや書籍を参照してください。
-
-**関連サイト**
-
-* [neo4j.com](http://neo4j.com)
-* [クリエーションライン社](http://www.creationline.com/lab/neo4j)
-* [Neo4jユーザグループ](https://www.facebook.com/neo4jusersgroup/)
-
+「Ctrl+C」を使います。
+
-**書籍**
-* [Cypherクエリー言語の事例で学ぶグラフデータベースNeo4j](https://www.amazon.co.jp//dp/B0171LWZ9O)
-
-* [グラフ型データベース入門 - Neo4jを使う](https://www.amazon.co.jp/dp/dp/4865940154)
-* [RDB技術者のためのNoSQLガイド](https://www.amazon.co.jp/dp/479804573X)
+以上、Neo4j v4.x(2020-01)のインストール手順でした。