首页 > 解决方案 > Gremlin:编写多重遍历最有效的方法是什么?

问题描述

假设我有一个顶点人,并且它有多个边,我想从所有遍历中投影属性。在 Cosmos DB Gremlin API 中编写查询的最有效方法是什么?

我尝试了以下方法,但它的性能很慢。

g.V().
hasLabel('person').
project('Name', 'Language', 'Address').
by('name').
by(out('speaks').values('language')).
by(out('residesAt').values('city'))

此外,我有多个过滤器和每次遍历的排序。

标签: azure-cosmosdbgremlingremlin-serverazure-cosmosdb-gremlinapi

解决方案


我不认为您可以编写特定的遍历,因为您已经展示了它比已经编写的更有效,特别是如果您已向out('speaks')out('residesAt')遍历添加过滤器以进一步限制这些路径,并且在您的示例中代表您只返回找到的第一个“语言”或“城市”,这显然比遍历所有这些可能的路径要快。

在我看来,您正在尝试检索所有“人”顶点。你没有说你有额外的过滤器,但如果你没有,那么如果你有数百万个“人”顶点返回,那么这种遍历的成本可能会很高。通常,仅在顶点标签上进行过滤的遍历会很昂贵,因为大多数图不会优化这些查找。在最坏的情况下,这种情况可能意味着您必须进行全图扫描才能获得初始顶点集。


推荐阅读