繁体   English   中英

ArangoDB 在尝试运行带有 COLLECT 子句的遍历 AQL 时崩溃

[英]ArangoDB crashes on attempt to run traversal AQL with COLLECT clause in it

数据模型为:

书籍- 文件

- 文件。 页面可能只包含一个对另一本书的引用

book_pages - 边缘。 从书到页,从页到书

例子:

book1 -> (edge) -> page1 -> (edge) -> book2
book1 -> (edge) -> page2 -> (edge) -> book2
book1 -> (edge) -> page3 -> (edge) -> book2
book1 -> (edge) -> page4 -> (edge) -> book3
book2 -> (edge) -> page5 -> (edge) -> book4
book2 -> (edge) -> page6 -> (edge) -> book4
book2 -> (edge) -> page7 -> (edge) -> book4
book2 -> (edge) -> page6 -> (edge) -> book4
...

目标是在书籍之间建立边缘,避免重复。 book1 包含几页提到 book2,但我只需要一个边缘。 id 在 book1 中引用 book2 的次数无关紧要。

质量标准

FOR b1 IN books
    FOR v IN 1..1 OUTBOUND b1 books_pages
       FOR b2 IN 1..1 OUTBOUND v books_pages
       COLLECT  from = b1._id, to = b2._id
  RETURN {'from':from, 'to': to}

当数据库中的文档数量很大时,arangodb 崩溃。 这个查询有什么问题,或者这只是 arangodb 方面的一个错误?

我无法对崩溃发表评论,尤其是所有原因,因为您没有提供任何与其相关的信息以及它如何表现出来——如果原因是内存不足杀死/重启,您应该提到(检查如果 arangodb 日志没有帮助,则系统会记录)。

但是关于您的问题:您是否对所有长度为 3(就顶点而言,就边而言为 2)的唯一路径感兴趣? 这不是凝聚成

FOR b IN books
   FOR v,e,p IN 2..2 OUTBOUND b GRAPH 'books'
      RETURN DISTINCT {"from": p.vertices[0]._id, "to": p.vertices[2]._id}

它适用于非常小的样本集。 也许这在查询平面、刽子手上稍微轻一点?

向 AQL 添加选项有助于解决问题。

OPTIONS {uniqueEdges: 'path',  uniqueVertices: 'global', bfs: true }")

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM