簡體   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