我有一个查询,可以比较两个集合,并找到一侧缺失的文档。这两个集合(现有和临时)都包含约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,单个Coordinator),即使DB和Coord在同一物理主机上(不同的容器),我仍需要在初始的“FOR existing…”之后添加“LIMIT 1000”以防止超时!尽管如此,这种被限制的结果也需要近7秒才能返回!
从执行计划来看,我发现在“LET matches…”子查询节点之后有几个“REMOTE”和“GATHER”语句。据我所知,问题源于用于过滤此数据的数据存储和内存结构的分离。
我的问题是:在集群上可以高效地完成此类操作吗?
我需要检测过时(即将删除)的文档,但这显然不是可行的解决方案。