Gremlin:在更便宜的步骤之后调用昂贵的步骤是否可以作为优化?

问题描述

我有一个很大的 gremlin 查询,它基本上是为了过滤结果,由许多 has() 和 where() 步骤组成,可以按任何顺序编写并给出相同的结果,其中一些很昂贵,其中一些更便宜。

如果我先调用更便宜的步骤,我猜会用更少的迭代来执行昂贵的步骤,因为许多顶点被过滤,用任何语言编码时都是如此,但在数据库实现中我不知道 Gremlin步骤按写入的顺序执行。

我知道这种事情通常取决于 Gremlin 数据库的实现,但也许您可以给我一些一般性的答案。此外,我尝试进行一些基准测试,但在我的特定情况下构建好的基准测试太耗时,所以也许您可以帮助我了解数据库在内部是如何实现的。

解决方法

正如您所提到的,它确实取决于查询引擎和优化查询计划的开发方式。一些引擎会尝试根据所测试元素的估计基数对查询的部分重新排序。例如,Amazon Neptune 就是这样工作的。一般来说,最好尽快过滤掉。因此,在社交网络中,除非您确信查询引擎能够对此类查询重新排序,否则您不会希望从 g.V().hasLabel(‘person’) 之类的内容开始。