ArangoDB-群集上的查询性能较慢
我有一个查询,它比较两个集合,并从一侧查找“缺少的”文档。两个集合(现有和临时)都包含大约25万个文档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
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)
杰出的我不确定我怎么会错过减号()函数,但这正是我所需要的。谢谢