フリーランス 技術調査ブログ

フリーランス/エンジニア Ruby Python Nodejs Vuejs React Dockerなどの調査技術調査の備忘録

DockerでNeo4j環境を構築しざっくり概要を理解する

docker-compose.yaml の設定

dockerhubの公式アカウントで記載されている利用方法をもとにdocker-compse用に記述してみました。

version: '3'
services:
  neo4j:
    image: neo4j
    ports:
      - 7474:7474
      - 7687:7687
    volumes: 
      - ./neo4j/data:/data

docker-composeを利用しないで利用する場合

  • neo4jのイメージをpullする
docker pull neo4j
  • 下記のコマンドで実行する
docker run \
    --publish=7474:7474 --publish=7687:7687 \
    --volume=$HOME/neo4j/data:/data \
    neo4j

Neo4jの管理画面にアクセスする

  • localhost:7474にアクセスすると下記の画面が表示される f:id:PX-WING:20200511224510p:plain

  • デフォルトのユーザー名とパスワードは「neo4j」となっているので入力してログインしてください。 ログインには時間がかかります。

  • ログイン後は下記の画面が表示されます f:id:PX-WING:20200511225513p:plain

勉強

グラフの基礎

グラフデータベースは、いくつかの単純な概念を使用してあらゆる種類のデータを保存できます。

  • ノード-グラフデータレコード
  • 関係-ノードの接続
  • プロパティ-名前付きデータ値

グラフデータベース

  • Neo4jは、ノードと呼ばれるレコードを使用して、データをグラフに格納します。

  • 最も単純なグラフには、プロパティと呼ばれるいくつかの名前付きの値を持つ単一のノードがあります。

  • ノードはグラフのデータレコードの名前です
  • データはプロパティとして保存されます
    • プロパティは単純な名前/値のペアです

f:id:PX-WING:20200511230706p:plain

ex) 上記画像の説明

  • ノードの円を描くことから始めます
  • エミルという名前を追加
  • 彼はスウェーデン出身であることに注意してください

ラベル

  • ノードのセットを関連付けます。
  • 各メンバーにラベルを適用することにより、ノードをグループ化できます。
  • ノードには0個以上のラベルを付けることができます
    • ラベルにはプロパティがありません

f:id:PX-WING:20200511230630p:plain

ex) 上記画像の説明

  • Emil用に作成したノードに「Person」というラベルを付けます
  • 「Person」ノードの色を赤

より多くのノード

  • スキーマフリーのノードには、共通のプロパティと一意のプロパティを混在させることができます。
  • 他のデータベースと同様に、Neo4jへのデータの保存は、レコードを追加するのと同じくらい簡単です。さらにいくつかのノードを追加します。
  • プロパティは文字列、数値、またはブール値です
  • Neo4jは数十億のノードを保存できます

f:id:PX-WING:20200511230609p:plain

ex) 上記画像の説明

  • エミールのkloutスコアは99です
  • サーフィンを学んでいるスウェーデン出身のヨハン
  • 著者であるイギリス出身のイアン
  • ベルギー出身のリックは、オーヴァルという名前の猫を飼っています
  • サーフィンをするカリフォルニア出身のアリソン

関係を考慮する

  • グラフのノードを接続する
  • Neo4jの真の力は、接続されたデータにあります。任意の2つのノードを関連付けるには、レコードの関係を説明する関係を追加します。
  • 関係には常に方向性がある
  • 関係には常にタイプがあります
  • 関係はデータのパターンを形成する

f:id:PX-WING:20200511230547p:plain

ex) 上記画像の説明

  • エミルはヨハンとイアンを知っている
  • ヨハンはイアンとリックを知っている
  • リックとイアンはアリソンを知っている

関係のプロパティ

  • 2つのノードで共有される情報を保存します。
  • プロパティグラフでは、関係は、プロパティも含むことができるデータレコードです。

f:id:PX-WING:20200511231322p:plain

ex) 上記画像の説明

  • エミールの関係をさらに詳しく見ると、次のことに注意してください。
  • エミルは2001年以来ヨハンを知っています
  • EmilはIan 5を評価します(5のうち)
  • 他の誰もが同様の関係プロパティを持つことができます

次のステップ

  • プロパティグラフにはノードと関係が含まれ、両方にプロパティがあります。
  • 概念は以上です。次にCypherを利用してグラフデータベースの操作をしていく。

Neo4j Cypher

The Neo4j Cypher Manual v4.0の公式サイトとなります。

Cypherとは何ですか?

Cypherは、グラフの表現力豊かで効率的なクエリ、更新、管理を可能にする宣言型グラフクエリ言語です。開発者と運用の専門家の両方に適するように設計されています。 Cypherはシンプルでありながら強力になるように設計されています。非常に複雑なデータベースクエリを簡単に表現できるため、データベースアクセスに夢中になる代わりに、ドメインに集中できます。

Cypherは、さまざまなアプローチに触発され、表現力のあるクエリのための確立されたプラクティスに基づいています。 WHEREやORDER BYなどのキーワードの多くは、SQLに触発されています。パターンマッチングは、SPARQLから式の手法を取り入れています。リストのセマンティクスの一部は、HaskellPythonなどの言語から借用したものです。 Cypherの構成は、英語の散文ときちんとした図像に基づいており、クエリの作成と読み取りの両方が簡単です。

構造

Cypherはその構造をSQLから借用しています。クエリはさまざまな句を使用して構築されています。 句は一緒にチェーンされ、それらは互いに中間結果セットを供給します。たとえば、1つのMATCH句の一致する変数は、次の句が存在するコンテキストになります。