Titan 数据库的嵌套遍历 gremlin 查询
Nested traversal gremlin query for Titan db
我想知道怎么可能有一个 returns 导致嵌套格式的 gremlin 查询。假设有属性个图如下:
USER
和 PAGE
具有某些属性的顶点,例如 AGE
for USER
顶点;
FOLLOW
USER
和 PAGE
之间的边缘;
我正在寻找一个有效的查询,它可以提供所有年龄超过 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]]]
我想知道怎么可能有一个 returns 导致嵌套格式的 gremlin 查询。假设有属性个图如下:
USER
和 PAGE
具有某些属性的顶点,例如 AGE
for USER
顶点;
FOLLOW
USER
和 PAGE
之间的边缘;
我正在寻找一个有效的查询,它可以提供所有年龄超过 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]]]