SlideShare a Scribd company logo
1 of 91
Download to read offline
Graph DB

       GraphDB


 doryokujin

+WEB          ( Tokyo.Webmining #9-2)
[Me]
       doryokujin

                    2

                        2       33

[Company]


                            1
[   ]

    MongoDB JP

    TokyoWebMining   MongoDB

[         ]

    MongoDB



              MongoDB GraphDB
#1


[MongoTokyo]
    Mongo DB Congerence in Japan

    2011 03   01

    10gen             3

                                    …

                http://www.10gen.com/conferences/
    mongotokyo2011
#2


[gihyo     ]

    gihyo.jp

    2

         DocumentDB    GraphDB


               NoSQL
Graph
          Graph

Graph DB


   Graph Traversal

          Graph DB
   Neo4j, Sones, InfoGrid, OrientDB, InfiniteGraph

Tinker Pop
   Gremlin, Blueprints, Pipes, Rexster, Mutant
Graph

Graph
          Graph

Graph DB


   Graph Traversal

          Graph DB
   Neo4j, Sones, InfoGrid, OrientDB, InfiniteGraph

Tinker Pop
   Gremlin, Blueprints, Pipes, Rexster, Mutant
Graph:      Graph

Graph     DB
        Graph
Graph



[Graph]
     Dots          Lines

            vertices           edges
                        1        (relationship)


                       Dots   Lines
       Graph
Undirected Graph

[    (Undirected)
Graph]
 Vertices:



 Edges:

    (relationship)


    (symmetric)
Directed Graph

[       (Directed) Graph]

    Vertices:



    Edges:

       (relationship)


       (asymmetric)
Directed / Underected Graph


         friend                                     follow



                           friend                                         follow


                                                               follow


friend                                     follow
         [Facebook]                                 [Twitter]
                      ”Undirected Graph”              Follow            ”Directed Graph”
                  ”        ”                                   ”           ”
                      ”friends”                                    ”follow”
Single-Relational Graph


Single-Relational Structures

   →



   Undirected / Directed Graph


    Single-Relatinal
    1     Graph
Single-Relational Graph


         friend                                     follow



                           friend                                         follow


                                                               follow


friend                                     follow
         [Facebook]                                 [Twitter]
                      ”Undirected Graph”              Follow            ”Directed Graph”
                  ”Facebook         ”                          ”Twitter            ”
                      ”friends”                                    ”follow”
Single-Relational

                           Reply
                           num:5
                   Reply                   Block
                   num:5

                                                   Reply
            DM
                                                   num:5
           num:1

                            RT         RT
 Reply    DM
                           num:2      num:2
 num:2   num:1
                              [Twitter]
                                   Graph    ”Directed Graph”
                                           ”Twitter        ”
                                           ”Reply”,”RT”,”DM”,”Block”
*Facebook        Flickr
                               lives_in

                                           is             is     is
                                                                                follow
    lives_in
                         friend                                                                   is
                                           share *


                                  friend        share          follow     follow
               is


[                                      ]                                                           lives_in

    Undirected      Directed
                                                     is        is
                                                is

                                                                           lives_in
Multi-Relational Graph

Multi-Relational Structures




      lives_in: User → Country
      Share: Facebook → Flikcr
Multi-Relational


                      Reply
              Reply           Block



         DM                           Reply



                       RT     RT
Reply   DM                            [Twitter]



                                              ”Twitter      ”
                                              ”Reply”,”RT”,”DM”,”Block”
Multi-Relational
                                                             *Facebook        Flickr
                     lives_in

                                has                   has
                                               has
                                                                     follow
 lives_in
                   friend                                                              has

                     share *
            has             friend       share              follow



                                                                                        lives_in

[Multi-Relatinal Graph]
                                     has has         has

                                                                 lives_in
Property Graph

  Property Graph
           Multi-Relational Graph                        (Property)


                      Graph DB             Graph

           1

                         key/value


   id          id_A                     follow                id      id_B
follow         100                                         follow     500
follower       200               date       2011/01/23     follower   1000
Property Graph

                          Reply
                          num:5
                  Reply                   Block
                  num:5

                                                  Reply
           DM
                                                  num:5
          num:1

                           RT         RT
Reply    DM
                          num:2      num:2
num:2   num:1
                                  Graph    ”Property Graph”
                                          ”Twitter        ”
                                          ”Reply”,”RT”,”DM”,”Block”
                                            ”num”
Property Graph
                                                                                name      doryokujin

                                                                                sex           man
                                           lives_in                             birth     1985/05/14


                                                              has                       has                                        id        id_B

                                                                                                                follow          follow       1000

                                                                                                                                follower     2000
lives_in                   date         2011/01/23

                           friend                                                                                                   has
                                               friend
                                        date     2011/01/23

           has                                         friend                    follow                follow
                                                                         date    2010/03/23             date       2011/01/23
                 name         full name

                  mail        xxx@yyy

                 address          zzz
                                                                                                                                        lives_in
                                                                                                           id          id_A

                                                                                                         follow         100

                                                                                                        follower        200
                                                                has                 has
                                                     date   2010/03/23
                                                                                                       lives_in
Graph




   The Graph Traversal Pattern
Property Graph


    Property Graph        Graph

    Property Graph      Graph DB
           Tinker Pop



                        Hyper Graph
Graph DB

Gragh
          Graph

Graph DB


   Graph Traversal

          Graph DB
   Neo4j, Sones, InfoGrid, OrientDB, InfiniteGraph

Tinker Pop
   Gremlin, Blueprints, Pipes, Rexster, Mutant
Graph DB:

   Property Graph           DB
“Graph DB”
Graph DB


[            DB ≠ Graph DB]

    Graph

              DB

                DB Graph DB
RDB            Graph

[Relatinal Database]           A

outV          inV
 A              B         B        C
 A              C
 C              D
                               D
 D              A
Document DB             Graph
       [Document Database]             A
{
    A : {
      out : [B, C], in : [D]
    }
    B : {
      in : [A]                 B           C
    }
    C : {
      out : [D], in : [A]
    }
    D : {
      out : [A], in : [C]              D
    }
}
XML DB                   Graph
    [XML Database]                       A

<graphml>
<graph>
<node id=A />
<node id=B />                     B          C
<node id=C />
<edge source=A   target=B   />
<edge source=A   target=C   />
<edge source=C   target=D   />
<edge source=D   target=A   />
</graph>                                 D
</graphml>
Graph DB

[   ]

“A graph database is any storage system
   that provides index-free adjacency”
                   The Graph Traversal Programming Pattern




              (“adjacent”)
                             ( “index-free” )
Non-Graph DB and
                 Index-Based Adjacency

                                                          B   E
                            1. A




                                               3. (B,C)

                                   A
 A         B      C
B, C       E     D, E
                        D      E
                                        2.
                                                          C   D
     log_2(n)                          (B,C)
     time cost
Graph DB and
                Index-Free Adjacency
‣

    ”Mini - Index”
                                            B   E

‣
                                     1.


        1                       A
                                    (B,C)


‣
                                            C   D
                 id      id_B

              follow     1000

              follower   2000
Property (key/value)




   The Graph Traversal Programming Pattern
GraphDB: Graph Traversal

      Graph DB
Graph DB         Query
Graph DB       Query

Graph Query = Graph Traversal
   Traversal =

   Root
   Graph


   Graph Traversal    (Root)

                         Index-Free Adjacency
private	
  void	
  printFriends(	
  Node	
  person	
  )
{
	
  	
  	
  	
  Traverser	
  traverser	
  =	
  person.traverse(
	
  	
  	
  	
  	
  	
  	
  	
  Order.BREADTH_FIRST,	
  	
  //	
  
	
  	
  	
  	
  	
  	
  	
  	
  StopEvaluator.END_OF_GRAPH,	
  //	
  Graph
	
  	
  	
  	
  	
  	
  	
  	
  ReturnableEvaluator.ALL_BUT_START_NODE,	
  //	
  Root	
  Node
	
  	
  	
  	
  	
  	
  	
  	
  MyRelationshipTypes.KNOWS,	
  //	
  ”KNOWS”
	
  	
  	
  	
  	
  	
  	
  	
  Direction.OUTGOING	
  );	
  //	
  
	
  	
  	
  	
  for	
  (	
  Node	
  friend	
  :	
  traverser	
  )
	
  	
  	
  	
  {	
  	
  	
  //	
         Node         ”name”
	
  	
  	
  	
  	
  	
  	
  	
  System.out.println(	
  friend.getProperty(	
  "name"	
  )	
  );
	
  	
  	
  	
  }
                                                                                                  Neo4j Wiki
}
1


                                  3


1


         2


    Trinity
    Morpheus
    Cypher
    Agent	
  Smith
                         Neo4j Wiki
private	
  void	
  findHackers(	
  Node	
  startNode	
  )                                                                               Neo4j Wiki
{
	
  	
  	
  	
  Traverser	
  traverser	
  =	
  startNode.traverse(
	
  	
  	
  	
  	
  	
  	
  	
  Order.BREADTH_FIRST,	
  //	
  
	
  	
  	
  	
  	
  	
  	
  	
  StopEvaluator.END_OF_GRAPH,	
  //	
  Graph
	
  	
  	
  	
  	
  	
  	
  	
  new	
  ReturnableEvaluator()	
  //	
  
	
  	
  	
  	
  	
  	
  	
  	
  {
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  public	
  boolean	
  isReturnableNode(	
  TraversalPosition	
  currentPosition	
  )
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  {
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  Relationship	
  rel	
  =	
  currentPosition.lastRelationshipTraversed();
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  if	
  (	
  rel	
  !=	
  null	
  &&	
  rel.isType(	
  MyRelationshipTypes.CODED_BY	
  )	
  )
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  {
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  return	
  true;	
  //          	
  “CODED_BY”	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  }
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  return	
  false;	
  //	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  }
	
  	
  	
  	
  	
  	
  	
  	
  },	
  //	
                                    2
	
  	
  	
  	
  	
  	
  	
  	
  MyRelationshipTypes.CODED_BY,	
  Direction.OUTGOING,	
  //	
  
	
  	
  	
  	
  	
  	
  	
  	
  MyRelationshipTypes.KNOWS,	
  Direction.OUTGOING	
  );	
  //	
  
	
  	
  	
  	
  for	
  (	
  Node	
  hacker	
  :	
  traverser	
  )
	
  	
  	
  	
  {
	
  	
  	
  	
  	
  	
  	
  	
  TraversalPosition	
  position	
  =	
  traverser.currentPosition();
	
  	
  	
  	
  	
  	
  	
  	
  System.out.println(	
  "At	
  depth	
  "	
  +	
  position.depth()	
  +	
  "	
  =>	
  "
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  +	
  hacker.getProperty(	
  "name"	
  )	
  );
	
  	
  	
  	
  }                                                                             ∴	
  At	
  depth	
  4	
  =>	
  The	
  Architect
Graph DB

[Data Locality]



        [Local Search, Social Network]   2


        [Transition]       Web


        [Recommendation]
[Graph Problems]


    [Shortest Path]   2

GraphDB                   Traversal




                                  Neo4jrb
Graph DB

               ”       ”
                       10

         ”Knows”



  Tables, Documents, Key/Value Model



  GraphDB                              Union,
  Intersection, Join
Graph DB

[     ]

           Property Graph

    Index-Free Adjacency

    Graph Query = Graph Traversal

    Data Locality
Graph DB

Graph
          Graph

Graph DB


   Graph Traversal

          Graph DB
   Neo4j, Sones, InfoGrid, OrientDB, InfiniteGraph

Tinker Pop
   Gremlin, Blueprints, Pipes, Rexster, Mutant
Neo4j
Neo4j
[   ] HP
    Java
                  AGPLv3
    2003     24                     8
    2009     VC
    ACID


    Propety Graph Model / Gremlin
    Lucene
Neo4j

[Language Binding - Framework]

    Python - Django
    Ruby - Ruby on Rails
    Clojure
    Scala
    Groovy - Griffin / Grails
    Java - Spring Framework

                  Ruby
           Ruby Java
Neo4j
[Tools]
     Shell
        Shell    Graph   Traverse Indexing

     neo4j-server
        Neo4j REST API

        Admin tools
     Online BackUp

     Neoclipse
        Neo4j                                ↑

     Batch Insert
Neo4j
[ver. 1.2]                 1.2

     Neo4j Server
         REST API

         Admin Interface

     High Availability

     Kernel
sones
sones
[   ] HP
    C#
                  AGPLv3
    2011     VC
    ACID
    REST Interface
    Property Graph Model / Gremlin
               : Property Hyper Graph
    Graph Query Language(GQL)
sones
    [GQL]
       SQL             Traversal
       Cheat Sheet
                             Query


• FROM User SELECT User.Friends.Friends.Name
// aggregation
• SELECT COUNT(User.Friends)
• SELECT User.Friends.Random(2)
• SELECT User.Friends.Name.Substring(2,5)
Orient DB
Orient DB

[   ] HP
    Java
                  Apache2.0
    1997               C++ → Java
    Document-Graph DB
    ACID
    Shell / REST Interface
    Propety Graph Model / Gremlin
Orient DB
     [Document-Graph DB]
              [    ] Orient DB                Object DB  Key/Value
              Server                         Document DB
// DATABASE   OPEN
ODatabaseDocumentTx db = new ODatabaseDocumentTx("remote:localhost/petshop").open
("admin", "admin");

//      Document
ODocument doc = new ODocument(db, "Person");
doc.field( "name", "Luke" );
doc.field( "surname", "Skywalker" );
doc.field( "city", new ODocument(db, "City").field("name","Rome").field("country",
"Italy") );
             
//      Transaction
doc.save();

db.close();
Orient DB
      [Document-Graph DB]
                 OGraphVertex

               OGraphEdge

                  OGraphElement
           ODocumentWrapper

                        Document

           SQL

SELECT FROM OGraphVertex WHERE outEdges CONTAINS ( label = 'knows' )

//7           ”knows”

SELECT FROM OGraphVertex WHERE outEdges TRAVERSE(0,7,'out,outEdges')
( @class = 'OGraphEdge' and label = 'knows' )
Orient DB

[Language Binding Using Binary Protocol]

    Java
    C
    PHP
    JRuby (Ruby: soon)
[Language Binding Using REST Protocol]

    Python
    Java Script
InfoGrid
InfoGrid
    [    ] HP
        JAVA
                           AGPLv3
        ACID
        REST Interface
        MeshObject Graph
MeshBase _GDB = StoreMeshBase.create(_MySQLStore);
MeshObject _xkcd = _GDB.getMeshObjectLifecycleManager
().createMeshObject();
_xkcd.setProperty("Name", "xkcd");
_xkcd.setProperty("Url", "http://www.xkcd.com");
_xkcd.relate(_good)
Infinite Graph
Infinite Graph

[   ] HP
    C++
                                 Academic and Start
    Up
    2010   6
    Distributed Graph DB
    ↑Objectivity/DB: distributed database server
Graph DB:
                                                Data                                    SQL Like
GraphDB      License    Language   Protocol                  Gremlin    Binding
                                                Model                                    Query


                                   REST/       Property                Ruby, Python,
 Neo4j      AGPLv3        Java                                 Yes
                                                                         Scala,...
                                                                                           -
                                   JSON         Graph

                                   REST/       Property
 sones      AGPLv3        C#        JSON        Graph          Yes           -            Yes
                                   (XML)      (+Extend)

                                   REST/       Property                 PHP, Jruby,
OrientDB    Apache2.0     Java                                 Yes
                                                                       Python, JS,...
                                                                                          Yes
                                   JSON         Graph

                                                Property
                                   REST/
Info Grid   AGPLv3        Java                  Graph?          -            -             -
                                   JSON       (MeshObject)


 Infinite                                       Property
             Product      C++         -                         -            -             -
  Graph                                         Graph
Graph DB

[      ]

    Graph DB

                     Neo4j
    Open Source Social Graph Software Not Ready Yet

                       Graph DB
       Hypergtaph: PropertyGraph                 HyperGraph

       Pregel: bulk synchronous parallel model                Distributed DB
       Google

       FlockDB: Distributed DB for storing adjancency lists     Twitter
Tinker Pop

Graph
          Graph

Graph DB


   Graph Traversal

          Graph DB
   Neo4j, Sones, InfoGrid, OrientDB, InfiniteGraph

Tinker Pop
   Gremlin, Blueprints, Pipes, Rexster, Mutant
Tinker Pop
Tinker Pop

[Tinker Pop] HP
                      Property Graph Model
         GraphDB


       Blueprints: A Property Graph Model Interface
       Gremlin: A Graph Traversal Language
       Pipes: A Data Flow Framework using Process Graphs
       Rexster: A RESTful Graph Shell
       Mutant: A Poly-ScriptEngine ScriptEngine
Tinker Pop
Tinker Pop: BluePrints
BluePrints

[       ] HP
        GraphDB      ”JDBC”

Property Graph Model                 GraphDB
[Now]
               Tinker Graph: in-memory property graph model
               Sail: Open RDF
               Neo4j, Orient DB, sones, ...
[Future]
               Redis
               Infinite Graph, Dex
BluePrints

      GraphDB
Graph graph = new Neo4jGraph("/tmp/graph/neo4j");
// Graph graph = new OrientGraph("/tmp/graph/orientdb");
Vertex a = graph.addVertex(null);
Vertex b = graph.addVertex(null);
a.setProperty("name","marko");
b.setProperty("name","aaron");
Edge e = graph.addEdge(null,a,b,"knows");
e.setProperty("since",2010);
graph.shutdown();
BluePrints
     Transaction
graph.startTransaction();

try{
  Vertex luca = graph.addVertex(null);
  luca.setProperty( "name", "Luca" );

  Vertex marko = graph.addVertex(null);
  marko.setProperty( "name", "Marko" );

  Edge lucaKnowsMarko = graph.addEdge(null, luca, marko,"knows");

  graph.stopTransaction(Conclusion.SUCCESS);

} catch( Exception e ) {

  graph.stopTransaction(Conclusion.FAILURE);
}
Tinker Pop: Gremlin
Gremlin


[     ] HP
Gremlin = Graph Programing Language
Blueprints               GraphDB
Shell
    GraphDB      Query


Java + Groovy
Gremlin

Property Graph




                           Basic Graph Traversals
doryokujin$ ./gremlin.sh
         ,,,/
         (o o)
-----oOOo-(_)-oOOo-----

gremlin>	
  g	
  =	
  TinkerGraphFactory.createTinkerGraph()
==>tinkergraph[vertices:6	
  edges:6]	
  //        6     6
gremlin>	
  g.class
==>class	
  
com.tinkerpop.blueprints.pgm.impls.tg.TinkerGraph
gremlin>	
  //	
  
gremlin>	
  g.V
==>v[3]
==>v[2]
...
gremlin>	
  //	
  
gremlin>	
  g.E
==>e[10][4-­‐created-­‐>5]
==>e[7][1-­‐knows-­‐>2]
==>e[9][1-­‐created-­‐>3]
...
                                                      Getting Srarted
gremlin>	
  v	
  =	
  g.v(1)	
  //	
  id=1	
  
==>v[1]
gremlin>	
  v.keys()	
  //	
  
==>age
==>name
gremlin>	
  v.values()	
  //	
  
==>29
==>marko
gremlin>	
  v.name	
  +	
  '	
  is	
  '	
  +	
  v.age	
  +	
  '	
  years	
  old.'
==>marko	
  is	
  29	
  years	
  old.
gremlin>	
  //	
  id=1,	
  name=marko	
  
gremlin>	
  v.outE
==>e[7][1-­‐knows-­‐>2]
==>e[9][1-­‐created-­‐>3]
==>e[8][1-­‐knows-­‐>4]
gremlin>	
  //	
  
gremlin>	
  v.outE.weight
==>0.5
==>0.4
==>1.0                                                                         Getting Srarted
gremlin>	
  //	
  id=1                                                                              1.0


gremlin>	
  v.outE{it.weight	
  <	
  1.0}.inV
==>v[2]
==>v[3]
gremlin>	
  //	
  
gremlin>	
  list	
  =	
  []	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  
gremlin>	
  v.outE{it.weight	
  <	
  1.0}.inV	
  >>	
  list
==>v[2]
==>v[3]
gremlin>	
  //	
  list                                                              property	
  maps
gremlin>	
  list.collect{	
  it.map()	
  }
==>{name=vadas,	
  age=27}
==>{name=lop,	
  lang=java}
gremlin>	
  //	
  list
gremlin>	
  list.inE()	
  	
  	
  	
  	
  	
  	
  
==>e[7][1-­‐knows-­‐>2]
==>e[9][1-­‐created-­‐>3]
...
                                                                                                                                        Getting Srarted
gremlin>	
  list.inE{it.label=='knows'}	
  	
  //	
                      'knows'


              ==>e[7][1-­‐knows-­‐>2]
              gremlin>	
  list.inE()[[label:'knows']]	
  //	
  
              ==>e[7][1-­‐knows-­‐>2]
              gremlin>	
  list.inE()[[label:'knows']].outV.name	
  //
                                                         :name	
  
              ==>marko
                                                                                     Getting Srarted




~20000ms:	
  g.V.outE{it['label']=='followed_by'}.inV.outE{it['label']=='followed_by'}.inV.outE	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  {it['label']=='followed_by'}.inV	
  >>-­‐1
~9000ms:	
  	
  g.V.outE{it.label=='followed_by'}.inV.outE{it.label=='followed_by'}.inV.outE
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  {it.label=='followed_by'}.inV	
  >>-­‐1
~8500ms:	
  	
  g.V.outE{it.getLabel()=='followed_by'}.inV.outE{it.getLabel()=='followed_by'}.inV.outE	
  	
  	
  	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  {it.getLabel()=='followed_by'}.inV	
  >>-­‐1
~6000ms:	
  	
  g.V.outE[[label:'followed_by']].inV.outE[[label:'followed_by']].inV.outE	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  [[label:'followed_by']].inV	
  >>-­‐1
                                                                     ClosureFilterPipe vs. PropertyFIlterPipe
Tinker Pop: Pipes
Pipes

[       ] HP
Pipes = Data Flow Framework
Pipes    Graph Traversal    1   1

Pipes          filtering, splitting, merging, traversing,...
Gremlin




g:id-v('a')/outE[@label='knows']/inV/outE[@label='develops']/inV/@name


      Pipe pipe1 = new VertexEdgePipe(Step.OUT_EDGES);
      Pipe pipe2 = new LabelFilterPipe("knows", Filter.NOT_EQUALS);
      Pipe pipe3 = new EdgeVertexPipe(Step.IN_VERTEX);
      Pipe pipe4 = new VertexEdgePipe(Step.OUT_EDGES);
      Pipe pipe5 = new LabelFilterPipe("develops",
      Filter.NOT_EQUALS);
      Pipe pipe6 = new EdgeVertexPipe(Step.IN_VERTEX);
      Pipe pipe7 = new PropertyPipe("name");

      Pipe pipeline = new Pipeline
      (pipe1,pipe2,pipe3,pipe4,pipe5,pipe6,pipe7);
      pipeline.setStarts(new SingleIterator(graph.getVertex("a"));
      for(String name : pipeline) {
        System.out.println(name);
      }                                        A Graph Processing Stack
Pipes
        Pipes
public	
  class	
  NumCharsPipe	
  extends	
  AbstractPipe<String,Integer>	
  {
	
  	
  public	
  Integer	
  processNextStart()	
  {
	
  	
  	
  	
  String	
  word	
  =	
  this.starts.next();
	
  	
  	
  	
  return	
  word.length();
	
  	
  }
}                                                          A Graph Processing Stack
Tinker Pop: Rexster
Rexster


[    ] HP
Rexster = A RESTful Graph Shell
Blueprints               GraphDB   RESTful
API             (JSON)
Gremlin
> http://localhost:8182/examplegraph/vertices/b

{
  "version":"0.1",
  "results": {
    "_type":"vertex",
    "_id":"b",
    "name":"aaron",
    "type":"person"
  },
  "query_time":0.1537
}                                            A Graph Processing Stack

// g:key-v('name','DARK STAR')[0]: Usin gGremlin Code
> http://localhost:8182/gratefulgraph/traversals/gremlin?
script=g:key-v%28%27name%27,%27DARK%20STAR%27%29[0]

{
	
  	
  "results":	
  [{
	
  	
  	
  	
  "_type":"vertex",
	
  	
  	
  	
  "_id":"89",
	
  	
  	
  	
  "name":"DARK	
  STAR",
	
  	
  	
  	
  "song_type":"original",
	
  	
  	
  	
  "performances":219,
	
  	
  	
  	
  "type":"song"}
	
  	
  ],
	
  	
  "query_time":6.753024,
	
  	
  "success":true,
	
  	
  "version"
}                                                      Using Gremilin
Tinker Pop: Mutant
Mutant
[      ] HP
Mutant = A Poly-ScriptEngine ScriptEngine
JVM


    Script Engine
Mutant Console
marko:~/software/mutant$	
  ./mutant.sh	
  
	
  	
  	
  	
  	
  	
  //
	
  	
  	
  	
  	
  oO	
  ~~-­‐_
___m(___m___~.___	
  	
  MuTanT	
  0.1-­‐SNAPSHOT
_|__|__|__|__|__|	
  	
  	
  	
  	
  [	
  ?h	
  =	
  help	
  ]

[gremlin]	
  gremlin	
  0.6-­‐SNAPSHOT
[Groovy]	
  Groovy	
  Scripting	
  Engine	
  2.0
[ruby]	
  JSR	
  223	
  JRuby	
  Engine	
  1.5.5
[ECMAScript]	
  Mozilla	
  Rhino	
  1.6	
  release	
  2
[AppleScript]	
  AppleScriptEngine	
  1.0

mutant[gremlin]>	
  $x	
  :=	
  12
[12]
mutant[gremlin]>	
  ?x
mutant[AppleScript]>	
  ?x
mutant[Groovy]>	
  $x
12
mutant[Groovy]>	
  ?x
mutant[ruby]>	
  $x
12
mutant[ruby]>	
  ?x
mutant[ECMAScript]>	
  $x
12                                                               Basic Examples
[     ]

           Graph DB




    Graph DB
      Graph Partitioning



      Pregel Neo4j
…



※
    Graph DB
    http://snap.stanford.edu/data/index.html

More Related Content

What's hot

ネットストーカー御用達OSINTツールBlackBirdを触ってみた.pptx
ネットストーカー御用達OSINTツールBlackBirdを触ってみた.pptxネットストーカー御用達OSINTツールBlackBirdを触ってみた.pptx
ネットストーカー御用達OSINTツールBlackBirdを触ってみた.pptxShota Shinogi
 
マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!mosa siru
 
Where狙いのキー、order by狙いのキー
Where狙いのキー、order by狙いのキーWhere狙いのキー、order by狙いのキー
Where狙いのキー、order by狙いのキーyoku0825
 
マイクロサービス 4つの分割アプローチ
マイクロサービス 4つの分割アプローチマイクロサービス 4つの分割アプローチ
マイクロサービス 4つの分割アプローチ増田 亨
 
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」Takuto Wada
 
目grep入門 +解説
目grep入門 +解説目grep入門 +解説
目grep入門 +解説murachue
 
イミュータブルデータモデル(入門編)
イミュータブルデータモデル(入門編)イミュータブルデータモデル(入門編)
イミュータブルデータモデル(入門編)Yoshitaka Kawashima
 
Istioサービスメッシュ入門
Istioサービスメッシュ入門Istioサービスメッシュ入門
Istioサービスメッシュ入門Yoichi Kawasaki
 
MLOps に基づく AI/ML 実運用最前線 ~画像、動画データにおける MLOps 事例のご紹介~(映像情報メディア学会2021年冬季大会企画セッショ...
MLOps に基づく AI/ML 実運用最前線 ~画像、動画データにおける MLOps 事例のご紹介~(映像情報メディア学会2021年冬季大会企画セッショ...MLOps に基づく AI/ML 実運用最前線 ~画像、動画データにおける MLOps 事例のご紹介~(映像情報メディア学会2021年冬季大会企画セッショ...
MLOps に基づく AI/ML 実運用最前線 ~画像、動画データにおける MLOps 事例のご紹介~(映像情報メディア学会2021年冬季大会企画セッショ...NTT DATA Technology & Innovation
 
リッチなドメインモデル 名前探し
リッチなドメインモデル 名前探しリッチなドメインモデル 名前探し
リッチなドメインモデル 名前探し増田 亨
 
ビッグデータ処理データベースの全体像と使い分け
2018年version
ビッグデータ処理データベースの全体像と使い分け
2018年versionビッグデータ処理データベースの全体像と使い分け
2018年version
ビッグデータ処理データベースの全体像と使い分け
2018年versionTetsutaro Watanabe
 
Java ORマッパー選定のポイント #jsug
Java ORマッパー選定のポイント #jsugJava ORマッパー選定のポイント #jsug
Java ORマッパー選定のポイント #jsugMasatoshi Tada
 
君はyarn.lockをコミットしているか?
君はyarn.lockをコミットしているか?君はyarn.lockをコミットしているか?
君はyarn.lockをコミットしているか?Teppei Sato
 
世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture世界一わかりやすいClean Architecture
世界一わかりやすいClean ArchitectureAtsushi Nakamura
 
DDDはオブジェクト指向を利用してどのようにメンテナブルなコードを書くか
DDDはオブジェクト指向を利用してどのようにメンテナブルなコードを書くかDDDはオブジェクト指向を利用してどのようにメンテナブルなコードを書くか
DDDはオブジェクト指向を利用してどのようにメンテナブルなコードを書くかKoichiro Matsuoka
 
SQL大量発行処理をいかにして高速化するか
SQL大量発行処理をいかにして高速化するかSQL大量発行処理をいかにして高速化するか
SQL大量発行処理をいかにして高速化するかShogo Wakayama
 
それはYAGNIか? それとも思考停止か?
それはYAGNIか? それとも思考停止か?それはYAGNIか? それとも思考停止か?
それはYAGNIか? それとも思考停止か?Yoshitaka Kawashima
 
なぜ、いま リレーショナルモデルなのか(理論から学ぶデータベース実践入門読書会スペシャル)
なぜ、いま リレーショナルモデルなのか(理論から学ぶデータベース実践入門読書会スペシャル)なぜ、いま リレーショナルモデルなのか(理論から学ぶデータベース実践入門読書会スペシャル)
なぜ、いま リレーショナルモデルなのか(理論から学ぶデータベース実践入門読書会スペシャル)Mikiya Okuno
 
こんなに使える!今どきのAPIドキュメンテーションツール
こんなに使える!今どきのAPIドキュメンテーションツールこんなに使える!今どきのAPIドキュメンテーションツール
こんなに使える!今どきのAPIドキュメンテーションツールdcubeio
 
Pythonによる黒魔術入門
Pythonによる黒魔術入門Pythonによる黒魔術入門
Pythonによる黒魔術入門大樹 小倉
 

What's hot (20)

ネットストーカー御用達OSINTツールBlackBirdを触ってみた.pptx
ネットストーカー御用達OSINTツールBlackBirdを触ってみた.pptxネットストーカー御用達OSINTツールBlackBirdを触ってみた.pptx
ネットストーカー御用達OSINTツールBlackBirdを触ってみた.pptx
 
マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!
 
Where狙いのキー、order by狙いのキー
Where狙いのキー、order by狙いのキーWhere狙いのキー、order by狙いのキー
Where狙いのキー、order by狙いのキー
 
マイクロサービス 4つの分割アプローチ
マイクロサービス 4つの分割アプローチマイクロサービス 4つの分割アプローチ
マイクロサービス 4つの分割アプローチ
 
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
 
目grep入門 +解説
目grep入門 +解説目grep入門 +解説
目grep入門 +解説
 
イミュータブルデータモデル(入門編)
イミュータブルデータモデル(入門編)イミュータブルデータモデル(入門編)
イミュータブルデータモデル(入門編)
 
Istioサービスメッシュ入門
Istioサービスメッシュ入門Istioサービスメッシュ入門
Istioサービスメッシュ入門
 
MLOps に基づく AI/ML 実運用最前線 ~画像、動画データにおける MLOps 事例のご紹介~(映像情報メディア学会2021年冬季大会企画セッショ...
MLOps に基づく AI/ML 実運用最前線 ~画像、動画データにおける MLOps 事例のご紹介~(映像情報メディア学会2021年冬季大会企画セッショ...MLOps に基づく AI/ML 実運用最前線 ~画像、動画データにおける MLOps 事例のご紹介~(映像情報メディア学会2021年冬季大会企画セッショ...
MLOps に基づく AI/ML 実運用最前線 ~画像、動画データにおける MLOps 事例のご紹介~(映像情報メディア学会2021年冬季大会企画セッショ...
 
リッチなドメインモデル 名前探し
リッチなドメインモデル 名前探しリッチなドメインモデル 名前探し
リッチなドメインモデル 名前探し
 
ビッグデータ処理データベースの全体像と使い分け
2018年version
ビッグデータ処理データベースの全体像と使い分け
2018年versionビッグデータ処理データベースの全体像と使い分け
2018年version
ビッグデータ処理データベースの全体像と使い分け
2018年version
 
Java ORマッパー選定のポイント #jsug
Java ORマッパー選定のポイント #jsugJava ORマッパー選定のポイント #jsug
Java ORマッパー選定のポイント #jsug
 
君はyarn.lockをコミットしているか?
君はyarn.lockをコミットしているか?君はyarn.lockをコミットしているか?
君はyarn.lockをコミットしているか?
 
世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture
 
DDDはオブジェクト指向を利用してどのようにメンテナブルなコードを書くか
DDDはオブジェクト指向を利用してどのようにメンテナブルなコードを書くかDDDはオブジェクト指向を利用してどのようにメンテナブルなコードを書くか
DDDはオブジェクト指向を利用してどのようにメンテナブルなコードを書くか
 
SQL大量発行処理をいかにして高速化するか
SQL大量発行処理をいかにして高速化するかSQL大量発行処理をいかにして高速化するか
SQL大量発行処理をいかにして高速化するか
 
それはYAGNIか? それとも思考停止か?
それはYAGNIか? それとも思考停止か?それはYAGNIか? それとも思考停止か?
それはYAGNIか? それとも思考停止か?
 
なぜ、いま リレーショナルモデルなのか(理論から学ぶデータベース実践入門読書会スペシャル)
なぜ、いま リレーショナルモデルなのか(理論から学ぶデータベース実践入門読書会スペシャル)なぜ、いま リレーショナルモデルなのか(理論から学ぶデータベース実践入門読書会スペシャル)
なぜ、いま リレーショナルモデルなのか(理論から学ぶデータベース実践入門読書会スペシャル)
 
こんなに使える!今どきのAPIドキュメンテーションツール
こんなに使える!今どきのAPIドキュメンテーションツールこんなに使える!今どきのAPIドキュメンテーションツール
こんなに使える!今どきのAPIドキュメンテーションツール
 
Pythonによる黒魔術入門
Pythonによる黒魔術入門Pythonによる黒魔術入門
Pythonによる黒魔術入門
 

More from Takahiro Inoue

Treasure Data × Wave Analytics EC Demo
Treasure Data × Wave Analytics EC DemoTreasure Data × Wave Analytics EC Demo
Treasure Data × Wave Analytics EC DemoTakahiro Inoue
 
トレジャーデータとtableau実現する自動レポーティング
トレジャーデータとtableau実現する自動レポーティングトレジャーデータとtableau実現する自動レポーティング
トレジャーデータとtableau実現する自動レポーティングTakahiro Inoue
 
Tableauが魅せる Data Visualization の世界
Tableauが魅せる Data Visualization の世界Tableauが魅せる Data Visualization の世界
Tableauが魅せる Data Visualization の世界Takahiro Inoue
 
トレジャーデータのバッチクエリとアドホッククエリを理解する
トレジャーデータのバッチクエリとアドホッククエリを理解するトレジャーデータのバッチクエリとアドホッククエリを理解する
トレジャーデータのバッチクエリとアドホッククエリを理解するTakahiro Inoue
 
20140708 オンラインゲームソリューション
20140708 オンラインゲームソリューション20140708 オンラインゲームソリューション
20140708 オンラインゲームソリューションTakahiro Inoue
 
トレジャーデータ流,データ分析の始め方
トレジャーデータ流,データ分析の始め方トレジャーデータ流,データ分析の始め方
トレジャーデータ流,データ分析の始め方Takahiro Inoue
 
オンラインゲームソリューション@トレジャーデータ
オンラインゲームソリューション@トレジャーデータオンラインゲームソリューション@トレジャーデータ
オンラインゲームソリューション@トレジャーデータTakahiro Inoue
 
事例で学ぶトレジャーデータ 20140612
事例で学ぶトレジャーデータ 20140612事例で学ぶトレジャーデータ 20140612
事例で学ぶトレジャーデータ 20140612Takahiro Inoue
 
トレジャーデータ株式会社について(for all Data_Enthusiast!!)
トレジャーデータ株式会社について(for all Data_Enthusiast!!)トレジャーデータ株式会社について(for all Data_Enthusiast!!)
トレジャーデータ株式会社について(for all Data_Enthusiast!!)Takahiro Inoue
 
この Visualization がすごい2014 〜データ世界を彩るツール6選〜
この Visualization がすごい2014 〜データ世界を彩るツール6選〜この Visualization がすごい2014 〜データ世界を彩るツール6選〜
この Visualization がすごい2014 〜データ世界を彩るツール6選〜Takahiro Inoue
 
Treasure Data Intro for Data Enthusiast!!
Treasure Data Intro for Data Enthusiast!!Treasure Data Intro for Data Enthusiast!!
Treasure Data Intro for Data Enthusiast!!Takahiro Inoue
 
Hadoop and the Data Scientist
Hadoop and the Data ScientistHadoop and the Data Scientist
Hadoop and the Data ScientistTakahiro Inoue
 
MongoDB: Intro & Application for Big Data
MongoDB: Intro & Application  for Big DataMongoDB: Intro & Application  for Big Data
MongoDB: Intro & Application for Big DataTakahiro Inoue
 
An Introduction to Fluent & MongoDB Plugins
An Introduction to Fluent & MongoDB PluginsAn Introduction to Fluent & MongoDB Plugins
An Introduction to Fluent & MongoDB PluginsTakahiro Inoue
 
An Introduction to Tinkerpop
An Introduction to TinkerpopAn Introduction to Tinkerpop
An Introduction to TinkerpopTakahiro Inoue
 
An Introduction to Neo4j
An Introduction to Neo4jAn Introduction to Neo4j
An Introduction to Neo4jTakahiro Inoue
 
The Definition of GraphDB
The Definition of GraphDBThe Definition of GraphDB
The Definition of GraphDBTakahiro Inoue
 
Large-Scale Graph Processing〜Introduction〜(完全版)
Large-Scale Graph Processing〜Introduction〜(完全版)Large-Scale Graph Processing〜Introduction〜(完全版)
Large-Scale Graph Processing〜Introduction〜(完全版)Takahiro Inoue
 
Large-Scale Graph Processing〜Introduction〜(LT版)
Large-Scale Graph Processing〜Introduction〜(LT版)Large-Scale Graph Processing〜Introduction〜(LT版)
Large-Scale Graph Processing〜Introduction〜(LT版)Takahiro Inoue
 

More from Takahiro Inoue (20)

Treasure Data × Wave Analytics EC Demo
Treasure Data × Wave Analytics EC DemoTreasure Data × Wave Analytics EC Demo
Treasure Data × Wave Analytics EC Demo
 
トレジャーデータとtableau実現する自動レポーティング
トレジャーデータとtableau実現する自動レポーティングトレジャーデータとtableau実現する自動レポーティング
トレジャーデータとtableau実現する自動レポーティング
 
Tableauが魅せる Data Visualization の世界
Tableauが魅せる Data Visualization の世界Tableauが魅せる Data Visualization の世界
Tableauが魅せる Data Visualization の世界
 
トレジャーデータのバッチクエリとアドホッククエリを理解する
トレジャーデータのバッチクエリとアドホッククエリを理解するトレジャーデータのバッチクエリとアドホッククエリを理解する
トレジャーデータのバッチクエリとアドホッククエリを理解する
 
20140708 オンラインゲームソリューション
20140708 オンラインゲームソリューション20140708 オンラインゲームソリューション
20140708 オンラインゲームソリューション
 
トレジャーデータ流,データ分析の始め方
トレジャーデータ流,データ分析の始め方トレジャーデータ流,データ分析の始め方
トレジャーデータ流,データ分析の始め方
 
オンラインゲームソリューション@トレジャーデータ
オンラインゲームソリューション@トレジャーデータオンラインゲームソリューション@トレジャーデータ
オンラインゲームソリューション@トレジャーデータ
 
事例で学ぶトレジャーデータ 20140612
事例で学ぶトレジャーデータ 20140612事例で学ぶトレジャーデータ 20140612
事例で学ぶトレジャーデータ 20140612
 
トレジャーデータ株式会社について(for all Data_Enthusiast!!)
トレジャーデータ株式会社について(for all Data_Enthusiast!!)トレジャーデータ株式会社について(for all Data_Enthusiast!!)
トレジャーデータ株式会社について(for all Data_Enthusiast!!)
 
この Visualization がすごい2014 〜データ世界を彩るツール6選〜
この Visualization がすごい2014 〜データ世界を彩るツール6選〜この Visualization がすごい2014 〜データ世界を彩るツール6選〜
この Visualization がすごい2014 〜データ世界を彩るツール6選〜
 
Treasure Data Intro for Data Enthusiast!!
Treasure Data Intro for Data Enthusiast!!Treasure Data Intro for Data Enthusiast!!
Treasure Data Intro for Data Enthusiast!!
 
Hadoop and the Data Scientist
Hadoop and the Data ScientistHadoop and the Data Scientist
Hadoop and the Data Scientist
 
MongoDB: Intro & Application for Big Data
MongoDB: Intro & Application  for Big DataMongoDB: Intro & Application  for Big Data
MongoDB: Intro & Application for Big Data
 
An Introduction to Fluent & MongoDB Plugins
An Introduction to Fluent & MongoDB PluginsAn Introduction to Fluent & MongoDB Plugins
An Introduction to Fluent & MongoDB Plugins
 
An Introduction to Tinkerpop
An Introduction to TinkerpopAn Introduction to Tinkerpop
An Introduction to Tinkerpop
 
An Introduction to Neo4j
An Introduction to Neo4jAn Introduction to Neo4j
An Introduction to Neo4j
 
The Definition of GraphDB
The Definition of GraphDBThe Definition of GraphDB
The Definition of GraphDB
 
Large-Scale Graph Processing〜Introduction〜(完全版)
Large-Scale Graph Processing〜Introduction〜(完全版)Large-Scale Graph Processing〜Introduction〜(完全版)
Large-Scale Graph Processing〜Introduction〜(完全版)
 
Large-Scale Graph Processing〜Introduction〜(LT版)
Large-Scale Graph Processing〜Introduction〜(LT版)Large-Scale Graph Processing〜Introduction〜(LT版)
Large-Scale Graph Processing〜Introduction〜(LT版)
 
Advanced MongoDB #1
Advanced MongoDB #1Advanced MongoDB #1
Advanced MongoDB #1
 

Recently uploaded

APIForce Zurich 5 April Automation LPDG
APIForce Zurich 5 April  Automation LPDGAPIForce Zurich 5 April  Automation LPDG
APIForce Zurich 5 April Automation LPDGMarianaLemus7
 
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Mark Simos
 
Understanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitectureUnderstanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitecturePixlogix Infotech
 
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr LapshynFwdays
 
Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Scott Keck-Warren
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebUiPathCommunity
 
"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr BaganFwdays
 
Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 3652toLead Limited
 
Scanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsScanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsRizwan Syed
 
Pigging Solutions in Pet Food Manufacturing
Pigging Solutions in Pet Food ManufacturingPigging Solutions in Pet Food Manufacturing
Pigging Solutions in Pet Food ManufacturingPigging Solutions
 
SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024Scott Keck-Warren
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek SchlawackFwdays
 
Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubKalema Edgar
 
Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Mattias Andersson
 
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Patryk Bandurski
 
My INSURER PTE LTD - Insurtech Innovation Award 2024
My INSURER PTE LTD - Insurtech Innovation Award 2024My INSURER PTE LTD - Insurtech Innovation Award 2024
My INSURER PTE LTD - Insurtech Innovation Award 2024The Digital Insurer
 
Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfAddepto
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfAlex Barbosa Coqueiro
 
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationBeyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationSafe Software
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brandgvaughan
 

Recently uploaded (20)

APIForce Zurich 5 April Automation LPDG
APIForce Zurich 5 April  Automation LPDGAPIForce Zurich 5 April  Automation LPDG
APIForce Zurich 5 April Automation LPDG
 
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
 
Understanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitectureUnderstanding the Laravel MVC Architecture
Understanding the Laravel MVC Architecture
 
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
 
Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio Web
 
"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan
 
Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365
 
Scanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsScanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL Certs
 
Pigging Solutions in Pet Food Manufacturing
Pigging Solutions in Pet Food ManufacturingPigging Solutions in Pet Food Manufacturing
Pigging Solutions in Pet Food Manufacturing
 
SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
 
Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding Club
 
Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?
 
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
 
My INSURER PTE LTD - Insurtech Innovation Award 2024
My INSURER PTE LTD - Insurtech Innovation Award 2024My INSURER PTE LTD - Insurtech Innovation Award 2024
My INSURER PTE LTD - Insurtech Innovation Award 2024
 
Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdf
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdf
 
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationBeyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brand
 

「GraphDB徹底入門」〜構造や仕組み理解から使いどころ・種々のGraphDBの比較まで幅広く〜

  • 1. Graph DB GraphDB doryokujin +WEB ( Tokyo.Webmining #9-2)
  • 2. [Me] doryokujin 2 2 33 [Company] 1
  • 3. [ ] MongoDB JP TokyoWebMining MongoDB [ ] MongoDB MongoDB GraphDB
  • 4. #1 [MongoTokyo] Mongo DB Congerence in Japan 2011 03 01 10gen 3 … http://www.10gen.com/conferences/ mongotokyo2011
  • 5. #2 [gihyo ] gihyo.jp 2 DocumentDB GraphDB NoSQL
  • 6. Graph Graph Graph DB Graph Traversal Graph DB Neo4j, Sones, InfoGrid, OrientDB, InfiniteGraph Tinker Pop Gremlin, Blueprints, Pipes, Rexster, Mutant
  • 7. Graph Graph Graph Graph DB Graph Traversal Graph DB Neo4j, Sones, InfoGrid, OrientDB, InfiniteGraph Tinker Pop Gremlin, Blueprints, Pipes, Rexster, Mutant
  • 8. Graph: Graph Graph DB Graph
  • 9. Graph [Graph] Dots Lines vertices edges 1 (relationship) Dots Lines Graph
  • 10. Undirected Graph [ (Undirected) Graph] Vertices: Edges: (relationship) (symmetric)
  • 11. Directed Graph [ (Directed) Graph] Vertices: Edges: (relationship) (asymmetric)
  • 12. Directed / Underected Graph friend follow friend follow follow friend follow [Facebook] [Twitter] ”Undirected Graph” Follow ”Directed Graph” ” ” ” ” ”friends” ”follow”
  • 13. Single-Relational Graph Single-Relational Structures → Undirected / Directed Graph Single-Relatinal 1 Graph
  • 14. Single-Relational Graph friend follow friend follow follow friend follow [Facebook] [Twitter] ”Undirected Graph” Follow ”Directed Graph” ”Facebook ” ”Twitter ” ”friends” ”follow”
  • 15. Single-Relational Reply num:5 Reply Block num:5 Reply DM num:5 num:1 RT RT Reply DM num:2 num:2 num:2 num:1 [Twitter] Graph ”Directed Graph” ”Twitter ” ”Reply”,”RT”,”DM”,”Block”
  • 16. *Facebook Flickr lives_in is is is follow lives_in friend is share * friend share follow follow is [ ] lives_in Undirected Directed is is is lives_in
  • 17. Multi-Relational Graph Multi-Relational Structures lives_in: User → Country Share: Facebook → Flikcr
  • 18. Multi-Relational Reply Reply Block DM Reply RT RT Reply DM [Twitter] ”Twitter ” ”Reply”,”RT”,”DM”,”Block”
  • 19. Multi-Relational *Facebook Flickr lives_in has has has follow lives_in friend has share * has friend share follow lives_in [Multi-Relatinal Graph] has has has lives_in
  • 20. Property Graph Property Graph Multi-Relational Graph (Property) Graph DB Graph 1 key/value id id_A follow id id_B follow 100 follow 500 follower 200 date 2011/01/23 follower 1000
  • 21. Property Graph Reply num:5 Reply Block num:5 Reply DM num:5 num:1 RT RT Reply DM num:2 num:2 num:2 num:1 Graph ”Property Graph” ”Twitter ” ”Reply”,”RT”,”DM”,”Block” ”num”
  • 22. Property Graph name doryokujin sex man lives_in birth 1985/05/14 has has id id_B follow follow 1000 follower 2000 lives_in date 2011/01/23 friend has friend date 2011/01/23 has friend follow follow date 2010/03/23 date 2011/01/23 name full name mail xxx@yyy address zzz lives_in id id_A follow 100 follower 200 has has date 2010/03/23 lives_in
  • 23. Graph The Graph Traversal Pattern
  • 24. Property Graph Property Graph Graph Property Graph Graph DB Tinker Pop Hyper Graph
  • 25. Graph DB Gragh Graph Graph DB Graph Traversal Graph DB Neo4j, Sones, InfoGrid, OrientDB, InfiniteGraph Tinker Pop Gremlin, Blueprints, Pipes, Rexster, Mutant
  • 26. Graph DB: Property Graph DB “Graph DB”
  • 27. Graph DB [ DB ≠ Graph DB] Graph DB DB Graph DB
  • 28. RDB Graph [Relatinal Database] A outV inV A B B C A C C D D D A
  • 29. Document DB Graph [Document Database] A { A : { out : [B, C], in : [D] } B : { in : [A] B C } C : { out : [D], in : [A] } D : { out : [A], in : [C] D } }
  • 30. XML DB Graph [XML Database] A <graphml> <graph> <node id=A /> <node id=B /> B C <node id=C /> <edge source=A target=B /> <edge source=A target=C /> <edge source=C target=D /> <edge source=D target=A /> </graph> D </graphml>
  • 31. Graph DB [ ] “A graph database is any storage system that provides index-free adjacency” The Graph Traversal Programming Pattern (“adjacent”) ( “index-free” )
  • 32. Non-Graph DB and Index-Based Adjacency B E 1. A 3. (B,C) A A B C B, C E D, E D E 2. C D log_2(n) (B,C) time cost
  • 33. Graph DB and Index-Free Adjacency ‣ ”Mini - Index” B E ‣ 1. 1 A (B,C) ‣ C D id id_B follow 1000 follower 2000
  • 34. Property (key/value) The Graph Traversal Programming Pattern
  • 35. GraphDB: Graph Traversal Graph DB Graph DB Query
  • 36. Graph DB Query Graph Query = Graph Traversal Traversal = Root Graph Graph Traversal (Root) Index-Free Adjacency
  • 37. private  void  printFriends(  Node  person  ) {        Traverser  traverser  =  person.traverse(                Order.BREADTH_FIRST,    //                  StopEvaluator.END_OF_GRAPH,  //  Graph                ReturnableEvaluator.ALL_BUT_START_NODE,  //  Root  Node                MyRelationshipTypes.KNOWS,  //  ”KNOWS”                Direction.OUTGOING  );  //          for  (  Node  friend  :  traverser  )        {      //   Node ”name”                System.out.println(  friend.getProperty(  "name"  )  );        } Neo4j Wiki }
  • 38. 1 3 1 2 Trinity Morpheus Cypher Agent  Smith Neo4j Wiki
  • 39. private  void  findHackers(  Node  startNode  ) Neo4j Wiki {        Traverser  traverser  =  startNode.traverse(                Order.BREADTH_FIRST,  //                  StopEvaluator.END_OF_GRAPH,  //  Graph                new  ReturnableEvaluator()  //                  {                        public  boolean  isReturnableNode(  TraversalPosition  currentPosition  )                        {                                Relationship  rel  =  currentPosition.lastRelationshipTraversed();                                if  (  rel  !=  null  &&  rel.isType(  MyRelationshipTypes.CODED_BY  )  )                                {                                        return  true;  //  “CODED_BY”                                  }                                return  false;  //                          }                },  //   2                MyRelationshipTypes.CODED_BY,  Direction.OUTGOING,  //                  MyRelationshipTypes.KNOWS,  Direction.OUTGOING  );  //          for  (  Node  hacker  :  traverser  )        {                TraversalPosition  position  =  traverser.currentPosition();                System.out.println(  "At  depth  "  +  position.depth()  +  "  =>  "                        +  hacker.getProperty(  "name"  )  );        } ∴  At  depth  4  =>  The  Architect
  • 40. Graph DB [Data Locality] [Local Search, Social Network] 2 [Transition] Web [Recommendation]
  • 41. [Graph Problems] [Shortest Path] 2 GraphDB Traversal Neo4jrb
  • 42. Graph DB ” ” 10 ”Knows” Tables, Documents, Key/Value Model GraphDB Union, Intersection, Join
  • 43. Graph DB [ ] Property Graph Index-Free Adjacency Graph Query = Graph Traversal Data Locality
  • 44. Graph DB Graph Graph Graph DB Graph Traversal Graph DB Neo4j, Sones, InfoGrid, OrientDB, InfiniteGraph Tinker Pop Gremlin, Blueprints, Pipes, Rexster, Mutant
  • 45. Neo4j
  • 46. Neo4j [ ] HP Java AGPLv3 2003 24 8 2009 VC ACID Propety Graph Model / Gremlin Lucene
  • 47. Neo4j [Language Binding - Framework] Python - Django Ruby - Ruby on Rails Clojure Scala Groovy - Griffin / Grails Java - Spring Framework Ruby Ruby Java
  • 48. Neo4j [Tools] Shell Shell Graph Traverse Indexing neo4j-server Neo4j REST API Admin tools Online BackUp Neoclipse Neo4j ↑ Batch Insert
  • 49. Neo4j [ver. 1.2] 1.2 Neo4j Server REST API Admin Interface High Availability Kernel
  • 50. sones
  • 51. sones [ ] HP C# AGPLv3 2011 VC ACID REST Interface Property Graph Model / Gremlin : Property Hyper Graph Graph Query Language(GQL)
  • 52. sones [GQL] SQL Traversal Cheat Sheet Query • FROM User SELECT User.Friends.Friends.Name // aggregation • SELECT COUNT(User.Friends) • SELECT User.Friends.Random(2) • SELECT User.Friends.Name.Substring(2,5)
  • 54. Orient DB [ ] HP Java Apache2.0 1997 C++ → Java Document-Graph DB ACID Shell / REST Interface Propety Graph Model / Gremlin
  • 55. Orient DB [Document-Graph DB] [ ] Orient DB Object DB Key/Value Server Document DB // DATABASE OPEN ODatabaseDocumentTx db = new ODatabaseDocumentTx("remote:localhost/petshop").open ("admin", "admin"); // Document ODocument doc = new ODocument(db, "Person"); doc.field( "name", "Luke" ); doc.field( "surname", "Skywalker" ); doc.field( "city", new ODocument(db, "City").field("name","Rome").field("country", "Italy") );               // Transaction doc.save(); db.close();
  • 56. Orient DB [Document-Graph DB] OGraphVertex OGraphEdge OGraphElement ODocumentWrapper Document SQL SELECT FROM OGraphVertex WHERE outEdges CONTAINS ( label = 'knows' ) //7 ”knows” SELECT FROM OGraphVertex WHERE outEdges TRAVERSE(0,7,'out,outEdges') ( @class = 'OGraphEdge' and label = 'knows' )
  • 57. Orient DB [Language Binding Using Binary Protocol] Java C PHP JRuby (Ruby: soon) [Language Binding Using REST Protocol] Python Java Script
  • 59. InfoGrid [ ] HP JAVA AGPLv3 ACID REST Interface MeshObject Graph MeshBase _GDB = StoreMeshBase.create(_MySQLStore); MeshObject _xkcd = _GDB.getMeshObjectLifecycleManager ().createMeshObject(); _xkcd.setProperty("Name", "xkcd"); _xkcd.setProperty("Url", "http://www.xkcd.com"); _xkcd.relate(_good)
  • 61. Infinite Graph [ ] HP C++ Academic and Start Up 2010 6 Distributed Graph DB ↑Objectivity/DB: distributed database server
  • 62.
  • 63. Graph DB: Data SQL Like GraphDB License Language Protocol Gremlin Binding Model Query REST/ Property Ruby, Python, Neo4j AGPLv3 Java Yes Scala,... - JSON Graph REST/ Property sones AGPLv3 C# JSON Graph Yes - Yes (XML) (+Extend) REST/ Property PHP, Jruby, OrientDB Apache2.0 Java Yes Python, JS,... Yes JSON Graph Property REST/ Info Grid AGPLv3 Java Graph? - - - JSON (MeshObject) Infinite Property Product C++ - - - - Graph Graph
  • 64. Graph DB [ ] Graph DB Neo4j Open Source Social Graph Software Not Ready Yet Graph DB Hypergtaph: PropertyGraph HyperGraph Pregel: bulk synchronous parallel model Distributed DB Google FlockDB: Distributed DB for storing adjancency lists Twitter
  • 65. Tinker Pop Graph Graph Graph DB Graph Traversal Graph DB Neo4j, Sones, InfoGrid, OrientDB, InfiniteGraph Tinker Pop Gremlin, Blueprints, Pipes, Rexster, Mutant
  • 67. Tinker Pop [Tinker Pop] HP Property Graph Model GraphDB Blueprints: A Property Graph Model Interface Gremlin: A Graph Traversal Language Pipes: A Data Flow Framework using Process Graphs Rexster: A RESTful Graph Shell Mutant: A Poly-ScriptEngine ScriptEngine
  • 70. BluePrints [ ] HP GraphDB ”JDBC” Property Graph Model GraphDB [Now] Tinker Graph: in-memory property graph model Sail: Open RDF Neo4j, Orient DB, sones, ... [Future] Redis Infinite Graph, Dex
  • 71. BluePrints GraphDB Graph graph = new Neo4jGraph("/tmp/graph/neo4j"); // Graph graph = new OrientGraph("/tmp/graph/orientdb"); Vertex a = graph.addVertex(null); Vertex b = graph.addVertex(null); a.setProperty("name","marko"); b.setProperty("name","aaron"); Edge e = graph.addEdge(null,a,b,"knows"); e.setProperty("since",2010); graph.shutdown();
  • 72. BluePrints Transaction graph.startTransaction(); try{   Vertex luca = graph.addVertex(null);   luca.setProperty( "name", "Luca" );   Vertex marko = graph.addVertex(null);   marko.setProperty( "name", "Marko" );   Edge lucaKnowsMarko = graph.addEdge(null, luca, marko,"knows");   graph.stopTransaction(Conclusion.SUCCESS); } catch( Exception e ) {   graph.stopTransaction(Conclusion.FAILURE); }
  • 74. Gremlin [ ] HP Gremlin = Graph Programing Language Blueprints GraphDB Shell GraphDB Query Java + Groovy
  • 75. Gremlin Property Graph Basic Graph Traversals
  • 76. doryokujin$ ./gremlin.sh ,,,/ (o o) -----oOOo-(_)-oOOo----- gremlin>  g  =  TinkerGraphFactory.createTinkerGraph() ==>tinkergraph[vertices:6  edges:6]  // 6 6 gremlin>  g.class ==>class   com.tinkerpop.blueprints.pgm.impls.tg.TinkerGraph gremlin>  //   gremlin>  g.V ==>v[3] ==>v[2] ... gremlin>  //   gremlin>  g.E ==>e[10][4-­‐created-­‐>5] ==>e[7][1-­‐knows-­‐>2] ==>e[9][1-­‐created-­‐>3] ... Getting Srarted
  • 77. gremlin>  v  =  g.v(1)  //  id=1   ==>v[1] gremlin>  v.keys()  //   ==>age ==>name gremlin>  v.values()  //   ==>29 ==>marko gremlin>  v.name  +  '  is  '  +  v.age  +  '  years  old.' ==>marko  is  29  years  old. gremlin>  //  id=1,  name=marko   gremlin>  v.outE ==>e[7][1-­‐knows-­‐>2] ==>e[9][1-­‐created-­‐>3] ==>e[8][1-­‐knows-­‐>4] gremlin>  //   gremlin>  v.outE.weight ==>0.5 ==>0.4 ==>1.0 Getting Srarted
  • 78. gremlin>  //  id=1 1.0 gremlin>  v.outE{it.weight  <  1.0}.inV ==>v[2] ==>v[3] gremlin>  //   gremlin>  list  =  []                                                           gremlin>  v.outE{it.weight  <  1.0}.inV  >>  list ==>v[2] ==>v[3] gremlin>  //  list property  maps gremlin>  list.collect{  it.map()  } ==>{name=vadas,  age=27} ==>{name=lop,  lang=java} gremlin>  //  list gremlin>  list.inE()               ==>e[7][1-­‐knows-­‐>2] ==>e[9][1-­‐created-­‐>3] ... Getting Srarted
  • 79. gremlin>  list.inE{it.label=='knows'}    //   'knows' ==>e[7][1-­‐knows-­‐>2] gremlin>  list.inE()[[label:'knows']]  //   ==>e[7][1-­‐knows-­‐>2] gremlin>  list.inE()[[label:'knows']].outV.name  // :name   ==>marko Getting Srarted ~20000ms:  g.V.outE{it['label']=='followed_by'}.inV.outE{it['label']=='followed_by'}.inV.outE                      {it['label']=='followed_by'}.inV  >>-­‐1 ~9000ms:    g.V.outE{it.label=='followed_by'}.inV.outE{it.label=='followed_by'}.inV.outE                    {it.label=='followed_by'}.inV  >>-­‐1 ~8500ms:    g.V.outE{it.getLabel()=='followed_by'}.inV.outE{it.getLabel()=='followed_by'}.inV.outE                            {it.getLabel()=='followed_by'}.inV  >>-­‐1 ~6000ms:    g.V.outE[[label:'followed_by']].inV.outE[[label:'followed_by']].inV.outE                      [[label:'followed_by']].inV  >>-­‐1 ClosureFilterPipe vs. PropertyFIlterPipe
  • 81. Pipes [ ] HP Pipes = Data Flow Framework Pipes Graph Traversal 1 1 Pipes filtering, splitting, merging, traversing,...
  • 82. Gremlin g:id-v('a')/outE[@label='knows']/inV/outE[@label='develops']/inV/@name Pipe pipe1 = new VertexEdgePipe(Step.OUT_EDGES); Pipe pipe2 = new LabelFilterPipe("knows", Filter.NOT_EQUALS); Pipe pipe3 = new EdgeVertexPipe(Step.IN_VERTEX); Pipe pipe4 = new VertexEdgePipe(Step.OUT_EDGES); Pipe pipe5 = new LabelFilterPipe("develops", Filter.NOT_EQUALS); Pipe pipe6 = new EdgeVertexPipe(Step.IN_VERTEX); Pipe pipe7 = new PropertyPipe("name"); Pipe pipeline = new Pipeline (pipe1,pipe2,pipe3,pipe4,pipe5,pipe6,pipe7); pipeline.setStarts(new SingleIterator(graph.getVertex("a")); for(String name : pipeline) {   System.out.println(name); } A Graph Processing Stack
  • 83. Pipes Pipes public  class  NumCharsPipe  extends  AbstractPipe<String,Integer>  {    public  Integer  processNextStart()  {        String  word  =  this.starts.next();        return  word.length();    } } A Graph Processing Stack
  • 85. Rexster [ ] HP Rexster = A RESTful Graph Shell Blueprints GraphDB RESTful API (JSON) Gremlin
  • 86. > http://localhost:8182/examplegraph/vertices/b {   "version":"0.1",   "results": {     "_type":"vertex",     "_id":"b",     "name":"aaron",     "type":"person"   },   "query_time":0.1537 } A Graph Processing Stack // g:key-v('name','DARK STAR')[0]: Usin gGremlin Code > http://localhost:8182/gratefulgraph/traversals/gremlin? script=g:key-v%28%27name%27,%27DARK%20STAR%27%29[0] {    "results":  [{        "_type":"vertex",        "_id":"89",        "name":"DARK  STAR",        "song_type":"original",        "performances":219,        "type":"song"}    ],    "query_time":6.753024,    "success":true,    "version" } Using Gremilin
  • 88. Mutant [ ] HP Mutant = A Poly-ScriptEngine ScriptEngine JVM Script Engine
  • 89. Mutant Console marko:~/software/mutant$  ./mutant.sh              //          oO  ~~-­‐_ ___m(___m___~.___    MuTanT  0.1-­‐SNAPSHOT _|__|__|__|__|__|          [  ?h  =  help  ] [gremlin]  gremlin  0.6-­‐SNAPSHOT [Groovy]  Groovy  Scripting  Engine  2.0 [ruby]  JSR  223  JRuby  Engine  1.5.5 [ECMAScript]  Mozilla  Rhino  1.6  release  2 [AppleScript]  AppleScriptEngine  1.0 mutant[gremlin]>  $x  :=  12 [12] mutant[gremlin]>  ?x mutant[AppleScript]>  ?x mutant[Groovy]>  $x 12 mutant[Groovy]>  ?x mutant[ruby]>  $x 12 mutant[ruby]>  ?x mutant[ECMAScript]>  $x 12 Basic Examples
  • 90. [ ] Graph DB Graph DB Graph Partitioning Pregel Neo4j
  • 91. … ※ Graph DB http://snap.stanford.edu/data/index.html