neo4jさわってみた
グラフ・データベースとは
「ノード」「リレーション」「プロパティ」の三要素を用いて、ノード間の関係性をあらわすデータベース
ノード
ひとつひとつのエンティティ。人だったり物だったり、とにかくエンティティ。
リレーション
エッジとも呼ばれる。どのノードがどのノードにどんな関係をもっているかをあらわす
プロパティ
ノードやリレーションの属性をあらわす。
世界は表構造であらわすことは不可能ではないが、関係性をあらわすことに関してRDBは不向き
グラフ構造であらわすと、それぞれがどのようなもので、どれとどのような関係をもっているのかが明確に
二つの処理
参照系処理
あるノードとその周辺のノードの参照
プロパティパスによる参照
などなど演算系処理
演算系処理
スコアリングやランキング
コミュニティの検出
経路検索
レコメンド(User2Itemもitem2itemも)
neo4j試してみました。
CREATE (A:Person { name: "Aさん", 出身:"福岡" })
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よりも表現できる幅は広くなります。
例としてスレンジャーシングスの登場人物の相関図です。
まとめ
関係性が重視されるデータを扱う際にはRDBよりも優れている。(時刻表アプリやマッチングアプリなど)
思ったより参照処理(JOINとかがないから?)
UIがかっこいいので使っていておもしろい
Author And Source
この問題について(neo4jさわってみた), 我々は、より多くの情報をここで見つけました https://qiita.com/key_sleep/items/14c35f6bd68b462d6299著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .