序章

Neo4j は、データノード間の関係を記録するグラフデータベースですが、従来のリレーショナルデータベースは、行と列を使用してデータを格納および構造化します。 各ノードは、接続されている他のすべてのノードへの参照を格納するため、Neo4jは、最小限のオーバーヘッドで複雑な関係をエンコードおよび照会できます。

前提条件

このチュートリアルに従うには、次のものが必要です。

ステップ1—Neo4jをインストールする

公式のUbuntuパッケージリポジトリには、Neo4jデータベースエンジンのコピーは含まれていません。 Neo4jからアップストリームでサポートされているパッケージをインストールするには、Neo4jからGPGキーを追加して、パッケージのダウンロードが有効であることを確認する必要があります。 次に、Neo4jソフトウェアリポジトリを指す新しいパッケージソースを追加し、最後にパッケージをインストールします。

開始するには、次の出力をダウンロードしてパイプします curl にコマンド gpg --dearmor 指図。 この手順では、ダウンロードしたキーを次の形式に変換します apt パッケージの検証に使用できます:

  1. curl -fsSL https://debian.neo4j.com/neotechnology.gpg.key |sudo gpg --dearmor -o /usr/share/keyrings/neo4j.gpg

次に、Neo4j4.1リポジトリをシステムのAPTソースに追加します。

  1. echo "deb [signed-by=/usr/share/keyrings/neo4j.gpg] https://debian.neo4j.com stable 4.1" | sudo tee -a /etc/apt/sources.list.d/neo4j.list

The [signed-by=/usr/share/keyrings/neo4j.gpg] ファイルの一部は指示します apt ダウンロードしたキーを使用して、neo4jパッケージのリポジトリとファイル情報を確認します。

次のステップは、パッケージリストを更新してから、Neo4jパッケージとそのすべての依存関係をインストールすることです。 この手順では、互換性のあるJavaパッケージをダウンロードしてインストールするため、次のように入力できます。 Y いつ apt コマンドにより、すべての依存関係をインストールするように求められます。

  1. sudo apt update
  1. sudo apt install neo4j

インストールプロセスが完了すると、Neo4jが実行されているはずです。 ただし、システムの再起動時に開始するようには設定されていません。 したがって、最後のセットアップ手順は、サービスとして有効にしてから開始することです。

  1. sudo systemctl enable neo4j.service

まだ実行されていない場合は、サービスを開始します。

  1. sudo systemctl start neo4j.service

これらの手順をすべて完了したら、Neo4jのステータスを systemctl 指図:

  1. sudo systemctl status neo4j.service

次のような出力が必要です。

Output
● neo4j.service - Neo4j Graph Database Loaded: loaded (/lib/systemd/system/neo4j.service; enabled; vendor preset: enabled) Active: active (running) since Fri 2022-04-29 15:01:36 UTC; 2s ago Main PID: 2053 (java) Tasks: 40 (limit: 38383) Memory: 658.1M CGroup: /system.slice/neo4j.service . . .

他の冗長な出力行がありますが、注意すべき重要な点は強調表示されています enabledrunning 行。 Neo4jをインストールして実行したら、次の一連の手順に進むことができます。この手順では、Neo4jへの接続、資格情報の構成、およびデータベースへのノードの挿入について説明します。

ステップ2—Neo4jへの接続と構成

Neo4jがインストールされ、再起動後に実行するように構成されたので、データベースへの接続をテストし、管理者の資格情報を構成できます。

コマンドラインでNeo4jを操作するには、 cypher-shell 効用。 次のようなユーティリティを呼び出します。

  1. cypher-shell

シェルを最初に呼び出すときは、デフォルトの管理者を使用してログインします neo4j ユーザーと neo4j パスワードの組み合わせ。 認証されると、Neo4jは管理者パスワードを変更するように促します。

cypher-shell prompt
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>

この例では、強調表示されています ******************** 新しいパスワードのマスクされたバージョンです。 強力で覚えやすいパスワードを選択し、安全な場所に記録してください。 パスワードを設定すると、インタラクティブに接続されます neo4j@neo4j> ノードを挿入してクエリすることにより、Neo4jデータベースと対話できるプロンプトが表示されます。

:Neo4jのCommunity Editionは、一度に1つのデータベースの実行をサポートします。 さらに、コミュニティバージョンには、ユーザーに役割と権限を割り当てる機能が含まれていないため、これらの手順はこのチュートリアルには含まれていません。 Neo4jのCommunityEditionでサポートされているさまざまな機能の詳細については、Neo4jのドキュメントはこちらを参照してください。

管理者パスワードを設定し、Neo4jへの接続をテストしたので、終了します。 cypher-shell 次のように入力してプロンプトを表示します :exit:

  1. :exit

次に、オプションで、リモート接続を受け入れるようにNeo4jを構成できます。

ステップ3(オプション)—リモートアクセス用にNeo4jを構成する

複数のサーバーを使用するより大きなアプリケーションまたは環境にNeo4jを組み込みたい場合は、他のシステムからの接続を受け入れるように構成する必要があります。 このステップでは、リモート接続を許可するようにNeo4jを構成します。また、ファイアウォールルールを追加して、Neo4jサーバーに接続できるシステムを制限します。

デフォルトでは、Neo4jはからの接続を受け入れるように構成されています localhost それだけ (127.0.0.1 のIPアドレスです localhost). この構成により、Neo4jサーバーがパブリックインターネットに公開されず、ローカルシステムにアクセスできるユーザーのみがNeo4jと対話できるようになります。

Neo4jが使用するネットワークソケットを変更するには localhost 他のシステムが使用できるものにするには、編集する必要があります /etc/neo4j/neo4j.conf ファイル。 好みのエディターで構成ファイルを開き、 dbms.default_listen_address 設定。 次の例では、 nano ファイルを編集するには:

  1. sudo nano /etc/neo4j/neo4j.conf

コメントアウトされたものを見つけます #dbms.default_listen_address=0.0.0.0 線を引き、先頭を削除してコメントを解除します # コメント文字。

/etc/neo4j/neo4j.conf
. . .
#*****************************************************************
# Network connector configuration
#*****************************************************************

# With default configuration Neo4j only accepts local connections.
# To accept non-local connections, uncomment this line:
dbms.default_listen_address=0.0.0.0
. . .

デフォルトでは、値 0.0.0.0 Neo4jをシステムで利用可能なすべてのIPv4インターフェースにバインドします。 localhost. Neo4jを特定のIPアドレス(サーバーがデータパスに使用するプライベートネットワークIPなど)に制限する場合は、サーバーのプライベートネットワークインターフェイスに割り当てられているIPアドレスをここで指定します。

IPv6インターフェースを使用するようにNeo4jを構成することもできます。 IPv4と同様に、 default_listen_address Neo4jとの通信に使用する特定のIPv6アドレスの値。 サーバーのローカルIPv6アドレスのみを使用するようにNeo4jを制限する場合は、次のように指定します ::1、に対応します localhost IPv6表記を使用します。

Neo4jが接続に使用するデフォルトのIPアドレスの構成が完了したら、保存して閉じます neo4j.conf. 使用している場合 nano、を押すことでそうすることができます CTRL+X、 に続く Y その後 ENTER.

:IPv6アドレスを使用してNeo4jを構成すると、Neo4jに接続できなくなります。 cypher-shell IPv6アドレスを直接使用します。 代わりに、IPv6アドレスに解決されるDNS名を構成するか、リモートシステムのエントリを追加する必要があります。 /etc/hosts アドレスを名前にマップするファイル。 これで、DNSまたはhostsファイル名を使用して、リモートシステムからIPv6を使用してNeo4jに接続できるようになります。

たとえば、次のようなIPv6アドレスを持つNeo4jサーバー 2001:db8::1 リモート接続システムには、 /etc/hosts 次のようなエントリ、強調表示された代わりに名前を使用 your_hostname:

/ etc / hosts
. . .
2001:db8::1 your_hostname

次に、次のように指定した名前を使用して、リモートシステムからサーバーに接続します。

  1. cypher-shell -a 'neo4j://your_hostname:7687'

Neo4jがIPv6を使用するように制限する場合 localhost の住所 ::1、次に、事前構成されたものを使用して、Neo4jサーバー自体でローカルに接続できます ip6-localhost あなたからの名前 /etc/hosts このようなファイル:

  1. cypher-shell -a 'neo4j://ip6-localhost:7687'

呼び出したら cypher-shell 接続URIを使用すると、通常どおりユーザー名とパスワードの入力を求められます。

リモート接続を許可するようにNeo4jを構成したので、信頼できるシステムのみが接続できるようにリモートアクセスを制限することが重要です。 Neo4jへのリモートアクセスを制限するには、UbuntuのデフォルトのUFWファイアウォールを使用できます。 前提条件Ubuntu22.04チュートリアルを使用した初期サーバーセットアップに従った場合、UFWはすでにインストールされており、サーバーで使用できるようになっています。

Neo4jは、デフォルトのインストールで2つのネットワークソケットを作成します。1つは組み込みのHTTPインターフェイス用のポート7474に、もう1つはポート7687にメインのボルトプロトコルです。 Neo4jは、本番環境でHTTPポートを使用しないことを推奨しているため、ポート7687に対してのみファイアウォールルールを作成します。

信頼できるリモートホストが bolt IPv4を使用するインターフェースの場合、次のコマンドを入力します。

UFWIPv4シングルホストの例
  1. sudo ufw allow from 203.0.113.1 to any port 7687 proto tcp

強調表示された203.0.113.1値の代わりに、Neo4jへのアクセスに使用する信頼できるリモートシステムのIPアドレスに置き換えます。

プライベート管理やデータパスネットワークなど、ネットワーク範囲全体へのアクセスを許可する場合は、次のようなルールを使用します。

UFWIPv4ネットワークの例
  1. sudo ufw allow from 192.0.2.0/24 to any port 7687 proto tcp

ここでも、強調表示された 192.0.2.0/24 ネットワークの代わりに、Neo4jにアクセスしたいネットワークに置き換えます。

ホストがIPv6を使用してNeo4jにリモートでアクセスできるようにする場合は、次のようなルールを追加します。

UFWIPv6シングルホストの例
  1. sudo ufw allow from 2001:DB8::1/128 to any port 7687 proto tcp

強調表示されている代わりに、信頼できるシステムのIPv6アドレスを使用してください 2001:DB8::1/128 住所。

IPv4と同様に、Neo4jサーバーへのさまざまなIPv6アドレスのアクセスを許可することもできます。 これを行うには、次のようなUFWルールを作成します。

UFWIPv6シングルホストの例
  1. sudo ufw allow from 2001:DB8::/32 to any port 7687 proto tcp

強調表示されたものの代わりに、信頼できるネットワーク範囲で再度置き換えます 2001:DB8::/32 ネットワーク範囲。

ネットワーク構成と信頼できるホストまたはネットワークに適切なUFWルールを作成したら、UFWを有効にしてルールを有効にします。

  1. sudo ufw reload

現在ロードされているUFWルールは、 ufw status 指図。 これを実行して、指定したアドレスまたはネットワークがポート7687でNeo4jにアクセスできることを確認します。

  1. sudo ufw status

次のような出力が必要です。

Output
Status: active To Action From -- ------ ---- 22/tcp ALLOW Anywhere 22/tcp (v6) ALLOW Anywhere (v6) 7687/tcp ALLOW 203.0.113.1

これで、信頼できるリモートサーバーまたはネットワークへのポート7687でのアクセスを許可するように構成されたNeo4jサーバーができました。 このチュートリアルの次のセクションでは、データベースへのノードの追加と、ノード間の関係を定義する方法について学習します。

ステップ4—Neo4jを使用する

Neo4jの使用を開始するには、いくつかのサンプルノードを追加してから、それらの間の関係を定義しましょう。 を使用してNeo4jに接続します cypher-shell.

  1. cypher-shell

:[ステップ3(オプション)—リモートアクセス用のNeo4jの構成](ステップ-3-optional-configuring-neo4j-for-remote-access]でリモートアクセスを許可するようにNeo4jを構成した場合は、 Neo4jサーバーのアドレスに対応するURI。 たとえば、Neo4jサーバーのIPが 203.0.113.1、次に、リモートシステムから次のように接続します。

  1. cypher-shell -a 'neo4j://203.0.113.1:7687'

通常どおり、ユーザー名とパスワードの入力を求められます。

IPv6を使用している場合は、 /etc/hosts 手順3で説明した名前のエントリ。 次に、リモートシステムからNeo4jサーバーに接続します。 cypher-shell このようなコマンド:

  1. cypher-shell -a 'neo4j://your_hostname:7687'

繰り返しますが、強調表示されていることを確認してください your_hostname リモートシステムのNeo4jサーバーのIPv6アドレスにマップします /etc/hosts ファイル。

ユーザー名とパスワードを使用してNeo4jにログインすると、ノードと関係をデータベースに照会して追加できます。

開始するには、Neo4jにホオジロザメノードを追加します。 次のコマンドは、タイプのノードを作成します Shark、名前付き Great White.

  1. CREATE (:Shark {name: 'Great White'});

各コマンドの後に、次のような出力が表示されます。

Output
0 rows available after 3 ms, consumed after another 0 ms Added 1 nodes, Set 1 properties, Added 1 labels

:次のそれぞれの完全な説明 cypher クエリはこのチュートリアルの範囲を超えています。 の構文の詳細については cypher クエリ言語については、 Neo4j CypherManualを参照してください。

次に、サメをさらに追加し、と呼ばれる関係を使用してそれらを関連付けます FRIEND. Neo4jを使用すると、ノードを任意の名前の関係に関連付けることができます。 FRIEND 使用したい関係のラベルは何でもかまいません。

次の例では、3つのサメを追加し、次のような関係を使用してそれらをリンクします。 FRIEND:

  1. CREATE
  2. (:Shark {name: 'Hammerhead'})-[:FRIEND]->
  3. (:Shark {name: 'Sammy'})-[:FRIEND]->
  4. (:Shark {name: 'Megalodon'});

3つの新しいサメがデータベースに追加されたことを示す出力を受け取るはずです。

Output
. . . Added 3 nodes, Created 2 relationships, Set 3 properties, Added 3 labels

Neo4jを使用すると、関係に任意の名前を使用してノードを関連付けることができるため、既存のノードに加えて FRIEND 関係、サミーとメガロドンも階級を使用して関連付けることができます。

サミーとメガロドンは、ネズミザメの共通の順序を共有しています。 リレーションシップはノードと同じようにプロパティを持つことができるため、 ORDER との関係 name に設定されているプロパティ Lamniformes サミーとメガロドンの関係の1つを説明するのに役立ちます:

  1. MATCH (a:Shark),(b:Shark)
  2. WHERE a.name = 'Sammy' AND b.name = 'Megalodon'
  3. CREATE (a)-[r:ORDER { name: 'Lamniformes' }]->(b)
  4. RETURN type(r), r.name;

その関係を追加すると、次のような出力が得られます。

Output
+-------------------------+ | type(r) | r.name | +-------------------------+ | "ORDER" | "Lamniformes" | +-------------------------+ 1 row available after 2 ms, consumed after another 7 ms Created 1 relationships, Set 1 properties

次に、 SUPERORDER サメとシュモクザメの分類学的上目であるSelachimorphaに基づく関係。 繰り返しますが、関係には name に設定されているプロパティ Selachimorpha:

  1. MATCH (a:Shark),(b:Shark)
  2. WHERE a.name = 'Sammy' AND b.name = 'Hammerhead'
  3. CREATE (a)-[r:SUPERORDER { name: 'Selachimorpha'}]->(b)
  4. RETURN type(r), r.name;

ここでも、関係のタイプを示す出力と、関係を説明するために追加された名前が表示されます。

Output
+--------------------------------+ | type(r) | r.name | +--------------------------------+ | "SUPERORDER" | "Selachimorpha" | +--------------------------------+ 1 row available after 2 ms, consumed after another 8 ms Created 1 relationships, Set 1 properties

最後に、これらすべてのノードと関係が定義され、Neo4jに格納されている状態で、次のクエリを使用してデータを調べます。

  1. MATCH (a)-[r]->(b)
  2. RETURN a.name,r,b.name
  3. ORDER BY r;

次のような出力を受け取るはずです。

Output
+---------------------------------------------------------------------+ | a.name | r | b.name | +---------------------------------------------------------------------+ | "Hammerhead" | [:FRIEND] | "Sammy" | | "Sammy" | [:FRIEND] | "Megalodon" | | "Sammy" | [:ORDER {name: "Lamniformes"}] | "Megalodon" | | "Sammy" | [:SUPERORDER {name: "Selachimorpha"}] | "Hammerhead" | +---------------------------------------------------------------------+ 4 rows available after 72 ms, consumed after another 1 ms

出力には、 FRIEND シュモクザメ、サミー、メガロドンの間で定義された関係、および ORDERSUPERORDER 分類学的関係。

Neo4jデータベースへのノードと関係の追加と調査が終了したら、次のように入力します。 :exit 離れるコマンド cypher-shell.

結論

これで、サーバー上のNeo4jにデータがインストール、構成、および追加されました。 また、オプションで、リモートシステムからの接続を受け入れるようにNeo4jを構成し、UFWを使用して保護しました。

Neo4jと cypher クエリ言語については、公式のNeo4jドキュメントを参照してください。