Submit Search
グラフデータベース「Neo4j」の 導入の導入
•
60 likes
•
20,890 views
Hisao Soyama
Follow
1 of 66
Download now
Downloaded 161 times
More Related Content
グラフデータベース「Neo4j」の 導入の導入
1.
グラフデータベース「Neo4j」の 導入の導入 @who_you_me 第3回 「はじめてのパターン認識」 読書会 2013/07/16 An
Introductory Introduction to a Graph Database - Neo4j
2.
お前誰よ Twitter: @who_you_me 職業: 某ISPではたらくネットワークエンジニア 好きな言語:
Python 最近好きになってきた言語: Ruby 興味がある言語: Haskell はじパタの前身の前身(?)「TokyoSNA」主催
3.
お前誰よ Twitter: @who_you_me 職業: 某ISPではたらくネットワークエンジニア 好きな言語:
Python 最近好きになってきた言語: Ruby 興味がある言語: Haskell はじパタの前身の前身(?)「TokyoSNA」主催 (すべての元凶!?)
4.
前提 ・グラフDBというものがこの世に存在すること ・グラフDBってざっくりこんな感じだよ、ってこと 以上2点を知ってもらうことが目的です。 高度な話はしません(というか、できません)。
5.
はじめに
6.
はじパタは、ATNDを使っています
7.
2013年7月現在 12,000イベント 90,000ユーザー 270,000の「参加データ」 (一人平均3イベントに参加)
8.
はじパタ参加者なら、 「このデータ使って、何か面白いことできそう」 って思うよね?
9.
幸いにして、 ATNDはAPIを提供しているので、 ガシガシ叩きまくれば全データ取ってこれます (リクルートさんごめんなさい、、、)
10.
で
11.
みなさん
12.
取ってきたデータ、 どうやって保存しますか?
13.
DBに入れますよね?
14.
どのDB使いますか?
15.
DBの選択肢 ・信頼と実績のRDB ・新進気鋭のNoSQL
16.
DBの選択肢 ・信頼と実績のRDB ・新進気鋭のNoSQL ・第三の選択肢、GraphDB
17.
1. GraphDBってなに?
18.
・リレーショナル ・ドキュメント指向 ・列指向 ・KVS (Key-Value Store) ・グラフ これらの違いってなに?
19.
「現実をどうやってモデル化するか」 その方法に各DBの違いがあります
20.
RDBならこうやってモデル化 あってるよね、、、?
21.
ドキュメント指向ならこうやってモデル化 { "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, ...... }, ......
22.
うーん、、、
23.
これって、 既に訓練されてしまっている 我々ならともかく
24.
おばあちゃんが見て 理解できるかな?
25.
コンピューターおばあちゃんなら別ですが、、、
26.
event_id: 41119 title: はじパタ第三回 event_id:
29767 title: TokyoSNA #1 こうやって、イベントがあって
27.
event_id: 41119 title: はじパタ第三回 event_id:
29767 title: TokyoSNA #1 user_id: 120155 nickname: Prunus1350 user_id: 104457 nickname: who_you_me user_id: 75357 nickname: millionsmile ユーザーがいて
28.
event_id: 41119 title: はじパタ第三回 event_id:
29767 title: TokyoSNA #1 user_id: 120155 nickname: Prunus1350 user_id: 104457 nickname: who_you_me user_id: 75357 nickname: millionsmile 参加 status: 1 参加 status: 1 参加 status: 1 参加 status: 1 参加 status: 1 参加してるイベントには、 線を引っ張る
29.
event_id: 41119 title: はじパタ第三回 event_id:
29767 title: TokyoSNA #1 user_id: 120155 nickname: Prunus1350 user_id: 104457 nickname: who_you_me user_id: 75357 nickname: millionsmile 参加 status: 1 参加 status: 1 参加 status: 1 参加 status: 1 参加 status: 1 この方が直観的で 理解しやすいですよね?
30.
そうです!
31.
データをこうやって、 頂点(node)と辺(relation)で モデル化するのが
32.
GraphDBです!
33.
event_id: 41119 title: はじパタ第三回 user_id:
120155 nickname: Prunus1350 参加 status: 1 node (vertex) (entity) relation (edge) (link) property ・node ・node間の関係を表すrelation ・node, relationそれぞれにkey-valueで属性を付与するproperty GraphDBの三要素
34.
2. それって何がうれしいの?
35.
データの表現が直観的 (まあ、何が直観的かは人によるけどね、、、)
36.
グラフのtraverseが 直観的に書ける&早い
37.
traverseって何
38.
http://www.alc.co.jp/
39.
要は、グラフを走りまわって 何かを見つけること
40.
例1 六次の隔たり 「友達の友達」を6回たどると、 世界中の誰にでも届くらしい! ・スモールワールド実験 ・エルデシュ数 ・ケビン・ベーコン数 ・etc...
41.
例2 乗り換え案内 新宿駅から押上駅へはどう行けばいい? http://www.tokyometro.jp/station/common/pdf/network1.pdf
42.
どちらも、最短経路を求める問題
43.
RDBやNoSQLの場合、 SQLやMapReduceだけで解くのは 困難なため、
44.
アルゴリズムはプログラムに任せる ことになると思います Rならigraph PythonならNetworkX
45.
メモリに載り切らないぐらい 大量のデータだったらどうする、、、?
46.
Giraphっていうフレームワークが Hadoop上で使えるらしい!
47.
一方で、Neo4jはDBの機能で 最短経路を求めることができます
48.
ベンチマークした方がいました
49.
http://tech-sketch.jp/2013/02/neo4j.html
50.
圧倒的じゃないか、我が軍は
51.
もひとつおまけ
52.
「友達の友達」、「友達の友達の友達」、、、 をひたすら求める処理をRDBと比較
53.
あえて言おう、カ○であると!
54.
早いのはわかったけど 「直観的に書ける」のは本当かよ
55.
本当です
56.
そう、Cypherならね
57.
クエリ言語Cypher アスキーアートとパターンマッチによりグラフ を探索できるクエリ言語 例えば、自分(who_you_me)とPrunus1350さん が共通に出席した勉強会を探したければ、、、
58.
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
59.
なかなかよさげじゃないですか?
60.
デモ
61.
PCにNeo4jインストールして、 ATNDの全データ入れてみたので、 実際に見てみましょう
62.
参考文献
63.
『7つのデータベース 7つの世界』
64.
『Graph Databases』
65.
『Neo4j in Action』
66.
以上、 ご清聴ありがとうございました!
Download