MERGE (n:Label { value: $value }) ON CREATE SET n.another_value = $another_value, n.created = timestamp() RETURN id(n);
Если я выполняю этот запрос одновременно, я получаю 2 равных узла.Мне нужен только один.Что я делаю неправильно?
В neo4j была ошибка, которая была исправлена некоторое время назад. Цитировать из последнего раздела этой статьи базы знаний :
Примечание для Neo4j <3.0.9 для версий 3.0.x и <3.1.2 для версий 3.1.x </strong> Предотвращена ошибка в планировщике затрат для затронутых версий Двойная проверка блокировки на MERGE. Это позволило гонки условия, которые может привести к дублированию шаблонов, создаваемых одновременным MERGE операции или другая операция записи, которая вызвала ранее несуществующий шаблон существует. Мы рекомендуем выполнить обновление до версии, включающей это исправление ошибки.
Примечание для Neo4j <3.0.9 для версий 3.0.x и <3.1.2 для версий 3.1.x </strong>
Предотвращена ошибка в планировщике затрат для затронутых версий Двойная проверка блокировки на MERGE. Это позволило гонки условия, которые может привести к дублированию шаблонов, создаваемых одновременным MERGE операции или другая операция записи, которая вызвала ранее несуществующий шаблон существует.
Мы рекомендуем выполнить обновление до версии, включающей это исправление ошибки.