[ 
https://issues.apache.org/jira/browse/TINKERPOP-1140?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15145753#comment-15145753
 ] 

ASF GitHub Bot commented on TINKERPOP-1140:
-------------------------------------------

Github user dkuppitz commented on the pull request:

    
https://github.com/apache/incubator-tinkerpop/pull/227#issuecomment-183578927
  
    * `mvn clean install`: passed
    * integration tests: passed
    
    Looking forward to try that out and see it in action.
    
    VOTE: +1


> TraversalVertexProgramStep in support of OLAP/OLTP conversions.
> ---------------------------------------------------------------
>
>                 Key: TINKERPOP-1140
>                 URL: https://issues.apache.org/jira/browse/TINKERPOP-1140
>             Project: TinkerPop
>          Issue Type: Improvement
>          Components: process
>    Affects Versions: 3.1.0-incubating, 3.1.1-incubating, 3.1.2-incubating
>            Reporter: Marko A. Rodriguez
>             Fix For: 3.2.0-incubating
>
>
> This was moved from TINKERPOP-971. TINKERPOP-971 was about TraversalSource 
> fluency. This is a feature we can now do because of that work. Isolated this 
> feature in a new ticket.
> --------------
> Check this idea out:
> {code}
> g = graph.traversal().withComputer(graph -> 
> graph.compute(SparkGraphComputer.class).workers(10));
> g.V().out().values('name')
> {code}
> This would compile to:
> {code}
> [TraversalVertexProgramStep([GraphStep,VerticesStep,PropertiesStep]),ComputerResultStep]
> {code}
> where,
> {code}
> TraversalVertexProgramStep<Graph,ComputerResult>
> ComputerResultStep<ComputerResult,E>
> {code}
> Next, check this:
> {code}
> g = graph.traversal().withComputer(graph -> 
> graph.compute(SparkGraphComputer.class).workers(10));
> g.V().hasLabel('person').pageRank(out('knows')).order().by('page.rank',decr)
> {code}
> This will compile to:
> {code}
> [TraversalVertexProgramStep([GraphStep,HasStep]),PageRankVertexProgramStep([VerticesStep]),TraversalVertexProgramStep([OrderStep]),ComputerResultStep]
> {code}
> How does this work?!
> * TraversalVertexProgramStep will pass a {{ComputerResult}} to 
> PageRankVertexProgram.
> ** The ComputerResult.graph() will have HALTED_TRAVERSERS properties on all 
> the person vertices (as that is what was computed by the vertex program).
> * PageRankVertexProgram will then pass a {{ComputerResult}} to the next 
> TraversalVertexProgram.
> ** That ComputerResult.graph() will have HALTED_TRAVERSER on all the person 
> vertices and PAGE_RANK on all the vertices.
> * TraversalVertexProgram will then execute OrderStep which sorts the 
> person-vertices with HALTED_TRAVERSERS on them by their page.rank properties 
> computed previously.
> * ComputerResultStep will then take get the ComputerResult.memory.reducing 
> and iterate it out.
> {{ComputerResultStep}} (like now) is smart about either pulling from the 
> graph or from the sideEffect memory. What makes things different from now is 
> that {{TraversalVertexProgramStep}} will come into existence and pull out the 
> respective logic from {{ComputerResultStep}}. In this way, It will be 
> possible to chain {{{XXXVertexProgramStep}}-steps and thus, have a traversal 
> that is multiple OLAP jobs in sequence and thus, this ticket will fall 
> naturally from this https://issues.apache.org/jira/browse/TINKERPOP-570. The 
> whole trick to all of this is that (as we currently do) we save the state of 
> the computation in the graph (and memory) and thus, feeding program into the 
> next just takes over the computation. PageRankVertexProgram doesn't use 
> HALTED_TRAVERSERS in its computation, so it just ignores it. However, 
> TraversalVertexProgram can later access PAGE_RANK and thus, use the results 
> of the previous OLAP computation.
> Finally, you want "lambda vertex programs?"
> {code}
> g = graph.traversal().withComputer(graph -> 
> graph.compute(SparkGraphComputer.class).workers(10));
> myProgram = MyVertexProgram.build().create();
> g.V().program(myProgram).values('myProgramCounters')
> {code}
> which compiles to:
> {code}
> [TraversalVertexProgramStep([GraphStep]),LambdaVertexProgramStep(MyVertexProgram),TraversalVertexProgramStep([PropertiesStep]),ComputerResultStep]
> {code}
> Thus, just like {{filter()}},{{flatMap()}}, etc....



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to