У меня есть запрос, который сравнивает две коллекции и находит «отсутствующие» документы с одной стороны.Обе коллекции (существующие и временные) содержат около 250 тыс. Документов.
FOR existing IN ExistingCollection
LET matches = (
FOR temp IN TempCollection
FILTER temp._key == existing._key
RETURN true
)
FILTER LENGTH(matches) == 0
RETURN existing
Когда это выполняется в среде с одним сервером (БД и Foxx находятся на одном сервере / контейнере), это работает как молния в пределах 0,5секунд.
Однако, когда я запускаю это в кластере (одна БД, один координатор), даже когда БД и Coord находятся на одном физическом хосте (разные контейнеры), я должен добавить LIMIT 1000
после первоначального FOR existing ...
, чтобы не дать ему истечь!Тем не менее, этот ограниченный результат возвращается почти через 7 секунд!
Глядя на план выполнения, я вижу, что после LET matches ...
SubqueryNode есть несколько операторов REMOTE
и GATHER
.Насколько я могу судить, проблема связана с разделением структуры хранения данных и памяти, используемой для фильтрации этих данных.
Мой вопрос: может ли этот тип операции быть эффективно выполнен в кластере?
Мне нужно обнаружить устаревшие (подлежащие удалению) документы, но это, очевидно, нереальное решение.