【发布时间】:2017-12-10 23:23:50
【问题描述】:
我有一个树状结构,它实际上是一个有向无环图。一个小版本如下所示。
在任何父母,我想总结子树的一些属性。今天我在 AQL 中使用基于起始节点的 TRAVERSAL 和 COLLECT:
for c in traversal(nodes,nodeTree,ch,'inbound',{uniqueness:{vertices:'global'}})
collect child = ch._id into group
然后我可以在组上使用聚合。 (对于 ArangoDB 2.8,我相信现在可以直接在 collect 语句中完成。)唯一性选项解决了重复问题。
缩放
当树(图)增长到相当大的规模(10-20k 个节点)时,这将如何扩展?我需要它快速,因为用户将等待响应(不是长时间运行的工作)。
我正在考虑在节点中缓存值并使用 dirty 标志。然后在节点 1 中,如果它们都是 clean,则可以将 2 和 3 相加。 问题是 5 包含在 2 和 3 的总和中。
我该如何解决这个问题?或者这不是问题——遍历真的那么快吗?
到目前为止,我已经想出了让每个节点都包含其子树重复项的列表的想法,在 1 的情况下,这意味着信息“5 被包含两次”。这可以用来从 1 的总数中减去它。但是我如何找到这些信息?我考虑过找到所有具有>1个父节点的节点,然后向上遍历(很快),然后以某种方式计算此信息。
【问题讨论】:
标签: graph graph-databases arangodb