快速将边数添加到 ArangoDB 中的文档
Quickly adding edge counts to a document in 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 查询来判断速度,但所需的时间似乎并没有线性扩展。
使用 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 道路上进一步看到这一点。对于创建索引等简单任务,判断完成百分比可能成为可能,但在查询中,它更像是到目前为止的文档数量 read/written。
我们对 validating whether a graph obeys a power law
进行了类似的查询
不太复杂:我想计算每个文档的边数,并将数字保存在文档中。我提出了两个有效的查询;不幸的是,因为我有数百万条边,所以都很慢。有没有更快的方法来更新文档 属性 存储它们的边数? (只是一个时间点的计数)
可用但速度慢的 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 查询来判断速度,但所需的时间似乎并没有线性扩展。
使用 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 道路上进一步看到这一点。对于创建索引等简单任务,判断完成百分比可能成为可能,但在查询中,它更像是到目前为止的文档数量 read/written。
我们对 validating whether a graph obeys a power law
进行了类似的查询