[英]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 ...
后有几个REMOTE
和GATHER
语句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.