是否有Gremlin NULL关键字或不是遍历步骤的类似内容?

时间:2019-10-25 19:12:51

标签: gremlin

问题

我一直在优化基于图形的应用程序的性能(Cosmos DB上的Gremlin API),但总的来说情况很糟糕。经过大量的挖掘之后,我意识到很多麻烦是由不必要的遍历处理引起的。如果要获取所有foo顶点以及这些边缘可能具有的任何条形边缘(请考虑从SQL左连接),则可以在Gremlin中编写以下内容:

g.V().hasLabel("foo").as("foos").
coalesce(out("bar"),constant()).as("bars").
select("foos","bars")

结果将包含一组元组,其中第一个项目名为foos,第二个项目名为bar。悬臂将始终具有顶点,而条形将具有边缘或[]。

如果不为每个顶点处理一个新的匿名遍历,每个顶点只有一个constant()步骤,那么null会使整个事情变得更加高效。

我到处都看过,但在Gremlin中找不到null。有人有什么想法吗?

1 个答案:

答案 0 :(得分:0)

在Gremlin中没有返回值null的概念。这是比较烦人的部分之一,但您必须返回一个值。

此外,我认为您可以通过使用project()语句而不是遍历图形然后选择值来简化遍历。会是这样的:

g.V().hasLabel("foo").
  project('foo', 'bars').
    by(__.id()).
    by(__.outE('bars').fold().coalesce(unfold(), constant('')))