gpt4 book ai didi

java - 有条件地中断 java-gremlin 更新遍历,并显示错误消息

转载 作者:行者123 更新时间:2023-12-02 10:46:25 27 4
gpt4 key购买 nike

我有一个场景,我在更新遍历过程中想要检查一个条件,如果该条件为假,我想中断遍历并保持图形不变。我还想知道遍历被跳过,这样我就可以向调用代码抛出异常。

限制:

  • 我需要在一次遍历中执行此操作,因为我使用的图形数据库服务无法在多次遍历中保存事务。
  • 我确实需要一种方法来确定遍历被中断的原因。
  • 此外,我似乎无法使用 sideEffect() 步骤(?),因为这似乎与 gremlin 查询的序列化无关。

主要遍历使用 TinkerGraph 在本地运行,但部署为调用 AWS Neptune 的 lambda。

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}}}] could not be serialized by org.apache.tinkerpop.gremlin.driver.ser.AbstractGryoMessageSerializerV3d0.

最佳答案

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

我不确定您可以采取什么措施来解决此问题,因为您提到:

I do need a way to identify why the traversal was interrupted.

也许你可以以某种方式使用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

我不确定这是否会完美工作,因为你想

leave the graph unchanged

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

关于java - 有条件地中断 java-gremlin 更新遍历,并显示错误消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52532793/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com