【发布时间】:2023-03-10 21:01:01
【问题描述】:
使用以下 Gremlin 语句查询 AWS Neptune 时,completableFuture 未返回所需结果。当我尝试以下方法时:
graphTraversal.promise(Traversal::hasNext());
场景 1:
它适用于单个顶点g.V('id-1').promise(Traversal::hasNext()) 返回 true
但是,当我使用 g.V('id-1','id-2').promise(Traversal::hasNext()) 时,它仍然返回 true 而不是 false,因为 id-2 在 db 中不可用
场景 2:
如下创建边列表时,如果没有创建任何边,如何使查询返回false。
CompletableFuture<Boolean> method1() {
List<Edge> edgeList = new ArrayList();
edgeList.add(edge1);// vertex2 -> vertex3`
edgeList.add(edge2);// vertex1(not present) -> vertex2
edgeList.add(edge3);// vertex3 -> vertex4
GraphTraversal g = null;
loop(edgeList: e) {
g = graphTraversalQueryMethod(g, e);
}
return g.promise(Traversal::hasNext);
}
GraphTraversal graphTraversalQueryMethod(GraphTraversal g, Edge e) {
g.V(e.sourceVertexId).addE("EDGE_LABEL").property(e.propKey, e.propValue).to(e.destVertexId);
}
它返回false,但是用例:(假设边的源/目标顶点不存在)
- edge1 正在创建中
- edge2 未创建,因为源顶点 1 丢失
- edge3 也没有创建,即使它在 db 中同时具有可用的源顶点和目标顶点
- 因此在 2 (edge1, edge3) 中创建 1 (edge1) 有效边时结果返回 false
是否有任何选项可以在海王星中使用 gremlin 回滚整个事务?在通过其他方式创建缺失的 vertex1 后执行此查询。
或任何处理/捕获丢失交易的想法。如果我需要更改查询格式,请纠正我。
注意:至少我需要捕获边缘/任何事务在查询执行时都没有成功。这是使用 Java。
如果有任何最佳实践的建议来实现这一点,将会很有帮助!
【问题讨论】:
标签: java gremlin amazon-neptune