使用 id 作为 String 与 Long 时,TinkerGraph 检索不一致
TinkerGraph retrieval inconsistency when using ids as String vs Long
当我在 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 代码。问题是一个 returns long
而另一个作为字符串
我很好奇如何让同一个 Gremlin 同时使用 int/long 和字符串 ID。这是 API 的问题吗?
谢谢!
TinkerGraph 使用 IdManager
可以将标识符强制转换为不同的类型。您可以阅读有关 here 的更多信息,但基本上如果您想要 g.V(1)
和 g.V(1L)
都 return 一个值,您需要按如下方式配置 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")。
当我在 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 代码。问题是一个 returns long
而另一个作为字符串
我很好奇如何让同一个 Gremlin 同时使用 int/long 和字符串 ID。这是 API 的问题吗?
谢谢!
TinkerGraph 使用 IdManager
可以将标识符强制转换为不同的类型。您可以阅读有关 here 的更多信息,但基本上如果您想要 g.V(1)
和 g.V(1L)
都 return 一个值,您需要按如下方式配置 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")。