Help us understand the problem. What is going on with this article?

neo4jさわってみた

More than 1 year has passed since last update.

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

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

ノード

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

リレーション

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

プロパティ

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

世界は表構造であらわすことは不可能ではないが、関係性をあらわすことに関して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がかっこいいので使っていておもしろい

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away