首页 > 解决方案 > 是否有 Gremlin NULL 关键字或类似的不是遍历步骤的东西?

问题描述

问题

我一直在优化我们基于图形构建的应用程序的性能(Cosmos DB 上的 Gremlin API),而且我通常都过得很糟糕。经过大量的挖掘,我意识到一堆痛苦是由不必要的遍历处理引起的。如果我想获取所有 foo 顶点以及这些边缘可能具有的任何条形边缘(想想 SQL 的左连接),我会在 Gremlin 中编写以下内容:

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

结果将包含一组元组,其中项目 1 名为 foos,项目 2 名为 bar。Foos 总是有一个顶点,而 bar 有一个边或一个 []。

不是为每个顶点处理一个新的匿名遍历,而是constant()一个空值会使整个事情变得更有效率。

我到处寻找,但在 Gremlin 中找不到 null 。有人有想法么?

标签: gremlin

解决方案


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

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

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

推荐阅读