UbuntuVPSにNeo4Jをインストールする方法
序章
グラフとは何ですか?
グラフは、エッジで接続された頂点のセットです。 データベースの領域では、グラフはアイテムのセットであり、各アイテムはデータセット内の別のアイテムと任意のタイプの関係を持っています。
頂点とエッジとは何ですか?
- 頂点-頂点はグラフのデータポイントです。 あらゆる形式のSQLデータベースに精通している場合、頂点は行/レコードとして表示できます。 SQLに慣れていない人にとっては、頂点はデータの一部と見なすことができます。
- エッジ-エッジは、2つの異なる頂点間の関係です。 エッジはグラフデータベースでの柔軟性が高いため、SQL用語に変換するのは困難ですが、エッジは2つのデータを接続する方法と見なすことができます。
例
ソーシャルネットワークは、ほとんどの人が関係できるグラフの最良の例の1つです。 ソーシャルネットワークでは、人がいて、それぞれの人の間に関係があります。 人々は頂点として表され、関係はエッジとして表されます。 関係にはさまざまな種類があります。たとえば、既婚、友人、関係、仕事などです。 これはグラフでも同じです。 さまざまなタイプのエッジには無限の可能性があり、さまざまなタイプの頂点には無限の可能性があります。
絵の例
[[File:“%3Ca]] https://assets.digitalocean.com/articles/Neo4J_Ubuntu/1.png ”>
この図では、グラフの頂点は単なる整数であり、エッジにはラベルが付いていません。 単純さにもかかわらず、これはまだグラフです。
加重グラフ
航空会社の例では、飛行機をポイントAからポイントBに移動する場合、飛行機がたどるのに最適なパスを選択する必要があります。 空港を頂点として視覚化し、空港間の飛行経路をエッジにします。
[[File:“%3Ca]] https://assets.digitalocean.com/articles/Neo4J_Ubuntu/2.png ”>
各エッジには、それを利用するための重みまたはコストが割り当てられます。 ここで、重みは2つの空港間の距離を表します。 したがって、たとえば、上のグラフでは、LAXからORDに到達するためのコストは1749です。 加重グラフは、距離が要因となる地理データ表現で特に役立ちます。
グラフデータベース
グラフデータベースは、情報を頂点とエッジ(ノードと関係)として格納するNoSQLデータベースです。 外部キーとselectステートメントを使用するのではなく、エッジとグラフ走査を使用してデータをクエリします。 データをクエリするこの方法は、ソーシャルネットワーク、生物学、化学、ビジネス分析、およびデータがデータセット内の他のアイテムと関係のあるアイテムとして最もよく表される状況など、多くの場合に非常に強力です。
このチュートリアルでは、Neo4Jをインストールします。これは、ほとんどすべての一般的なプログラミング言語に対応する多くの言語バインディングを備えた非常に人気のあるグラフデータベースです。
Neo4Jのインストール
Neo4Jキーをaptパッケージマネージャーに追加します。
wget -O - http://debian.neo4j.org/neotechnology.gpg.key | apt-key add -
Neo4JをAptソースリストに追加します。
echo 'deb http://debian.neo4j.org/repo stable/' > /etc/apt/sources.list.d/neo4j.list
パッケージマネージャーを更新します。
apt-get update
Neo4Jをインストールします。
apt-get install neo4j
Neo4Jが実行されているはずです。 これは次のコマンドで確認できます
service neo4j-service status
Neo4JRESTfulAPIとCypherクエリ言語
Neo4Jを素晴らしいものにしていることの1つは、RESTful APIが非常に使いやすいことです。つまり、Web要求を行うことができるほぼすべてのプログラミング言語で使用できます。 Neo4Jデータベースで実行される操作の多くは、Cypherクエリを使用して実行されます。 Cypherクエリ言語は、Neo4Jがデータを操作および読み取るために使用するクエリ言語です。 SQLがMySQLに対してであるように、CypherはNeo4Jに対してです。
Neo4JRESTfulAPIへのWebリクエストの構造は次のとおりです。
curl -H "Accept: application/json; charset=UTF-8" -H "Content-Type: application/json" -X POST http://SERVERNAME:7474/db/data/cypher -d '{ "query" : "CYPHER QUERY GOES HERE", "params" : { QUERY PARAMETERS GO HERE } }'
Neo4Jにデータを追加する
Neo4Jはデータベースであり、データベースにはデータが必要なので、データを追加しましょう。
新しいノードを作成します。
curl -H "Accept: application/json; charset=UTF-8" -H "Content-Type: application/json" -X POST http://localhost:7474/db/data/cypher -d '{ "query" : "CREATE (n:Person { name : {name} }) RETURN n", "params" : { "name" : "Foo" } }'
グラフデータベースはデータをノードおよび関係として格納することを前述しました。 リレーションシップには2つのノードが必要なので、別のノードを作成しましょう。
curl -H "Accept: application/json; charset=UTF-8" -H "Content-Type: application/json" -X POST http://localhost:7474/db/data/cypher -d '{ "query" : "CREATE (n:Person { name : {name} }) RETURN n", "params" : { "name" : "Bar" } }'
これで、これら2つのノード間に関係を作成できます。
curl -H "Accept: application/json; charset=UTF-8" -H "Content-Type: application/json" -X POST http://localhost:7474/db/data/node/0/relationships -d '{ "to" : "http://localhost:7474/db/data/node/1", "type" : "Comes Before" } }'
Cypherを使用したNeo4Jのクエリ
以下は、以前に挿入したデータを表示するために使用できる暗号クエリの例です。
作成した最初のノードから開始して、接続されているすべてのノードと対応する関係を取得できます。
curl -H "Accept: application/json; charset=UTF-8" -H "Content-Type: application/json" -X POST http://localhost:7474/db/data/cypher -d '{ "query" : "MATCH (x {name: {startName}})-[r]->(n) RETURN type(r), n.name", "params" : { "startName" : "Foo" } }'
グラフ内のすべてのノードのnameプロパティを返します(注:これは大きなグラフでは実行しないでください)。
curl -H "Accept: application/json; charset=UTF-8" -H "Content-Type: application/json" -X POST http://localhost:7474/db/data/cypher -d '{ "query" : "START n = node(*) return n.name", "params" : { } }'
グラフ内のすべての関係タイプを返します(注:これは大きなグラフでは実行しないでください)。
curl -H "Accept: application/json; charset=UTF-8" -H "Content-Type: application/json" -X POST http://localhost:7474/db/data/cypher -d '{ "query" : "START r=rel(*) return type(r) ", "params" : { } }'
Neo4J RESTful APIによって提供されるメソッドのより完全な説明とリストは、 [[“%3Ca|http:]] //docs.neo4j.org/chunked/milestone/rest-api.htmlにあります。 [[“%3C/a|”>ここ]]で、Cypherクエリ言語に関する情報は[[“%3Ca|http://docs.neo4j.org/chunked/stable/cypher-query-lang.html]]にあります。 [[“%3C/a|”>ここ]]。