亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

有條件地中斷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 關注
  • 233 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號