快速向ArangoDB中的文档添加边数

时间:2016-03-11 17:43:31

标签: graph-databases 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}

(然后重复出站边缘)

顺便说一下,有没有办法查看查询速度(例如每秒执行FOR次数)或完成百分比?我一直试图通过使用LIMITed查询来判断速度,但所需的时间似乎没有线性扩展。

1 个答案:

答案 0 :(得分: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

进行了类似的查询