Enjoy GraphDB! - graphdb jp #1(Japanese)
Upcoming SlideShare
Loading in...5
×
 

Enjoy GraphDB! - graphdb jp #1(Japanese)

on

  • 3,795 views

 

Statistics

Views

Total Views
3,795
Views on SlideShare
1,849
Embed Views
1,946

Actions

Likes
2
Downloads
14
Comments
0

6 Embeds 1,946

http://graphdb.jp 1817
http://graphdbjp.tumblr.com 95
http://webcache.googleusercontent.com 18
http://a0.twimg.com 8
http://paper.li 5
https://twitter.com 3

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

Enjoy GraphDB! - graphdb jp #1(Japanese) Enjoy GraphDB! - graphdb jp #1(Japanese) Presentation Transcript

  • Enjoy GraphDB! ~ Python with Bulbs and Rexster ~Fungoing LLC / Satoshi MiyauchiTwitter : @bibrost
  • 宮内 聖 / Satoshi Miyauchi @bibrost 野良です MongoDB、Python、Scalaとか 最近HotなのはやはりFluent 秋葉原に別荘を借りました 11月にカリフォルニア行ってきます Page : 1
  • みなさんおつかれさまです Page : 2
  • ここまでの話でGraphDBの理解は 深まったはず Page : 3
  • しかし Page : 4
  • アプリで使えないと意味がないよね Page : 5
  • ということで Page : 6
  • Enjoy GraphDB! Page : 7
  • GraphDBへアクセスする方法アプリから利用する方法はいくつかあります 1.ネイティブドライバで直接接続する 2.DB固有のHTTPインターフェイスを使う 3.TinkerPop/Gremlinを経由 4.Tinkerpop/Rexsterを経由(HTTP) Page : 8
  • 1.ネイティブドライバで直接接続する・プロダクト毎、かなりAPIに差があるので、 心中の覚悟が必要・メジャーどころは基本Javaなので、 ちょっと使うにはコストが高すぎる・・・ Page : 9
  • 2.DB固有のHTTPインターフェイス・やはりプロダクト毎、APIに差があるので 心中の覚悟が必要・ものによってはサポートしていない動作も 多くどうもメインストリームではなさそう Page : 10
  • 3.TinkerPop/Gremlinを経由 ・インターフェイスが共通化されているので そこはとてもよい ・ただしJava(というかGroovy)なので これはこれでヘビー。。。 Page : 11
  • 4.Tinkerpop/Rexster経由(HTTP) ・HTTPでかつ共通化されたインターフェイス 使い勝手だけなら最良(管理画面付き) ・ただしコアとの距離がかなり遠いので おそらくパフォーマンス悪い +バージョンの追従がどうなのか・・・ Page : 12
  • どれも微妙。 Page : 13
  • とはいえどれか選ぶ必要はある Page : 14
  • 仮説 ディープに使い切るなら → 心中する覚悟で(1)をScala/Groovy/Clojureから使う お金があるならNeo4j、無いならOrientDBがよさそう GraphDBをそれなりに使いこなしたいなら → (3)をScala/Groovy/Clojureから使う とりあえず体験してみたいなら → (4)を自分の慣れた言語から使う Page : 15
  • というわけで(4) Page : 16
  • GraphDBの現状 ネイティブドライバ以外はほとんど情報がない → まぁ、仕方ないね ORMのような使い勝手を高めるライブラリはほとんどない → きっとまだそんな段階じゃないね 見渡す限り茨の道 → 困ったら大元のドキュメントかソースを読むしかない それで解決するかも不明(そもそも解決してないかも) Page : 17
  • でも一応ORMぽいのもあった Page : 18
  • なんだか楽しそう! Page : 19
  • Bulbs Bulbs is an open-source Python persistence framework for graph databases and the first piece of a larger Web-development toolkit that will be released in the upcoming weeks. Page : 20
  • James ThorntonIt’s like an ORM for graphs, but instead of SQL,you use the graph-traveral language Gremlin to query thedatabase.グラフ用のORMみたいなもんさ。でも使うのはSQLじゃない。Bulbsはgraph-traversal-language Gremlinを使うんだ Page : 21
  • from bulbs.model import Nodefrom bulbs.datatype import Property, Stringclass Idea(Node): element_type = "idea" text = Property(String, nullable=False) stub = Property(String,"make_stub") def make_stub(self): return utils.create_stub(self.text) def after_created(self): Relationship.create(self,"created_by",current_user) なかなかコンパクトに書けそうなのでお試しにはよさそう Page : 22
  • まずはこれを試そう Page : 23
  • Enjoy!への道 1.JVM環境を入れておく(説明は割愛) 2.Rexsterのパッケージを落とす 3.Rexsterを起動する 4.Bulbsをインストールする 5.Enjoy!(幻想でした) Page : 24
  • 2.Rexsterのパッケージを落とすhttps://github.com/tinkerpop/rexster/downloadsbulbsは0.5用なので0.5を落とそうDL数は見なかったことにしよう Page : 25
  • 3.Rexsterを起動するrexster-start.(sh|bat)[INFO] WebServer - .:Welcome to Rexster:.[INFO] GraphConfigurationContainer - Graph emptygraph - tinkergraph[vertices:0 edges:0] loaded[INFO] RexsterApplicationGraph - Graph [tinkergraph] - configured with allowable namespace [tp:gremlin][INFO] GraphConfigurationContainer - Graph tinkergraph - tinkergraph[vertices:6 edges:6] loaded[INFO] RexsterApplicationGraph - Graph [tinkergraph-readonly] - configured with allowable namespace [tp:gremlin][INFO] GraphConfigurationContainer - Graph tinkergraph-readonly - (readonly)tinkergraph[vertices:6 edges:6] loaded[INFO] RexsterApplicationGraph - Graph [gratefulgraph] - configured with allowable namespace [tp:gremlin][INFO] GraphConfigurationContainer - Graph gratefulgraph - tinkergraph[vertices:809 edges:8049] loaded[INFO] GraphConfigurationContainer - Graph emptysailgraph - not enabled and not loaded.[INFO] GraphConfigurationContainer - Graph sailgraph - not enabled and not loaded.[INFO] GraphConfigurationContainer - Graph orientdbsample - not enabled and not loaded.[INFO] GraphConfigurationContainer - Graph neo4jsample - not enabled and not loaded.[INFO] GraphConfigurationContainer - Graph dexsample - not enabled and not loaded.[INFO] GraphConfigurationContainer - Graph remotetinkergraph - not enabled and not loaded.[INFO] WebServer - Web Server configured with com..sun..jersey..config..property..packages: com.tinkerpop.rexster[INFO] WebServer - Web Server configured with com..sun..jersey..spi..container..ContainerResponseFilters: com.tinkerpop.rexster.HeaderResponseFilter[INFO] WebServer - Rexster Server running on: [http://localhost:8182][INFO] WebServer - No servlet initialization parameters passed for configuration: admin-server-configuration[INFO] WebServer - Dog House Server running on: [http://localhost:8183][INFO] WebServer - RexPro serving on port: [8185][INFO] ShutdownManager$ShutdownSocketListener - Bound shutdown socket to /127.0.0.1:8184. Starting listener thread for shutdown requests. Page : 26
  • 3.Rexsterを起動するhttp://localhost:8183/管理画面もあるよ Page : 27
  • 4.Bulbsをインストールする easy_install bulbs Page : 28
  • Enjoy! Page : 29
  • Code snippet# Node classclass User(Node): element_type = "user" name = Property(String, nullable=False)# add Useruser = User(name=“bibrost")user.save()# add RelationsshipRelationship.create(User.get(from_id),"follow",User.get(to_id)) Page : 30
  • GraphDBの力がわかる問題 Page : 31
  • 次のデータを取得するクエリを書いてください(言語等自由)ユーザ[u]のまだ友達になっていない友達の友達 制限時間:20秒 Page : 32
  • Except patterng.v(u).out.aggregate(x).out.except(x) Page : 33
  • g.v(u).out.aggregate(x).out.except(x)u Page : 34
  • g.v(u).out.aggregate(x).out.except(x)u Page : 35
  • g.v(u).out.aggregate(x).out.except(x)u x Page : 36
  • g.v(u).out.aggregate(x).out.except(x)u x Page : 37
  • g.v(u).out.aggregate(x).out.except(x)u x Page : 38
  • f ff友達[ f ]と友達の友達[ ff ]の差集合(difference set)を求めるのがまさにExcept Pattern※積集合を求めるRetain Patternもある Page : 39
  • More Patternshttps://github.com/tinkerpop/gremlin/wiki ・ Backtrack Pattern ・ Except/Retain Pattern ・ Flow Rank Pattern ・ Paths Pattern ・ Loop Pattern ・ Split/Merge Pattern Githubのgremlinレポジトリに ・ Pattern Match Pattern 色々あります Page : 40
  • Demoコードの構成https://github.com/bibrost/python-graphdb-demo Tornade Rexster Bulbs GraphDB Page : 41
  • 最後に Page : 42
  • 新しいパラダイムに触れることはとてもエキサイティングだし、勉強になるまだGraphDB自体を使うところまでいっていないがインスパイアされてMongoDB用のGraphを作るなど実用的なメリットも既に受けている(こちらは既にProductionに乗ってる) Page : 43
  • そんなGraphDB、今日からEnjoyしませんか Page : 44
  • ドメインとWordPressをご用意しておきました http://graphdb.jp/ Page : 45
  • いつでもアカウント発行します。君もContributorにならなイカ? Page : 46
  • Enjoy GraphDB! ~ Python with Bulbs and Rexster ~ ありがとうございました。 Page : 47