LoginSignup
1
1

More than 3 years have passed since last update.

neo4jさわってみた

Posted at

グラフ・データベースとは

「ノード」「リレーション」「プロパティ」の三要素を用いて、ノード間の関係性をあらわすデータベース

ノード

ひとつひとつのエンティティ。人だったり物だったり、とにかくエンティティ。

リレーション

エッジとも呼ばれる。どのノードがどのノードにどんな関係をもっているかをあらわす

プロパティ

ノードやリレーションの属性をあらわす。

世界は表構造であらわすことは不可能ではないが、関係性をあらわすことに関してRDBは不向き
グラフ構造であらわすと、それぞれがどのようなもので、どれとどのような関係をもっているのかが明確に

二つの処理

参照系処理

あるノードとその周辺のノードの参照
プロパティパスによる参照
などなど演算系処理

演算系処理

スコアリングやランキング
コミュニティの検出
経路検索
レコメンド(User2Itemもitem2itemも)

neo4j試してみました。

CREATE (A:Person { name: "Aさん", 出身:"福岡" })

一番オーソドックスなクエリです。これで

name: "Aさん", 出身:"福岡"
というプロパティを持つAというノードができました。

東京出身のBさんもつくります。

CREATE (B:Person { name: "Bさん", 出身:"東京" })

つぎにリレーションを追加します。

MATCH (A: Person), (B: Person)
WHERE A.name = "Aさん" AND B.name = "Bさん"
CREATE (a_san)-[r:知っている]->(b_san)
RETURN r;

AさんがBさんを知っているというリレーションが追加されました。

ノードが多くなればなるほどUIはぐちゃぐちゃになりますが、RDBよりも表現できる幅は広くなります。

例としてスレンジャーシングスの登場人物の相関図です。

image.png

まとめ

関係性が重視されるデータを扱う際にはRDBよりも優れている。(時刻表アプリやマッチングアプリなど)
思ったより参照処理(JOINとかがないから?)
UIがかっこいいので使っていておもしろい

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1