使用ID作为String vs Long时,TinkerGraph检索不一致

时间:2016-12-30 09:14:48

标签: gremlin

当我在TinkerGrapg中存储一个顶点时,我发现id很长:

{TinkerVertex@7955} "v[304]"

当我这样做时:

graph.V(304).next(); 

它不起作用!

当我这样做时:

graph.V("304").next(); 

它不起作用!

当我这样做时:

graph.V(304l).next(); 

graph.V(new Long(304)).next();

它有效!

我试图对TinkerGraph和DSE Graph使用相同的Gremlin代码。问题是一个返回long而另一个返回字符串

我很好奇我如何能够同时使用int / long和String id同样的Gremlin工作..这是API的问题吗?

谢谢!

1 个答案:

答案 0 :(得分:4)

TinkerGraph使用和IdManager可以将标识符强制转换为不同类型。您可以阅读有关here的更多信息,但基本上如果您希望g.V(1)g.V(1L)都返回您想要配置TinkerGraph的值,如下所示:

gremlin> conf = new BaseConfiguration()
==>org.apache.commons.configuration.BaseConfiguration@552518c3
gremlin> conf.setProperty('gremlin.tinkergraph.vertexIdManager',"LONG")
gremlin> graph = TinkerGraph.open(conf)
==>tinkergraph[vertices:0 edges:0]
gremlin> g = graph.traversal()
==>graphtraversalsource[tinkergraph[vertices:0 edges:0], standard]
gremlin> g.addV(id, 1L)
==>v[1]
gremlin> g.addV(id, 2)
==>v[2]
gremlin> g.V(1)
==>v[1]
gremlin> g.V(1L)
==>v[1]
gremlin> g.V(2L)
==>v[2]
gremlin> g.V(2)
==>v[2]

事实上,使用IdManager

时,即使这样也行
gremlin> g.V("2")
==>v[2]

如果您愿意,可以为TinkerGraph指定自己的IdManager实现 - 只需为配置提供完全限定的类名(即代替“LONG”)。