Дублированные узлы и отношения - PullRequest
0 голосов
/ 12 января 2019

У меня есть функция, которая создает узел VISIT при каждом посещении ссылки. Я также прикрепляю некоторые статистические данные к этому посещающему узлу, такие как ДАТА, БРАУЗЕР, ОС и т. Д.

Но иногда узел Date (или, возможно, другие узлы) дублируется, что означает, что я получаю 2 узла date для одного VISIT.

Каждый ВИЗИТ должен быть привязан только к одному узлу статистики. (например, один браузер, одна дата)

Вот мой код:

MATCH (l:URL { id: $id })
CREATE (v:VISIT)
MERGE (b:BROWSER { browser: $browser })
MERGE (c:COUNTRY { country: $country })
MERGE (o:OS { os: $os })
MERGE (r:REFERRER { referrer: $referrer })
MERGE (d:DATE { date: $date })
MERGE (v)-[:VISITED]->(l)
MERGE (v)-[:BROWSED_BY]->(b)
MERGE (v)-[:LOCATED_IN]->(c)
MERGE (v)-[:OS]->(o)
MERGE (v)-[:REFERRED_BY]->(r)
MERGE (v)-[:VISITED_IN]->(d)
RETURN l

А вот пример графического изображения: VISIT (красный узел) должен иметь только одно отношение VISITED_IN и только к одному узлу этого типа.

duplicated nodes imag

1 Ответ

0 голосов
/ 14 января 2019

Слияние не является ThreadSafe. Он в основном делает 3 вещи подряд, но может столкнуться с проблемами параллелизма: 1. Проверьте, существует ли шаблон 2. Создает его, если это не так 3. Возвращает

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

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

CREATE CONSTRAINT ON (d:Date) ASSERT d.date IS UNIQUE
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...