微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Gremlin 查询挂起和/或条件

如何解决Gremlin 查询挂起和/或条件

我有一个图模型 >>> f'int {d[1]},str {d["2"]}' 'int one,str two' (顶点)-> region(边)-> has_person(顶点)。我想获得 person 个顶点,其中 region名称为 Tom。

这个查询工作正常: person

但是为什么以下查询会挂起:

g.V().hasLabel("person").has("name","Tom").inE("has_person").outV().hasLabel("region")

解决方法

在使用 Gremlin 编写图遍历时,您需要考虑您使用的图数据库如何优化您的遍历(例如,是否使用了全局索引)?

您应该考虑图形数据库的索引功能并检查 profile() 步骤的输出。它会告诉您是否正在使用索引以及在哪里使用。我的猜测是,“正常”工作的查询正在使用和索引来查找“Tom”,然后能够快速遍历该索引以查找具有与他相关的“has_person”边缘的区域。大多数图表都能够优化这种模式。您的以下“挂起”查询通常不会被大多数图形优化以使用索引,这主要是因为您使用 and() 步骤选择的模式不是大多数优化寻求的模式。我的猜测是这两个遍历几乎完全在内存中进行过滤。

Fwiw,您的查询“正常”是最佳的编写方式,我认为考虑到您所说的所需输出。我认为您的第一个挂起查询永远不会返回结果,因为它要求顶点具有既是“区域”又是“人”的标签,这是不可能的。第二个挂起查询似乎首先不需要 and(),并且对“区域”标签进行了双重过滤。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。