[英]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.