はじめに
このチュートリアルでは、Neo4jとは何か、Neo4jの用途、および実装方法について説明します。また、Ubuntu20.04サーバーにインストールして構成します。 Neo4jは、データ関係を作成するために使用されるグラフィカルデータベースです。グラフィカルデータベースの他の例は次のとおりです。
- ArangoDB
- Grakn Core
- Microsoft SQL Server 2017
- OrientDB
- RedisGraph
Neo4jとは
Neo4jは、保存されているデータを接続し、これまで知らなかった、または考えたことのないクエリを実行できるようにします。簡単に言うと、Neo4jはデータノード間の関係を記録しますが、従来のリレーショナルデータベースは列と行を使用して構造化データを格納します。各ノードは、接続されている他のすべてのノードへの参照を格納するため、Neo4jは、最小限のオーバーヘッドで複雑な関係をエンコードおよびクエリできます。
Neo Technologyは、オープンソースソフトウェアNeo4jの作成者および開発者です。同社は2003年から開発を続けています。JavaとScalaで記述されており、ソースコードはGitHubから無料で入手できます。 2015年現在、これは現在使用されている最も利用されているグラフィカルデータベース管理システムと見なされています。 Neo4jはCypherと呼ばれる独自のクエリ言語を採用していますが、クエリはJavaAPIなどを介して他のスタイルで作成することもできます。
前提条件
このインストールでは、ソフトウェアに次のベースライン設定が必要です。
- 8GBのRAMと4コアのサーバー。少なくとも、推奨される使用法は1GBのRAMとシングルコアサーバーです。
- Ubuntu 20.04 OS
- すべてのコマンドはrootとして実行されます。通常のユーザーの場合、コマンドの前にsudoコマンドを付ける必要があります。
Neo4jのインストール
リポジトリの追加
Ubuntuは、標準パッケージリポジトリにNeo4jを公式に含んでいません。 Neo4jリポジトリの場所を指すパッケージソースを追加し、検証のためにNeo4jからGPGキーを追加してから、Neo4j自体をインストールします。
まず、パッケージのリストとパッケージ自体を更新します。
root@host:~# apt update && apt -y upgrade
追加のソフトウェアを追加する
このステップでは、HTTPS接続に必要な追加のパッケージをインストールします。このアプリケーションはデフォルトでシステムにすでにインストールされている可能性がありますが、それでも更新する必要があります。
root@host:~# apt install apt-transport-https ca-certificates curl software-properties-common -y
apt-transport-https packageは、 libapt-pkgを使用してパッケージマネージャーを介してhttpsを使用できるようにします。 図書館。これにより、インストールが安全に保たれます。
セキュリティキーの確認
次に、Neo4jパッケージリポジトリの公式セキュリティキーを追加します。このキーは、インストールしているものが公式リポジトリからのものであることを確認します。
root@host:~# curl -fsSL https://debian.neo4j.com/neotechnology.gpg.key | apt-key add -
OK
root@host:~#
リポジトリの追加
公式のNeo4jリポジトリをパッケージマネージャーリストに追加します。
root@host:~# add-apt-repository "deb https://debian.neo4j.com stable 4.1"
Neo4jをインストールする
Neo4jとそのすべての依存関係をインストールする場合、インストールにより、Neo4jで動作するJavaパッケージをインストールするように求められることに注意する必要があります。インストール中にYを押して、このソフトウェアのインストールを受け入れます。 Javaがインストールされている場合、インストーラーはこの手順を理解してスキップします。
root@host:~# apt install neo4j -y
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following package was automatically installed and is no longer required:
libfprint-2-tod1
Use 'sudo apt autoremove' to remove it.
The following additional packages will be installed:
cypher-shell
The following NEW packages will be installed:
cypher-shell neo4j
0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded.
Need to get 116 MB of archives.
After this operation, 131 MB of additional disk space will be used.
Get:1 https://debian.neo4j.com stable/4.1 amd64 cypher-shell all 4.1.3 [27,1 MB]
Get:2 https://debian.neo4j.com stable/4.1 amd64 neo4j all 1:4.1.5 [88,4 MB]
Fetched 116 MB in 10s (11,1 MB/s)
Preconfiguring packages ...
Selecting previously unselected package cypher-shell.
(Reading database ... 163626 files and directories currently installed.)
Preparing to unpack .../cypher-shell_4.1.3_all.deb ...
Unpacking cypher-shell (4.1.3) ...
Selecting previously unselected package neo4j.
Preparing to unpack .../neo4j_1%3a4.1.5_all.deb ...
Unpacking neo4j (1:4.1.5) ...
Setting up cypher-shell (4.1.3) ...
Setting up neo4j (1:4.1.5) ...
Processing triggers for man-db (2.9.1-1) ...
Processing triggers for systemd (245.4-4ubuntu3.3) ...
root@host:~#
Neo4jサービスを開始する
インストールしたら、neo4j.serviceサービスとして有効にする必要があります。
root@host:~# systemctl enable neo4j.service
Synchronizing state of neo4j.service with SysV service script with /lib/systemd/systemd-sysv-install.
Executing: /lib/systemd/systemd-sysv-install enable neo4j
Created symlink /etc/systemd/system/multi-user.target.wants/neo4j.service → /lib/systemd/system/neo4j.service.
root@host:~#
Neo4jステータスの確認
次に、すべてが期待どおりに機能していることを確認します。
root@host:~# systemctl status neo4j.service
neo4j.service - Neo4j Graph Database
Loaded: loaded (/lib/systemd/system/neo4j.service; enabled; vendor preset:>
Active: active (running) since Wed 2020-12-23 20:04:44 +03; 2min 4s ago
Main PID: 4827 (java)
Tasks: 52 (limit: 9489)
Memory: 447.9M
CGroup: /system.slice/neo4j.service
└─4827 /usr/bin/java -cp /var/lib/neo4j/plugins:/etc/neo4j:/usr/sh>
сне 23 20:04:46 host neo4j[4827]: 2020-12-23 17:04:46.101+0000 INFO ======== N>
сне 23 20:04:47 host neo4j[4827]: 2020-12-23 17:04:47.073+0000 INFO Initializi>
сне 23 20:04:47 host neo4j[4827]: 2020-12-23 17:04:47.077+0000 INFO Setting up>
сне 23 20:04:47 host neo4j[4827]: 2020-12-23 17:04:47.077+0000 INFO Creating n>
сне 23 20:04:47 host neo4j[4827]: 2020-12-23 17:04:47.083+0000 INFO Setting ve>
сне 23 20:04:47 host neo4j[4827]: 2020-12-23 17:04:47.085+0000 INFO After init>
сне 23 20:04:47 host neo4j[4827]: 2020-12-23 17:04:47.088+0000 INFO Performing>
сне 23 20:04:47 host neo4j[4827]: 2020-12-23 17:04:47.197+0000 INFO Bolt enabl>
сне 23 20:04:47 host neo4j[4827]: 2020-12-23 17:04:47.843+0000 INFO Remote int>
сне 23 20:04:47 host neo4j[4827]: 2020-12-23 17:04:47.844+0000 INFO Started.
lines 1-19/19 (END)
To exit this screen, press Ctrl + C.
It is important to have the following parameters:
Loaded: loaded (/lib/systemd/system/neo4j.service; enabled; vendor preset:>
Active: active (running) since Wed 2020-12-23 20:04:44 +03; 2min 4s ago
DB接続のテスト
Neo4jをインストールしてサービスとして開始したので、データベース接続をテストし、管理者ユーザーを構成します。
注:無料のCommunityEditionNeo4jバージョンを使用しています。同じデータベースでの同時作業をサポートしますが、ユーザーへの役割と権限の割り当ては含まれません。Neo4jの操作
データベースと対話するために、Cypher-shellと呼ばれる内部ユーティリティを起動してNeo4jを操作します。最初に実行するときに、ユーザーとパスワードの入力を求められます。デフォルトでは、ユーザー名はneo4jで、パスワードはneo4jです。最初のログイン後、パスワードを選択したものに変更するように求められます。
oot@host:~# cypher-shell
username: neo4j
password: *****
Password change required
new password: ********
Connected to Neo4j 4.1.0 at neo4j://localhost:7687 as user neo4j.
Type :help for a list of available commands or :exit to exit the shell.
Note that Cypher queries must end with a semicolon.
neo4j@neo4j>
終了するには、exitコマンドを使用します。
neo4j@neo4j> exit
Bye!
root@host:~#
ノードの追加
いくつかのサンプルノードを設定し、それらの間の関係を定義しましょう。サイファーを使用して接続する
root@host:~# cypher-shell
username: neo4j
password: ********
Connected to Neo4j 4.1.0 at neo4j://localhost:7687 as user neo4j.
Type :help for a list of available commands or :exit to exit the shell.
Note that Cypher queries must end with a semicolon.
neo4j@neo4j>
次に、Liquidwebというノードと、この会社で働いている同僚の名前をMargaretという名前で追加しましょう。これはCREATEコマンドを使用して行うことができ、構文は次のようになります。
neo4j@neo4j> CREATE (:Liquidweb {name: 'Margaret'});
0 rows available after 36 ms, consumed after another 0 ms
Added 1 nodes, Set 1 properties, Added 1 labels
neo4j@neo4j>
ユーザーの追加
さらに数人の同僚を追加して、彼らが働いている会社であるLiquidwebにリンクしましょう。 FRIENDコマンドを使用して接続します。
neo4j@neo4j> CREATE (:Liquidweb {name: 'John'})-[:FRIEND]->
(:Liquidweb {name: 'Peter'})-[:FRIEND]->
(:Liquidweb {name: 'Chris'});
0 rows available after 38 ms, consumed after another 0 ms
Added 3 nodes, Created 2 relationships, Set 3 properties, Added 3 labels
neo4j@neo4j>
関係を作成する
PeterとChrisは同じ部門で働いており、ノードと同じプロパティを持っているため、名前列との関係を作成します。
neo4j@neo4j> MATCH (a:Liquidweb),(b:Liquidweb)
WHERE a.name = 'Peter' AND b.name = 'Chris'
CREATE (a)-[r:DEPARTMENT { name: 'Developers' }]->(b)
RETURN type(r), r.name;
+------------------------+
| type(r) | r.name |
+------------------------+
| "DEPARTMENT" | "Developers" |
+------------------------+
1 row available after 105 ms, consumed after another 10 ms
Created 1 relationships, Set 1 properties
neo4j@neo4j>
- MATCH-これはノードの対応を示します。この場合、1つの会社内でLiquidweb
- 場所-値の間
- 作成-作成して追加
- RETURN-ベースに戻ります。
ここで、ジョンとクリスの間に接続を作成します。ただし、彼らは異なる部門に属していますが、同じプロジェクトに取り組んでいます。neo4j@ neo4j> MATCH(a:Liquidweb)、(b:Liquidweb)
WHERE a.name = 'John' AND b.name = 'Chris'
CREATE (a)-[r:PROJECT { name: 'Cool Project' }]->(b)
RETURN type(r), r.name;
+----------------------------+
| type(r) | r.name |
+----------------------------+
| "PROJECT" | "Cool Project" |
+----------------------------+
1 row available after 48 ms, consumed after another 5 ms
Created 1 relationships, Set 1 properties
neo4j@neo4j>
情報の表示
次に、次のクエリを使用して、このすべてのデータとそれらの関係を表示します。
neo4j@neo4j> Match (n)-[r]->(m)
Return n,r,m;
+--------------------------------------------------------------------------------------------------+
| n | r | m |
+--------------------------------------------------------------------------------------------------+
| (:Liquidweb {name: "John"}) | [:FRIEND] | (:Liquidweb {name: "Peter"}) |
| (:Liquidweb {name: "John"}) | [:PROJECT {name: "Cool Project"}] | (:Liquidweb {name: "Chris"}) |
| (:Liquidweb {name: "Peter"}) | [:DEPARTMENT {name: "Developers"}] | (:Liquidweb {name: "Chris"}) |
| (:Liquidweb {name: "Peter"}) | [:FRIEND] | (:Liquidweb {name: "Chris"}) |
+--------------------------------------------------------------------------------------------------+
4 rows available after 17 ms, consumed after another 2 ms
neo4j@neo4j>
DEPARTMENTとPROJECTの関係と次のデータ関係を示す次のFRIEND関係の出力データを受け取りました。
サイファーシェルを終了するには、exitコマンドを実行します。
neo4j@neo4j> :exit
Bye!
root@host:~#
Neo4jへの安全なリモート接続を設定する
サーバー自体からデータベースに接続できるとは限りません。 Neo4jを使用するようにアプリケーションを構成する場合は、他のサーバーに安全に接続するようにアプリケーションを構成する必要があります。また、Neo4jに接続できるサーバーを制限するためにファイアウォールを構成する必要があります。
デフォルトでは、Neo4jはローカルホストを介して接続します(127.0.0.1-ローカルホスト-他のサーバーと連携せずにアプリケーションをテストすることを目的としています)。また、ローカルホストからのNeo4jの作業は、インターネットへのパブリックアクセスに公開されません。ローカルネットワークにアクセスできるユーザーのみがNeo4jに接続できます。
Neo4jを構成する
Neo4jを他のサーバーに接続するには、構成ファイル /etc/neo4j/neo4j.confの設定を変更する必要があります。 。このタスクにはnanoエディターを使用します。 rootでない場合は、sudoコマンドを使用することを忘れないでください。
root@host:~# nano /etc/neo4j/neo4j.conf
root@host:~#
ネットワークコネクタセクションで回線を見つけます
#dbms.default_listen_address=0.0.0.0
#記号を削除してこの行のコメントを解除し、Ctrl+SおよびCtrl+Xを押して保存し、エディターを終了します。
0.0.0.0の値は、Neo4jを使用可能なすべてのIPv4ネットワークインターフェイスにバインドします。サーバーがデータパスとして使用する特定のIPアドレスまたはネットワークを配置できます。 IPv6インターフェースを使用するように構成することもできますが、その設定には多くのニュアンスがあります。公式ウェブサイトのドキュメントを読むことをお勧めします。
リモート接続用のファイアウォールの構成
リモート接続用にNeo4jソフトウェアを構成するには、ファイアウォールを構成する必要があります。信頼できるシステムのみが接続できるように、アクセスを制限します。この場合、デフォルトのUbuntuファイアウォールであるUFWを使用します。
次に、ファイアウォールがアクティブになっているかどうかを確認する必要があります。アクティブでない場合は、有効にする必要があります。
root@host:~# ufw enable
Firewall is active and enabled on system startup
root@host:~#
Neo4jは、ソフトウェアのインストール時に2つのネットワークソケットを作成します。 1つはHTTPインターフェイス用のポート7474に、もう1つはポート7687のプライマリプロトコル用です。Neo4jはポート7687の使用を推奨しています。ポートを開くコマンドは、IPv4アドレスを許可するために使用される次のコマンドと同様です。
ufw allow from YOUR_IP to any port 7687 proto tcp
YOUR_IP - Use an IP here to provide access permission. If you want to allow access to the entire local network, use the following rule:
ufw allow from 192.168.50.0/16 to any port 7687 proto tcp
特定のネットワーク範囲を入力して、ポートを開きます。 IPv6アドレスの場合、コマンドは次のようになります。
ufw allow from fe80::1006:f7a3:b9cc:b0cb to any port 7687 proto tcp
上記のIPは例として使用されます。値を置き換えてルールを追加します。
root@host:~# ufw allow from 192.168.50.189 to any port 7687 proto tcp
Rule added
root@host:~#
ファイアウォールを再起動
必ずファイアウォールを再起動してください。
root@host:~# ufw reload
Firewall reloaded
root@host:~#
接続の確認
それでは、正しく機能しているかどうかを確認しましょう。
root@host:~# ufw status
Status: active
To Action From
-- ------ ----
7687/tcp ALLOW 192.168.50.189
root@host:~#
これで、すぐに使用できるNeo4jサーバーが稼働し、ポート7687でのアクセスを許可するように構成されました。
結論
Neo4jグラフィカルデータベースに会い、それがどのように機能し、なぜそれが必要なのかを学びました。パッケージマネージャーをセットアップしてから、Neo4jをインストールします。次に、機能を確認して調べ、パスワードを変更しました。テーブルの作成方法、リレーションシップの作成方法、およびノードの設定方法に関する基本的なコマンドを試しました。最後に、必要なIPへの接続を構成し、セキュリティのためにファイアウォールを構成しました。