繁体   English   中英

ArangoDB - 群集上的查询性能降低

[英]ArangoDB - Slow query performance on cluster

我有一个查询比较两个集合,并从一侧找到“丢失”文档。 两个集合(现有和临时)包含大约250K文档。

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位于同一个物理主机(不同的容器)上,我也必须在初始FOR existing ...之后添加LIMIT 1000 FOR existing ...防止超时! 不过,这个有限的结果几乎在7秒内恢复!

查看执行计划,我发现在LET matches ...后有几个REMOTEGATHER语句LET matches ... SubqueryNode。 从我可以收集的信息来看,问题源于用于过滤此数据的数据存储和内存结构的分离。

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

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

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

您可以使用以下查询来避免子查询。 它将所有文档_key加载到RAM中 - 但是对于相当小的集合来说应该没问题。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM