amazon-dynamodb - 如何在 Java 中获取从一个顶点辐射出的所有路径(顶点)?

标签 amazon-dynamodb graph-databases titan

我在 DynamoDB 上使用 Titan。我有一个没有循环的有向边图。给定一个顶点,我需要从该顶点辐射出的所有路径。路径仅表示从给定顶点辐射出的每条路径上的顶点列表。

我只是无法理解 Gremlin 和 Groovy,所以我希望 Java 中有解决方案。

或者是否有可以转换为 Java 的 Gremlin 查询?

最佳答案

dynamodb-titan 基于 TinkerPop 3.x,在 TinkerPop 3.x 中,Gremlin 未绑定(bind)到 Groovy。 Groovy 中的 Gremlin 基本上等同于 Java。如果您不学习 Gremlin,您将无法使用 Titan(或 TinkerPop),因为它是查询图形的唯一方法。

获取遍历路径需要使用 path()步。为了演示,我将使用 Gremlin 控制台,虽然它是使用 Groovy 评估的,但我可以向您保证,您可以将此代码复制并粘贴到您的 Java 项目中,它在那里同样可以正常工作。

首先,我创建了我将演示的玩具图:

gremlin> graph = TinkerFactory.createModern()
==>tinkergraph[vertices:6 edges:6]
gremlin> g = graph.traversal()
==>graphtraversalsource[tinkergraph[vertices:6 edges:6], standard]

接下来,我编写了一个遍历来查找 ID 为 1 的单个顶点 - 这将是我们将用来发现您正在寻找的“辐射路径”的顶点:

gremlin> g.V(1)
==>v[1]

然后我们从 1 开始遍历出边到相邻的顶点:

gremlin> g.V(1).out()
==>v[3]
==>v[2]
==>v[4]

然后我们再做一次:

gremlin> g.V(1).out().out()
==>v[5]
==>v[3]

现在,如果我们想查看遍历器到达那里所采用的路径,我们只需执行以下操作:

gremlin> g.V(1).out().out().path()
==>[v[1],v[4],v[5]]
==>[v[1],v[4],v[3]]

并且所有从单个顶点向外辐射的顶点距离 1 整整两步。

如果您不知道从起始顶点步行的长度,那么您可以使用 repeat() :

gremlin> g.V(1).repeat(out()).until(outE().count().is(0)).path()
==>[v[1],v[3]]
==>[v[1],v[2]]
==>[v[1],v[4],v[5]]
==>[v[1],v[4],v[3]]

关于amazon-dynamodb - 如何在 Java 中获取从一个顶点辐射出的所有路径(顶点)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40698750/

相关文章:

database - AWS Neptune DB 与 Dynamo DB 的实体沿袭

cassandra - 在 Titan 图数据库中创建顶点和边的问题

solr - 如何在Titan图形服务器上利用ElasticSearch/Solr搜索API?

amazon-web-services - 在 DynamoDB 中搜索非主键并集成到 Alexa Skills

java - Gradle Spring-data-dynamo 数据库

java - 使用 spring-data-dynamodb 自定义 DynamoDBMapper

amazon-web-services - 在 DynamoDB 中查找平均值和总和?

groovy - "Supernodes"在泰坦

grails - 东方数据库:无法创建索引

java - 泰坦有远程服务器吗?