Your SlideShare is downloading. ×
グラフデータベース「Neo4j」の 導入の導入
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

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

11,368
views

Published on

Published in: Technology

0 Comments
46 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
11,368
On Slideshare
0
From Embeds
0
Number of Embeds
15
Actions
Shares
0
Downloads
95
Comments
0
Likes
46
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 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. 以上、 ご清聴ありがとうございました!