gpt4 book ai didi

ArangoDB - 集群查询性能缓慢

转载 作者:行者123 更新时间:2023-12-02 04:26:35 26 4
gpt4 key购买 nike

我有一个比较两个集合并从一侧找到“缺失”文档的查询。这两个集合(现有的和临时的)都包含大约 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 秒内像闪电一样运行。

但是,当我在集群(单个数据库,单个协调器)中运行它时,即使数据库和协调器位于同一物理主机(不同容器)上,我也必须添加一个 LIMIT 1000 在初始 FOR existing ... 之后以防止超时!不过,这个有限的结果会在将近 7 秒内返回!

查看执行计划,我看到在 LET 匹配 ... 子查询节点之后有几个 REMOTEGATHER 语句。据我所知,问题源于用于过滤此数据的数据存储和内存结构的分离。

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

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

最佳答案

您的查询对现有集合中的每个文档执行一个子查询。每个子查询都需要多次 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)

关于ArangoDB - 集群查询性能缓慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53966083/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com