Сбой ArangoDB при попытке запустить обход AQL с предложением COLLECT - PullRequest
1 голос
/ 07 февраля 2020

Модель данных:

книги - документы

страницы - документы. Страница может содержать только одну ссылку на другую книгу

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, но мне нужен только один край. Идентификатор не имеет значения, сколько раз на book2 ссылались в book1.

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?

1 Ответ

0 голосов
/ 20 февраля 2020

Я не могу комментировать cra sh, не в последнюю очередь из-за того, что вы не предоставляете никакой информации, касающейся его и того, как он себя проявляет - если причина в уничтожении / перезапуске из нехватки памяти, Вы должны упомянуть это (проверьте системные журналы, если журнал 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}

Это работает для очень маленького набора образцов. Может быть, это немного легче на планировщике запросов, палач?

...