Обход графиков ArangoDB с использованием фильтров дает неверный результат и проблемы с производительностью - PullRequest
0 голосов
/ 21 мая 2019

У меня есть события, которые хранятся в виде документов, которые содержат список ссылок, которые состоят из идентификатора другого события, а также поля типа с указанием их связи.

"links": [
  {
    "type": "CAUSE",
    "target": "ID1"
  },
  {
    "type": "CAUSE2",
    "target": "ID2"
  },
]

Я хочу иметь возможность начать с события, а затем проходить эти события в обоих направлениях для определенного типа ссылок.

Мне удается найти правильную первую вершину, но затем запрос находит другие события, которые не должны быть включены. Обработка запроса также занимает много времени.

Я попытался изменить фильтрацию на p.edges [*] = 'CAUSE', но тогда я не получил никаких результатов.

Я удалил фильтрацию, которая, кажется, дает желаемые результаты на скорости около 300 мс.

FOR doc IN Events FILTER doc.meta.id == 'ID' FOR v, e, p IN 1..10 OUTBOUND doc GRAPH 'traversalGraph' FILTER  e.type == 'CAUSE'  COLLECT res = v SORT res.meta.time DESC LIMIT 4 RETURN res
FOR doc IN Events FILTER doc.meta.id == 'ID' FOR v, e, p IN 1..10 INBOUND doc GRAPH 'traversalGraph' FILTER  e.type == 'CAUSE'  COLLECT res = v SORT res.meta.time ASC LIMIT 4 RETURN res

Итак, я хочу пройти по графику в обоих направлениях (по одному за раз) на основе linkID данного linkType. Мне также нужно, чтобы производительность была лучше, так как в данный момент использование MongoDB и самостоятельное выполнение обхода графика.

...