假设我在 AWS Neptune 上创建了一个图,并且想要获取有关某个顶点的多个信息。
我使用 union 方法通过以下查询获取多个信息,
this.graphTraversalSource.V().hasLabel("label1").hasId("id1")
.union(__.valueMap(true) ,__.outE().groupCount().by(T.label).unfold(),
__.inE("created_post").outV().valueMap(true))
简单来说,查询试图获取以下内容: 1. 顶点本身的属性。2. 出边及其计数 3. 创建 id1 帖子的用户的属性 上面的查询返回一个
Gremlin-Server 上上述查询的示例结果如下所示
=>{label=label1, id=id1, text=[My sample text]}
==>has_comment=1
==>has_like=1
==>{label=user, id=user1}
现在,假设我要用 Java 编写这些内容,正如您所知,查询必须以 next() 或 iterate() 结束。如果我输入 next(),那么将返回上述结果中的第一项。{label=label1, id=id1, text=[My sample text]}
。但是,如果我尝试使用 next(4) 那么我将得到完整的结果。或者,我知道我可以使用next() and hasNext()
GraphTraversal 根据需要获取结果,而无需使用next(4)
我担心提交给海王星的交易,因为根据他们的说法
事务 Neptune 在每次 Gremlin 遍历开始时打开一个新事务,并在成功完成遍历后关闭事务。当出现错误时,事务会回滚。
单个事务中包含由分号 (;) 或换行符 (\n) 分隔的多个语句。除最后一条语句之外的每个语句都必须以要执行的 next() 步骤结束。只返回最终的遍历数据。
不支持使用 tx.commit() 和 tx.rollback() 的手动事务逻辑。
根据上面的内容,我了解到每个 .next() 语句都会导致在 Neptune 上发生一次 tx。
说了这么多,我的问题是,
我对海王星交易技术的理解是否属实?
如果是,这是否意味着每次我写.next()
一个事务都会发生?
其行为如何.next(int)
,例如使用是否.next(4)
意味着将发生 4 笔交易?
我该如何优化这个?使用一次数据库访问和一项事务来获取所有需要的数据?即有没有更好的方法来满足我的需求?
如何使用一行获取上述查询的所有结果?即不使用 hasNext() 和 next() 方法?有没有办法知道结果集的大小,从而使用 next(result-set-size) 方法?
谢谢哈迪
慕容森
相关分类