java - 使用 Java/Scala 的远程 Gremlin 服务器图突变

标签 java server gremlin tinkerpop

我正在尝试使用遍历在远程 Gremlin 服务器上修改顶点,但似乎只有在创建顶点的遍历中我还可以添加属性,当开始​​新的遍历时我不添加属性。

Scala/Java集群连接设置代码:

val mapper = GryoMapper.build()
val cluster = Cluster.build().serializer(new GryoMessageSerializerV1d0(mapper)).create
val client = cluster.connect[org.apache.tinkerpop.gremlin.driver.Client.ClusteredClient]()
val graph = EmptyGraph.instance()
val g = graph.traversal().withRemote(DriverRemoteConnection.using(cluster, "g"))

这个有效:

val v1 = g.addV("person").property("name","stephen").next()

这不是:

g.V(v1.id()).property("age","27")

这也不会甚至抛出 java.lang.IllegalStateException (propertyAdditionNotSupported) 因为顶点是 org.apache.tinkerpop.gremlin.structure.util.reference.ReferenceVertex:

v1.property("age","27")

如果我使用 Gremlin 控制台并远程连接到 Gremlin 服务器,我可以毫无问题地进行这两项操作。

:remote connect tinkerpop.server conf/remote.yaml
gremlin> :> g.addV('person').property('name','stephen')
==>v[82128]
gremlin> :> g.V(82128).property('age','27')
==>v[82128]
gremlin> :> g.V(82128).valueMap()
==>[name:[stephen],age:[27]]

是 Java 远程实现有问题还是我遗漏了什么?

最佳答案

我不确定您使用的是哪种 Graph 实现,但这对我来说适用于 TinkerGraph:

gremlin> graph = EmptyGraph.instance()
==>emptygraph[empty]
gremlin> cluster = Cluster.open()
==>localhost/127.0.0.1:8182
gremlin>  g = graph.traversal().withRemote(DriverRemoteConnection.using(cluster, "g"))
==>graphtraversalsource[emptygraph[empty], standard]
gremlin> v = g.addV().property('name','stephen').next()
==>v[0]
gremlin> g.V(v.id()).property('favorite','red')
==>v[0]
gremlin> g.V().valueMap()
==>[name:[stephen],favorite:[red]]

我会注意到,在你的情况下,你不会 next() 出顶点:

val v1 = g.addV("person").property("name","stephen")

我假设即使在 Gremlin Scala 语法中你也应该这样做:

val v1 = g.addV("person").property("name","stephen").next()

否则 v1 将只是一个 Traversal 实例,您将获得 Traversalid() 并且不是 顶点。所以我认为这应该可以解决您的问题。

请注意,v1.property("age","27") 不会因为您解释的原因而工作 - 顶点是“分离的”并且您不能直接使用它,除非将它传递回另一个遍历。您还应该能够在大多数图表上执行此操作:

gremlin> g.V(v).property('favorite','red')
==>v[0]

不引用 id()

关于java - 使用 Java/Scala 的远程 Gremlin 服务器图突变,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44653498/

相关文章:

go - 创建HTTPS服务器以服务二进制文件和其他文件时出现问题

javascript - meteor 检查用户是否是管理员

java - 生命游戏 : how to have "entities" to evolve in parallel?

java - InputStream 在 MessageBodyReader Jersey 中提供空数据

java - 在 Eclipse 项目中存储日志文件?

java - 如何连接到位于项目文件夹内的数据库

java - Gremlin 文件系统接口(interface)

java - Janus Graph - gremlin-server - Java 客户端 - 找不到 apache.commons.configuration 的类文件

gremlin - Janusgraph JanusGraphException Could not commit transaction due to exception during persistence 无法提交事务

Java:顺序排序名称并保存到随机访问文件中