【问题标题】:Quickly adding edge counts to a document in ArangoDB快速向 ArangoDB 中的文档添加边数
【发布时间】:2016-03-11 17:43:30
【问题描述】:

不太复杂:我想计算每个文档的边缘并将数字保存在文档中。我想出了两个有效的查询;不幸的是,由于我有数百万条边,两者都很慢。有没有更快的方法来更新具有存储边数的属性的文档? (只是一个时间点的计数)

功能正常但速度慢的 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 查询来判断速度,但所需的时间似乎并没有呈线性增长。

【问题讨论】:

  • 我最终通过释放一些空间并将数据库移至我的 SSD 来“解决”这个问题。

标签: graph-databases arangodb


【解决方案1】:

使用 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做了类似的查询

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-09-23
    • 2021-09-22
    • 1970-01-01
    • 2015-05-25
    • 2015-04-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多