com.tinkerpop.pipes.Pipe实现是否可以安全地缓存并稍后在其他图形实例上重用?

时间:2015-07-03 00:53:54

标签: gremlin tinkerpop

我目前正在创建一个Pipe,如下面第2行所示。

Pipe pipe = Gremlin.compile("_().out('knows').name");

创建它之后,我正在缓存它,以便可以在下面的不同图形中重复使用

Graph graph = TinkerGraphFactory.createTinkerGraph();
pipe.setStarts(new SingleIterator<Vertex>(graph.getVertex(1)));
for(Object name : pipe) 
{
  System.out.println((String) name);
}

我想知道这是否正常?我问,因为javadoc of AbstractPipe

public void reset()
Description copied from interface: Pipe
A pipe may maintain state. Reset is used to remove state. The general use case for reset() is to reuse a pipe in another computation without having to create a new Pipe object. An implementation of this method should be recursive whereby the starts (if a Pipe) should have this method called on it.
Specified by:
reset in interface Pipe<S,E>

1 个答案:

答案 0 :(得分:1)

尽管javadocs在这个问题上说了什么,但我从未信任reset,但是这个测试似乎有效:

gremlin> pipe = _().out('knows').name;null              
==>null
gremlin> pipe.setStarts(new SingleIterator<Vertex>(g.getVertex(1)));    
==>null
gremlin> pipe
==>vadas
==>josh
gremlin> pipe
gremlin> pipe.setStarts(new SingleIterator<Vertex>(g.getVertex(1)));
==>null
gremlin> pipe                                                       
==>vadas
==>josh

调用setStarts似乎正确地重置了管道中的迭代器,但reset本身似乎没有太大作用:

gremlin> pipe.setStarts(new SingleIterator<Vertex>(g.getVertex(1)));
==>null
gremlin> pipe                                                       
==>vadas
==>josh
gremlin> pipe.reset()
==>null
gremlin> pipe
gremlin>

所有这一切,我不确定缓存Pipeline是否能为您节省很多。 Pipeline创建非常便宜,Gremlin.compile()本身在编译后缓存脚本,因此将来“重新创建”该管道的调用应该比第一次调用compile快得多。