com.tinkerpop.pipes.Pipe 实现可以安全地缓存并稍后在其他图形实例上重用吗?
Is com.tinkerpop.pipes.Pipe implementation safe to cache and re-use later on other graph instances?
我目前正在创建一个管道,如下面第 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>
我从不相信 reset
尽管 javadocs 在这件事上说了什么,但是这个测试似乎有效:
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()
本身在编译后缓存脚本,因此将来调用 "recreate" 该管道应该比第一次调用 compile
快得多。
我目前正在创建一个管道,如下面第 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>
我从不相信 reset
尽管 javadocs 在这件事上说了什么,但是这个测试似乎有效:
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()
本身在编译后缓存脚本,因此将来调用 "recreate" 该管道应该比第一次调用 compile
快得多。