グラフデータベース「Neo4j」の 導入の導入

66
グラフデータベース「Neo4j」の 導入の導入 @who_you_me 第3回 「はじめてのパターン認識」 読書会 2013/07/16 An Introductory Introduction to a Graph Database - Neo4j

Transcript of グラフデータベース「Neo4j」の 導入の導入

Page 1: グラフデータベース「Neo4j」の 導入の導入

グラフデータベース「Neo4j」の導入の導入

@who_you_me第3回 「はじめてのパターン認識」 読書会

2013/07/16

An Introductory Introduction to a Graph Database - Neo4j

Page 2: グラフデータベース「Neo4j」の 導入の導入

お前誰よ

Twitter: @who_you_me

職業: 某ISPではたらくネットワークエンジニア

好きな言語: Python

最近好きになってきた言語: Ruby

興味がある言語: Haskell

はじパタの前身の前身(?)「TokyoSNA」主催

Page 3: グラフデータベース「Neo4j」の 導入の導入

お前誰よ

Twitter: @who_you_me

職業: 某ISPではたらくネットワークエンジニア

好きな言語: Python

最近好きになってきた言語: Ruby

興味がある言語: Haskell

はじパタの前身の前身(?)「TokyoSNA」主催

(すべての元凶!?)

Page 4: グラフデータベース「Neo4j」の 導入の導入

前提

・グラフDBというものがこの世に存在すること

・グラフDBってざっくりこんな感じだよ、ってこと

以上2点を知ってもらうことが目的です。

高度な話はしません(というか、できません)。

Page 5: グラフデータベース「Neo4j」の 導入の導入

はじめに

Page 6: グラフデータベース「Neo4j」の 導入の導入

はじパタは、ATNDを使っています

Page 7: グラフデータベース「Neo4j」の 導入の導入

2013年7月現在

12,000イベント90,000ユーザー

270,000の「参加データ」(一人平均3イベントに参加)

Page 8: グラフデータベース「Neo4j」の 導入の導入

はじパタ参加者なら、

「このデータ使って、何か面白いことできそう」

って思うよね?

Page 9: グラフデータベース「Neo4j」の 導入の導入

幸いにして、

ATNDはAPIを提供しているので、

ガシガシ叩きまくれば全データ取ってこれます(リクルートさんごめんなさい、、、)

Page 10: グラフデータベース「Neo4j」の 導入の導入

Page 11: グラフデータベース「Neo4j」の 導入の導入

みなさん

Page 12: グラフデータベース「Neo4j」の 導入の導入

取ってきたデータ、

どうやって保存しますか?

Page 13: グラフデータベース「Neo4j」の 導入の導入

DBに入れますよね?

Page 14: グラフデータベース「Neo4j」の 導入の導入

どのDB使いますか?

Page 15: グラフデータベース「Neo4j」の 導入の導入

DBの選択肢

・信頼と実績のRDB

・新進気鋭のNoSQL

Page 16: グラフデータベース「Neo4j」の 導入の導入

DBの選択肢

・信頼と実績のRDB

・新進気鋭のNoSQL

・第三の選択肢、GraphDB

Page 17: グラフデータベース「Neo4j」の 導入の導入

1. GraphDBってなに?

Page 18: グラフデータベース「Neo4j」の 導入の導入

・リレーショナル

・ドキュメント指向

・列指向

・KVS (Key-Value Store)

・グラフ

これらの違いってなに?

Page 19: グラフデータベース「Neo4j」の 導入の導入

「現実をどうやってモデル化するか」

その方法に各DBの違いがあります

Page 20: グラフデータベース「Neo4j」の 導入の導入

RDBならこうやってモデル化

あってるよね、、、?

Page 21: グラフデータベース「Neo4j」の 導入の導入

ドキュメント指向ならこうやってモデル化

{ "title": "第3回 「はじめてのパターン認識」 読書会", "accepted": 36, "limit": 50, "waiting": 0, "event_id": 41119, "event_url": "http://atnd.org/events/41119", "users": [ { "nickname": "Prunus1350", "status": 1, "user_id": 120155, "twitter_id": "Prunus1350" }, { "nickname": "millionsmile", "status": 1, "user_id": 75357, "twitter_id": "millionsmile" }, { "nickname": "kmiyachi1024", "status": 1, "user_id": 35283, "twitter_id": "kmiyachi1024" }, ......},

{ "title": "日本Androidの会秋葉原支部ロボット部 第16回勉強会", "accepted": 10, "limit": 15, "waiting": 0, "event_id": 41118, ......},

......

Page 22: グラフデータベース「Neo4j」の 導入の導入

うーん、、、

Page 23: グラフデータベース「Neo4j」の 導入の導入

これって、

既に訓練されてしまっている

我々ならともかく

Page 24: グラフデータベース「Neo4j」の 導入の導入

おばあちゃんが見て

理解できるかな?

Page 25: グラフデータベース「Neo4j」の 導入の導入

コンピューターおばあちゃんなら別ですが、、、

Page 26: グラフデータベース「Neo4j」の 導入の導入

event_id: 41119title: はじパタ第三回

event_id: 29767title: TokyoSNA #1

こうやって、イベントがあって

Page 27: グラフデータベース「Neo4j」の 導入の導入

event_id: 41119title: はじパタ第三回

event_id: 29767title: TokyoSNA #1

user_id: 120155nickname: Prunus1350

user_id: 104457nickname: who_you_me

user_id: 75357nickname: millionsmile

ユーザーがいて

Page 28: グラフデータベース「Neo4j」の 導入の導入

event_id: 41119title: はじパタ第三回

event_id: 29767title: TokyoSNA #1

user_id: 120155nickname: Prunus1350

user_id: 104457nickname: who_you_me

user_id: 75357nickname: millionsmile

参加status: 1 参加

status: 1

参加status: 1 参加

status: 1 参加status: 1

参加してるイベントには、

線を引っ張る

Page 29: グラフデータベース「Neo4j」の 導入の導入

event_id: 41119title: はじパタ第三回

event_id: 29767title: TokyoSNA #1

user_id: 120155nickname: Prunus1350

user_id: 104457nickname: who_you_me

user_id: 75357nickname: millionsmile

参加status: 1 参加

status: 1

参加status: 1 参加

status: 1 参加status: 1

この方が直観的で理解しやすいですよね?

Page 30: グラフデータベース「Neo4j」の 導入の導入

そうです!

Page 31: グラフデータベース「Neo4j」の 導入の導入

データをこうやって、

頂点(node)と辺(relation)で

モデル化するのが

Page 32: グラフデータベース「Neo4j」の 導入の導入

GraphDBです!

Page 33: グラフデータベース「Neo4j」の 導入の導入

event_id: 41119title: はじパタ第三回

user_id: 120155nickname: Prunus1350

参加status: 1

node(vertex)(entity)

relation(edge)(link)

property

・node

・node間の関係を表すrelation

・node, relationそれぞれにkey-valueで属性を付与するproperty

GraphDBの三要素

Page 34: グラフデータベース「Neo4j」の 導入の導入

2. それって何がうれしいの?

Page 35: グラフデータベース「Neo4j」の 導入の導入

データの表現が直観的(まあ、何が直観的かは人によるけどね、、、)

Page 36: グラフデータベース「Neo4j」の 導入の導入

グラフのtraverseが

直観的に書ける&早い

Page 37: グラフデータベース「Neo4j」の 導入の導入

traverseって何

Page 38: グラフデータベース「Neo4j」の 導入の導入

http://www.alc.co.jp/

Page 39: グラフデータベース「Neo4j」の 導入の導入

要は、グラフを走りまわって

何かを見つけること

Page 40: グラフデータベース「Neo4j」の 導入の導入

例1 六次の隔たり

「友達の友達」を6回たどると、

世界中の誰にでも届くらしい!

・スモールワールド実験

・エルデシュ数

・ケビン・ベーコン数

・etc...

Page 41: グラフデータベース「Neo4j」の 導入の導入

例2 乗り換え案内

新宿駅から押上駅へはどう行けばいい?http://www.tokyometro.jp/station/common/pdf/network1.pdf

Page 42: グラフデータベース「Neo4j」の 導入の導入

どちらも、最短経路を求める問題

Page 43: グラフデータベース「Neo4j」の 導入の導入

RDBやNoSQLの場合、

SQLやMapReduceだけで解くのは

困難なため、

Page 44: グラフデータベース「Neo4j」の 導入の導入

アルゴリズムはプログラムに任せる

ことになると思います

Rならigraph

PythonならNetworkX

Page 45: グラフデータベース「Neo4j」の 導入の導入

メモリに載り切らないぐらい

大量のデータだったらどうする、、、?

Page 46: グラフデータベース「Neo4j」の 導入の導入

Giraphっていうフレームワークが

Hadoop上で使えるらしい!

Page 47: グラフデータベース「Neo4j」の 導入の導入

一方で、Neo4jはDBの機能で

最短経路を求めることができます

Page 48: グラフデータベース「Neo4j」の 導入の導入

ベンチマークした方がいました

Page 49: グラフデータベース「Neo4j」の 導入の導入

http://tech-sketch.jp/2013/02/neo4j.html

Page 50: グラフデータベース「Neo4j」の 導入の導入

圧倒的じゃないか、我が軍は

Page 51: グラフデータベース「Neo4j」の 導入の導入

もひとつおまけ

Page 52: グラフデータベース「Neo4j」の 導入の導入

「友達の友達」、「友達の友達の友達」、、、

をひたすら求める処理をRDBと比較

Page 53: グラフデータベース「Neo4j」の 導入の導入

あえて言おう、カ○であると!

Page 54: グラフデータベース「Neo4j」の 導入の導入

早いのはわかったけど

「直観的に書ける」のは本当かよ

Page 55: グラフデータベース「Neo4j」の 導入の導入

本当です

Page 56: グラフデータベース「Neo4j」の 導入の導入

そう、Cypherならね

Page 57: グラフデータベース「Neo4j」の 導入の導入

クエリ言語Cypher

アスキーアートとパターンマッチによりグラフ

を探索できるクエリ言語

例えば、自分(who_you_me)とPrunus1350さん

が共通に出席した勉強会を探したければ、、、

Page 58: グラフデータベース「Neo4j」の 導入の導入

START who_you_me = node:users(user_id="104457"), prunus = node:users(user_id="120155")MATCH (who_you_me) -[:ATTENDS]-> (event), (prunus) -[:ATTENDS]-> (event)RETURN event

Page 59: グラフデータベース「Neo4j」の 導入の導入

なかなかよさげじゃないですか?

Page 60: グラフデータベース「Neo4j」の 導入の導入

デモ

Page 61: グラフデータベース「Neo4j」の 導入の導入

PCにNeo4jインストールして、

ATNDの全データ入れてみたので、

実際に見てみましょう

Page 62: グラフデータベース「Neo4j」の 導入の導入

参考文献

Page 63: グラフデータベース「Neo4j」の 導入の導入

『7つのデータベース 7つの世界』

Page 64: グラフデータベース「Neo4j」の 導入の導入

『Graph Databases』

Page 65: グラフデータベース「Neo4j」の 導入の導入

『Neo4j in Action』

Page 66: グラフデータベース「Neo4j」の 導入の導入

以上、ご清聴ありがとうございました!