Как я могу получить второй короткий путь? - PullRequest
3 голосов
/ 14 марта 2019

Я создал большую базу данных графа.График включает в себя отношения между организациями.Я хотел бы получить короткий путь между двумя узлами.Я отфильтровал типы отношений по следующему запросу

MATCH (o:Organization) WHERE Id(o) =  23806112
MATCH (o1:Organization) WHERE Id(o1) = 24385058
MATCH p = allShortestPaths((o)-[*1..10]-(o1)) WHERE 
ALL (r IN RELATIONSHIPS(p) WHERE 
(type(r) = 'OrganizationFounderOrganization' AND r.DateFrom <= datetime('2019-03-13') ) 
 OR (type(r) = 'OrganizationFounderPerson' AND r.DateFrom <= datetime('2019-03-13') ) 
 OR (type(r) = 'OrganizationChief' AND r.DateFrom <= datetime('2019-03-13') ) 
 OR (type(r) = 'OrganizationManagingCompany' AND r.DateFrom <= datetime('2019-03-13') ) 
 OR (type(r) = 'OrganizationPhone') 
 OR (type(r) = 'OrganizationAddress' AND NOT EXISTS(r.DateTo) ) 
)
RETURN p SKIP 0 LIMIT 30

Фильтры по отношениям не могут быть объединены, поскольку они могут использовать другие фильтры.Мой план выполнения по этому запросу

http://joxi.ru/E2pNPDDH9Rpger

Execution plan 1

Когда я получаю пути, я фильтрую узлы по другим условиям (заглавная,статус) и если я получаю неправильные пути, я применяю следующий запрос с фильтром по плохим узлам.

MATCH (o:Organization) WHERE Id(o) =  23806112
MATCH (o1:Organization) WHERE Id(o1) = 24385058
MATCH p = allShortestPaths((o)-[*1..10]-(o1)) WHERE 
ALL (r IN RELATIONSHIPS(p) WHERE 
(type(r) = 'OrganizationFounderOrganization' AND r.DateFrom <= datetime('2019-03-13') ) 
 OR (type(r) = 'OrganizationFounderPerson' AND r.DateFrom <= datetime('2019-03-13') ) 
 OR (type(r) = 'OrganizationChief' AND r.DateFrom <= datetime('2019-03-13') ) 
 OR (type(r) = 'OrganizationManagingCompany' AND r.DateFrom <= datetime('2019-03-13') ) 
 OR (type(r) = 'OrganizationPhone') 
 OR (type(r) = 'OrganizationAddress' AND NOT EXISTS(r.DateTo) ) 
)
AND ALL (n IN NODES(p) WHERE NOT Id(n) IN [15665,1557884,7888953]
RETURN p SKIP 0 LIMIT 30

Второй запрос плана выполнения

http://joxi.ru/KAxWPDDcMJGyY2

Execution plan 2

В процессе выполнения второго запроса neo4j перестает отвечать на запросы, и я должен перезапустить контейнер

Версия Neo4j 3.4.7

Размеры магазина

Подсчет магазина 5,69 КиБ

Магазин этикеток 16,02 КиБ

Индекс магазина 9,27 ГиБ

Схема магазина 8,01 КиБ

Array Store 8.01 КиБ

Логический журнал 16.53 МиБ

Узел Store 1.18 GiB

Магазин недвижимости 20.33 GiB

Магазин отношений 8.79 GiB

String Store 18,73 ГБ

Общий размер магазина 58,56 ГБ

Распределение идентификаторов

ID узла 84686407

Свойство ID 532508736

Идентификатор отношения 276570526

Идентификатор типа связи 13

Предел памяти контейнера 122880mb

Процессор 32 ядра

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...