2016-03-11 3 views
2

Не слишком сложно: я хочу подсчитать края каждого документа и сохранить номер в документе. Я придумал два запроса, которые работают; к сожалению, поскольку у меня есть миллионы ребер, они довольно медленные. Есть ли более быстрый способ обновления документов с сохранением их количества ребер? (Только подсчет в определенный момент времени)Быстрое добавление края к документу в 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 

или:

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

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


Как в стороне, есть ли способ просмотреть скорость запроса (например, для выполнения в секунду) или процентное значение п? Я пытался судить о скорости, используя LIMITed-запросы для начала, но требуемое время, похоже, не масштабируется линейно.

+0

Я в конечном итоге «решение» это, освобождая некоторое пространство и перемещение базы данных к моему SSD. – ropeladder

ответ

2

С ArangoDB 2,8 вы можете использовать graph pattern matching traversals, чтобы выполнить это с более высокой производительностью:

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 в этом году. Судя по проценту завершения может стать возможным для легких задач, таких как создание индексов, но по запросам его скорее будет количество документов, прочитанных/написанных до сих пор.

Мы сделали аналогичные запросы для validating whether a graph obeys a power law

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