Как предотвратить двойные отношения без использования MERGE Neo4J 3.5? - PullRequest
0 голосов
/ 08 июля 2019

Как предотвратить повторяющиеся отношения без использования MERGE Neo4J 3.5?

Я хочу выполнить следующий запрос для каждой партии, полученной от Kafka.

MATCH (a:Dense1) where a.id <> "1" 
WITH a 
MATCH (b:Dense1) where b.id = "1" 
WITH a,b 
WHERE a.key = b.key 
CREATE (a)-[:PARENT_OF]->(b)

Если я изменю CREATEдо MERGE производительность значительно замедляется из-за двойной блокировки, как объяснено здесь , если я изменю CREATE на CREATE UNIQUE Производительность лучше, чем MERGE, но все еще не хороша, как только CREATE.Моя цель - если между двумя узлами существуют отношения, просто ничего не делать, даже если запрос выполняется несколько раз или даже лучше отправить уведомление или исключение в драйвер клиента, чтобы приложение могло сделать что-то полезное.Могу ли я создать свойство uid для каждого отношения и наложить на него ограничение?это будет работать?

1 Ответ

0 голосов
/ 08 июля 2019

Вы можете добавить в свой последний пункт WHERE проверку, есть ли связь:

MATCH (a:Dense1) where a.id <> "1" 
WITH a 
MATCH (b:Dense1) where b.id = "1" 
WITH a,b 
WHERE a.key = b.key AND NOT (a)-[:PARENT_OF]->(b)
CREATE (a)-[:PARENT_OF]->(b)

Но это в значительной степени то, что делает команда MERGE ...

Есть ли у вас индекс / ограничение на свойства id и key?

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