[ https://issues.apache.org/jira/browse/TINKERPOP-1140?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15145957#comment-15145957 ]
ASF GitHub Bot commented on TINKERPOP-1140: ------------------------------------------- Github user spmallette commented on the pull request: https://github.com/apache/incubator-tinkerpop/pull/227#issuecomment-183658257 very cool - all tests pass for me 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)