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する方法はこちらの記事をどうぞ