为了账号安全,请及时绑定邮箱和手机立即绑定

有条件地中断java-gremlin更新遍历,有错误信息

有条件地中断java-gremlin更新遍历,有错误信息

慕田峪7331174 2021-10-13 16:47:26
我有一个场景,我在更新遍历过程中想要检查一个条件,如果该条件为假,我想中断遍历并保持图形不变。另外我想知道遍历被跳过,所以我可以向调用代码抛出异常。约束:我需要在一次遍历中完成此操作,因为我使用的图形数据库服务无法在多次遍历中保存事务。我确实需要一种方法来确定遍历被中断的原因。此外,我似乎无法使用 sideEffect() 步骤 (?),因为这似乎与 gremlin 查询的序列化无关。主要穿越的作品在本地使用TinkerGraph而不是部署为拉姆达invocing AWS海王星。GraphTraversalSource g = graph.traversal();g.V().hasLabel("ops").fold()  .coalesce(      unfold(),      sideEffect(t -> { throw new RuntimeException("First vertice not found"); }))  .as("a")  // do much more stuff  .hasNext();sideEffect(org.someone.graph.ClassImpl$$Lambda$155/352598575@1b7f1140)]],aliases={g=g}}}] 无法被 org.apache.tinkerpop.gremlin.driver.ser.AbstractGryoMessageSerializerV3d0 序列化。
查看完整描述

1 回答

?
不负相思意

TA贡献1777条经验 获得超10个赞

Lambda 无法序列化,这就是您收到该异常的原因。此外,Neptune 不支持lambda ,因此您的方法无论如何都行不通。您使用 TinkerGraph 进行的实验之所以有效,是因为它没有任何这些限制。


我不确定你能做些什么来解决这个问题,因为你提到了:


我确实需要一种方法来确定遍历被中断的原因。


也许你可以constant()以某种方式使用?


gremlin> g = TinkerFactory.createModern().traversal()

==>graphtraversalsource[tinkergraph[vertices:6 edges:6], standard]

gremlin> g.V().has('person','name','marko').fold().coalesce(unfold(), constant('Not Found'))

==>v[1]

gremlin> g.V().has('person','name','x').fold().coalesce(unfold(), constant('Not Found'))

==>Not Found

我不确定这是否会完美运行,因为你想


保持图形不变


根据您编写 Gremlin 的方式,这在 TinkerGraph 中甚至行不通。constant()不是将被识别为回滚事务的方法的“错误条件”。也许这只是需要注意的事情。根据您的逻辑的复杂程度,您最终可能会得到一些非常难以阅读的 Gremlin。您可能需要重新考虑您的方法。


查看完整回答
反对 回复 2021-10-13
  • 1 回答
  • 0 关注
  • 204 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信