azure-cosmosdb - 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'))
此外,我有多个过滤器和每次遍历的排序。
解决方案
我不认为您可以编写特定的遍历,因为您已经展示了它比已经编写的更有效,特别是如果您已向out('speaks')
和out('residesAt')
遍历添加过滤器以进一步限制这些路径,并且在您的示例中代表您只返回找到的第一个“语言”或“城市”,这显然比遍历所有这些可能的路径要快。
在我看来,您正在尝试检索所有“人”顶点。你没有说你有额外的过滤器,但如果你没有,那么如果你有数百万个“人”顶点返回,那么这种遍历的成本可能会很高。通常,仅在顶点标签上进行过滤的遍历会很昂贵,因为大多数图不会优化这些查找。在最坏的情况下,这种情况可能意味着您必须进行全图扫描才能获得初始顶点集。
推荐阅读
- crystal-lang - 呼叫阻止呼叫不起作用
- hadoop - 如何使用 BDM(Informatica)将文件从本地文件系统复制到 hdfs 文件系统?
- java - JOLT:将逗号分隔值转换为对象
- c# - 在 Windows 服务器中使用正确的设置和配置设置 Elasticsearch 以供生产使用
- javascript - 使用 if、else if 和 else 时出现意外的标记 else
- javascript - 如何在Angular中使用*ngFor动态调用所有图像并显示?
- printing - 使用网络浏览器添加打印机
- canvas - 在 ThreeJS 中使用带有 HTML2CANVAS 的画布作为纹理时出错,但是为什么 ????
- javascript - 如何获取我系统的用户名并在浏览器上呈现
- go - 如何一次使用 GORM 读取 SQLite 数据库一行