Получить начальный и конечный узлы указанного c пути в большом графе - PullRequest
0 голосов
/ 10 июля 2020

У меня есть большой граф (1 068 029 узлов и 2 602 897 отношений), и я работаю с ним через python API и делаю запросы к графу в потоке моей программы.

У меня есть следующие запросы:

Первый запрос

MATCH 
(start_node)--(o:observed_data)--(i:indicator)--(m:malware)--(end_node:attack_pattern)
WHERE start_node.id in [id_list] 
RETURN start_node.id, end_node.name

Второй запрос

MATCH 
(start_node)--(o1:observed_data)--(h:MD5)--(o2:observed_data)--(i:indicator)--(m:malware)--(end_node:attack_pattern)
WHERE start_node.id in [id_list] 
RETURN start_node.id, end_node.name

Когда я пытаюсь выполнить предварительный запрос с id_list размером 75000, он проходит нормально и возвращает желаемый результат, но когда я пытаюсь выполнить второй запрос - график застревает, даже когда я уменьшаю id_list до 20000.

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

Мой вопрос - есть ли какая-то функция библиотеки (APO C или что-то в этом роде), который выполняет то же действие, но за меньшее время? Или, может быть, у вас есть другое решение, которое решает эту проблему без уменьшения id_list до 50 000?

1 Ответ

1 голос
/ 10 июля 2020
  1. (start_node) в ваших шаблонах MATCH должен указывать метку (например, (start_node:Foo)), чтобы избежать необходимости сканировать узел every в БД. Кроме того, вы должны создать индекс (или ограничение уникальности) для этого начального узла.
  2. Вы должны установить все отношения в ваших MATCH шаблонах directional, если это необходимо. То есть поставьте стрелку на обоих концах.
  3. Вы также должны указать отношения типы в своих шаблонах (например, ()-[:BAR]->()), чтобы запрос не был вынужден оценивать все типы отношений.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...