Быстрое добавление счетчиков краев в документ в ArangoDB

Не слишком сложно: я хочу посчитать края каждого документа и сохранить номер в документе. Я придумал два работающих запроса; К сожалению, поскольку у меня миллионы ребер, оба они довольно медленные. Есть ли более быстрый способ обновить документы с помощью свойства, сохраняющего их количество краев? (просто счет в определенный момент времени)

Запросы AQL, которые работают, но работают медленно:

FOR doc IN Documents
    LET inEdgesCount  = LENGTH(GRAPH_NEIGHBORS('edgeGraph', doc,{direction: 'inbound', maxDepth:1})
    LET outEdgesCount = LENGTH(GRAPH_NEIGHBORS('edgeGraph', doc,{direction: 'outbound', maxDepth:1})
    UPDATE doc WITH {inEdgesCount: inEdgesCount, outEdgesCount: outEdgesCount} In Documents

or:

FOR e IN Edges
    COLLECT docId = e._to WITH COUNT INTO counter
    UPDATE SPLIT(docId,'/')[1] WITH {inEdgeCount: counter}

(а затем повторите для исходящих кромок)


Кстати, есть ли способ просмотреть скорость запроса (например, для выполнения в секунду) или процент выполнения? Я пытался судить о скорости, используя для начала ОГРАНИЧЕННЫЕ запросы, но требуемое время, похоже, не масштабируется линейно.


person ropeladder    schedule 11.03.2016    source источник
comment
В итоге я решил «решить» эту проблему, освободив место и переместив базу данных на свой SSD.   -  person ropeladder    schedule 12.03.2016


Ответы (1)


В ArangoDB 2.8 вы можете использовать обходы по шаблону графа чтобы выполнить это с лучшей производительностью:

FOR doc IN documents
  LET inEdgesCount = LENGTH(FOR v IN 1..1 INBOUND doc GRAPH 'edgeGraph' RETURN 1)
  LET outEdgesCount = LENGTH(FOR v IN 1..1 OUTBOUND doc GRAPH 'edgeGraph' RETURN 1)
  UPDATE doc WITH
     {inEdgesCount: inEdgesCount, outEdgesCount: outEdgesCount} In Documents

В настоящее время ArangoDB не имеет возможности отслеживать ход выполнения длительных задач. В ArangoDB 3.0 мы собираемся представить новую фреймворк для мониторинга, которая позволяет лучше контролировать то, что на самом деле происходит на сервере. Однако с 3.0 он не сможет собирать живую статистику; мы можем увидеть это в дальнейшем в версии 3.x позже в этом году. Оценка процента завершения может стать возможной для простых задач, таких как создание индексов, но для запросов это скорее будет количество документов, прочитанных / написанных на данный момент.

Мы сделали аналогичные запросы для проверки того, подчиняется ли график силе закон

person dothebart    schedule 16.03.2016