2015-01-26 2 views
2

Я пытаюсь построить крупномасштабный график социальных сетей с ArangoDB. У меня есть данные там - около 35k вершин с границами около 150k.ArangoDB graph maxDepth - слишком много итераций

Я понимаю, что это очень много данных, поэтому я надеялся нарисовать только подмножество за раз - возможно, 2 или 3 степени разделения от начальной точки.

Но я получаю ошибку 1909: too many iterations если maxDepth больше 1, даже если я устанавливаю maxIterations очень низкий (например, 1)

Например, этот запрос дает мне слишком много итераций ошибки

GRAPH_TRAVERSAL('Friends', 'people/1342', 'outbound', {maxDepth: 2, maxIterations: 10})

Если я опускаю maxIterations, то получаю ту же ошибку.

График успешно проходит в веб-интерфейсе, поэтому я не думаю, что проблема связана с моими данными как таковыми. У меня есть больше данных на моем графике, чем может обрабатывать ArangoDB? Или я делаю что-то неправильно?

ответ

3

Параметр управления maxIterations после того, как много итераций происходит автоматическое прерывание. Этот автоматический аборт существует, чтобы защитить вас от бесконечного прохождения при выполнении обхода на циклическом графике.

maxIterations не контролирует глубину обхода, но после того, как количество вершин остановится и вызовет ошибку.

Ниже приведен пример определения максимального значения: Обход начинается с указанной начальной вершины. Это первая итерация. Для начальной вершины будут определены все исходящие (или входящие) соединения. Допустим, из стартовой вершины нужно пять подключений, поэтому следующий раунд обхода рассмотрит их. Для этого потребуется, по крайней мере, значение 6 для maxIterations (1 для стартовой вершины плюс 5 для следующего раунда). Если теперь каждая из 5 вершин также имеет по 5 подключений, вам потребуется по меньшей мере 25 итераций, поэтому вам понадобится значение maxIterations 31. Для следующего уровня, по 5 соединений каждый, вам понадобится еще 125 и т. Д.

Итак, для каждого уровня вы не можете просто добавить постоянное значение для maxIterations. Ряд, который мы видели (1, 6, 31, 156), явно нелинейный. Сколько итераций вам потребуется, очевидно, зависит от базовых данных и от того, как связаны вершины.

Если все, что вы хотите достичь, чтобы ограничить глубину обхода до определенного уровня, вы можете использовать minDepth или maxDepth параметры и установить maxIterations к очень высокой стоимости (что, вероятно, никогда не будет достигнута, так как обход ограничен по maxDepth). Дальнейшие опции для управления объемом данных, выходящих из обхода, - это direction (any), что даст наибольший результат и может с легкостью привести к циклам, по возможности используйте inbound или outbound) и uniqueness (чтобы определить, как часто заданная вершина или соединительная кромка будут посещение).

2

maxIterations - это порог, который должен контролировать слишком много циклов вычисления. Таким образом, чем больше график и больше ребер/узлов находятся в игре, тем больше циклов вычисления (и тем выше должен быть параметр maxIterations).

Итак, попробуйте плавно увеличить maxIterations для maxDeth == 2 и так далее. Но не слишком гладко, например. try + 1: = try * 10 :-)

+0

Я начал с максимализаций на 100k, затем 50k, затем 10k, затем 1000, 100, 1 - должен ли я взять его на несколько порядков выше? –

+0

Возможно, вам понадобится больше, а не меньше. –

Смежные вопросы