ArangoDB-群集上的查询性能较慢

ArangoDB-群集上的查询性能较慢,arangodb,Arangodb,我有一个查询,它比较两个集合,并从一侧查找“缺少的”文档。两个集合(现有和临时)都包含大约25万个文档 FOR existing IN ExistingCollection LET matches = ( FOR temp IN TempCollection FILTER temp._key == existing._key RETURN true ) FILTER LENGTH(matches) == 0

我有一个查询,它比较两个集合,并从一侧查找“缺少的”文档。两个集合(现有和临时)都包含大约25万个文档

FOR existing IN ExistingCollection
    LET matches = (
        FOR temp IN TempCollection
            FILTER temp._key == existing._key
            RETURN true
    )
    FILTER LENGTH(matches) == 0
    RETURN existing
当它在单服务器环境中运行时(DB和Foxx在同一个服务器/容器上),它会像闪电一样在0.5秒内运行

但是,当我在集群(单DB、单协调器)中运行此功能时,即使DB和Coord位于同一物理主机(不同容器)上,我也必须在现有…的初始
之后添加
限制1000
,以防止超时!尽管如此,这个有限的结果仍然会在7秒内返回

查看执行计划,我看到在
LET matches…
子querynode之后有几个
REMOTE
GATHER
语句。据我所知,问题源于用于过滤这些数据的数据存储和内存结构的分离

我的问题:这种类型的操作能在集群上高效地完成吗?


我需要检测过时(要删除)的文档,但这显然不是一个可行的解决方案。

您的查询对现有集合中的每个文档执行一个子查询。每个子查询都需要许多HTTP往返来进行设置、实际查询和关闭

可以使用以下查询避免子查询。它将所有文档
\u key
加载到RAM中,但这对于较小的集合应该没有问题

LET ExistingCollection = (FOR existing IN c2 RETURN existing._key)
LET TempCollection = (FOR temp IN c1 RETURN temp._key)
RETURN MINUS(ExistingCollection, TempCollection)

杰出的我不确定我怎么会错过减号()函数,但这正是我所需要的。谢谢