我目前正在创建一个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>
答案 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
快得多。