如何解决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 举报,一经查实,本站将立刻删除。