Titan 数据库的嵌套遍历 gremlin 查询

Nested traversal gremlin query for Titan db

我想知道怎么可能有一个 returns 导致嵌套格式的 gremlin 查询。假设有属性个图如下:

USERPAGE 具有某些属性的顶点,例如 AGE for USER 顶点;

FOLLOW USERPAGE 之间的边缘;

我正在寻找一个有效的查询,它可以提供所有年龄超过 20 岁的用户以及这些用户关注的所有页面。我可以从应用程序端使用一个简单的循环来做到这一点,并且每次迭代都使用一个简单的遍历查询。不幸的是,这样的解决方案对我来说效率不高,因为它会产生大量查询,并且在这种情况下网络延迟可能会很大。

这很简单:

g.V().label('user').has('age',gt(20))
.match(__.as('user').out('follows').as('page'))
.select('user','page')

请注意,当您在 gremlin 中使用此查询时,gremlin 会为您提供空指针异常,您可以在代码中使用它并检查 'page' 是否存在。

不确定您对 "efficient" 的定义是什么,但请记住,这是典型的 OLAP 用例,您不应期望快速的 OLTP 实时响应。

也就是说,查询应该像这样简单:

g.V().has("USER", "AGE", gt(20)).as("user").
  map(out("FOLLOW").fold()).as("pages").
  select("user", "pages")

一个使用现代样本图的小例子:

gremlin> g = TinkerFactory.createModern().traversal().withComputer()
==>graphtraversalsource[tinkergraph[vertices:6 edges:6], graphcomputer]
gremlin> g.V().has("person", "age", gt(30)).as("user").
           map(out("created").fold()).as("projects").
           select("user","projects")
==>[user:v[6], projects:[v[3]]]
==>[user:v[4], projects:[v[5], v[3]]]