Neo4jの概要、Cypher(サイファー)の書き方

Neo4jの概要

Neo4jの概要をまとめます。Neo4jは Java で記述された グラフ型DB です。NoSQLに分類され、オブジェクト間の関係性を表現するのが得意です。ACIDトランザクションに完全準拠しています。ライブラリも豊富にそろっており、Java や Python、Ruby からも扱うことが出来ます。さらにREST APIもあり、Shellでも操作が可能です。

これらに加えてグラフDBの中でも扱いやすいことがあり、グラフDBのシェアでは圧倒的トップシェアを誇っています。TISのマイグレーションサービス Xenlon でもGOTO分の解析に使用されているそうです。

グラフ型DBなので、ノードとリレーションから成ります。詳細は次のとおりです。

ノード

ノードは識別子、ラベル、属性の3つの要素で構成されます。識別子はノードを一意に識別するためのIDです。ラベルはノードに付けられるタグのようなもので、同じラベルを持つノードは同じ種類のものとして扱われます。属性はノードに関する情報を表すキーと値のペアであり、プロパティとも呼ばれます。

リレーション

リレーションシップはノード同士を関連付けるために使用され、エッジと呼ばれます。リレーションシップは、タイプ、メソッド、プロパティの3つの要素を持っています。タイプは、リレーションシップの種類を表します。メソッドは、リレーションシップの構成方法を表します。指向性の有無、単方向、双方向などです。プロパティは、リレーションシップの情報を表すキーと値のペアを表します。キーは任意に決められます。

Cypher(サイファー)の書き方

Neo4jはSQLでなくCypher(サイファー)を使用します。Cypherの書き方は次のとおりです。

  • ()の中にノードを記載します。内容は、識別子:ラベル(ノード名) です。
  • {}の中に属性を記載します。内容は、属性:属性値 です。,で繋ぐことで複数の属性を設定できます。idという属性はデフォルトで付与されます。
  • []の中にリレーションを記載します。内容は、()-[]-()でパスを記載できます。
  • ()<-[]-()で方向を持ったパスを記載します。無方向はサポートされていません。双方向はリレーションが重複するため推奨されていません。

サンプル実行

:play movie graph

これで映画のサンプルデータを扱えるようになります。

MATCH (actor:Person {name:'Keanu Reeves'})-[r:ACTED_IN]->(movie)
RETURN actor,movie

MATCH (actor:Person {name:'Keanu Reeves'})-[r:ACTED_IN]->(movie)
RETURN actor.name,movie.title

CypherでCRUDする方法はこちらの記事をどうぞ

Cypher(サイファー)でCRUDする方法
Neo4jのCypher(サイファー)でCRUDする方法をご紹介します。 作成(Create) CREATE でノード、リレーシ...