我一直在优化基于图形的应用程序的性能(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。有人有什么想法吗?
答案 0 :(得分:0)
在Gremlin中没有返回值null
的概念。这是比较烦人的部分之一,但您必须返回一个值。
此外,我认为您可以通过使用project()语句而不是遍历图形然后选择值来简化遍历。会是这样的:
g.V().hasLabel("foo").
project('foo', 'bars').
by(__.id()).
by(__.outE('bars').fold().coalesce(unfold(), constant('')))