Лучший способ рассчитать соединения n-й степени на графике - PullRequest
0 голосов
/ 08 января 2019

У меня есть база данных графиков на ArangoDB, у которой глубина узла составляет около 100 уровней и около 205 тыс. Узлов для некоторых пользователей. Для нормального использования AQL, используемый для обхода графика, работает хорошо. Но есть некоторые сценарии, в которых обход графика занимает слишком много времени, а именно:

  1. Расчет максимальной глубины для некоторого пользователя
  2. Расчет веса для корневого узла, который имеет глубину узла около 50+ и дочерний узел 200k +. Здесь вес рассчитывается путем суммирования веса каждого дочернего узла.
  3. Выборка всех узлов на определенном уровне для некоторого узла.

Решенные мной решения следующие:

  • Для № 1 и № 2 я рассчитываю максимальную глубину и вес в фоне и сохраняю их в кэш, чтобы избежать обработки в реальном времени. Также они пересчитываются, если в графике есть какие-либо изменения.
  • Для # 3 я попытался разместить график на осколках, которые фактически ухудшают производительность (и это ожидалось, потому что график не может использовать преимущества шардинга)

Мне нужны предложения для следующего:

  • Является ли хорошей идеей предварительно рассчитать идентификаторы пользователей на каждом уровне и поместить их в кэш для каждого пользователя?
  • Есть ли способ разбить график на разные сегменты (какой-то лучший способ), чтобы мой запрос мог выполняться параллельно, чтобы завершить задачу раннего извлечения данных узла?
  • Могут ли такие инструменты, как Elastic search или Spark, помочь улучшить производительность запроса на графике?

Спасибо

...