У меня есть база данных графиков на ArangoDB, у которой глубина узла составляет около 100 уровней и около 205 тыс. Узлов для некоторых пользователей. Для нормального использования AQL, используемый для обхода графика, работает хорошо. Но есть некоторые сценарии, в которых обход графика занимает слишком много времени, а именно:
- Расчет максимальной глубины для некоторого пользователя
- Расчет веса для корневого узла, который имеет глубину узла около 50+ и дочерний узел 200k +. Здесь вес рассчитывается путем суммирования веса каждого дочернего узла.
- Выборка всех узлов на определенном уровне для некоторого узла.
Решенные мной решения следующие:
- Для № 1 и № 2 я рассчитываю максимальную глубину и вес в фоне и сохраняю их в кэш, чтобы избежать обработки в реальном времени. Также они пересчитываются, если в графике есть какие-либо изменения.
- Для # 3 я попытался разместить график на осколках, которые фактически ухудшают производительность (и это ожидалось, потому что график не может использовать преимущества шардинга)
Мне нужны предложения для следующего:
- Является ли хорошей идеей предварительно рассчитать идентификаторы пользователей на каждом уровне и поместить их в кэш для каждого пользователя?
- Есть ли способ разбить график на разные сегменты (какой-то лучший способ), чтобы мой запрос мог выполняться параллельно, чтобы завершить задачу раннего извлечения данных узла?
- Могут ли такие инструменты, как Elastic search или Spark, помочь улучшить производительность запроса на графике?
Спасибо