Недавно мы перевели наш продукт с одного узла ArangoDB в кластерный режим ArangoDB (версия 3.3.9).
В результате мы испытываем гораздо более длительное время запросов.
Приведенный выше запрос возвращает данные об одном узле ArangoDB в течение нескольких миллисекунд:
WITH Node_Collection_1
FOR c IN Node_Collection_1
LET neighbours = (FOR v,e,p IN INBOUND c._id
Edge_Collection_1
RETURN v._key
)
return {
content: c._key,
neighbours: neighbours
}
В кластеризованной ArangoDB один и тот же запрос к тем же данным занимает несколько секунд (~ 15 секунд).
В нашем случае использования у нас есть много маленьких графов (1 коллекция узлов и 1 коллекция ребер на граф), и поэтому мы настроили каждую коллекцию, чтобы иметь только один шард, так как каждый граф не будет слишком большим.
Конфигурация кластера:
- 3 узла данных
- 3 узла агента
- 1 узел-координатор
Все они распределены между 3 машинами AWS поверх Kubernetes.
Если предположить, что Node_collection_1 и Edge_collection_1 оказались на одном и том же узле данных, почему происходит столь резкое снижение задержки по сравнению с настройкой одного узла? И что можно сделать, чтобы улучшить это?