ArangoDB尝试运行包含COLLECT子句的遍历AQL时崩溃

问题描述 投票:1回答:2

数据模型是:

[books-文档

页面-文档。页面可能仅包含对另一本书的引用]

books_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的次数无关紧要。

AQL

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 aql
2个回答
0
投票

我无法评论崩溃,尤其是所有原因,因为您没有提供任何有关崩溃以及崩溃如何显示的信息-如果原因是内存不足导致终止/重启,则应提及(如果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}

它适用于非常小的样本集。也许这对查询计划程序,执行程序来说要轻一些?


0
投票

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

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.