Недавно я обнаружил, что условие гонки существует при выполнении параллельных операторов MERGE
. В частности, дублирующие узлы могут быть созданы в сценарии, когда узел создается после этапа MATCH
, но до этапа CREATE
данного MERGE
.Есть ли условие гонки при создании уникальных путей?
В некоторых случаях это можно обрабатывать с использованием уникальных ограничений для объединенных узлов; однако это не соответствует сценариям, где:
- Не существует единственного уникального свойства для обеспечения соблюдения (например, пары свойств должны быть уникальными, а индивидуальные - нет).
- Пытается объединить отношения и пути.
Решает эту проблему с помощью CREATE UNIQUE
(или существуют те же подводные камни)? Если да, это единственный вариант? Похоже, что полезность MERGE
довольно сильно уменьшена, когда она фактически не может гарантировать уникальность соединяемого пути или узла ...
В соответствии с ответом на [этот вопрос о Grokbase] (http://grokbase.com/t/gg/neo4j/137q6a6rg5/are-merge-operations-in-cypher-atomic) предполагается, что «MERGE» атомный по окончательной версии neo4j 2.0. Если вы обнаруживаете неатомное поведение, вы должны [создать проблему neo4j] (http://grokbase.com/t/gg/neo4j/137q6a6rg5/are-merge-operations-in-cypher-atomic). – cybersam
[Это правильная ссылка] (https://github.com/neo4j/neo4j/issues) для создания проблемы. Я только что проверил, и [эта существующая проблема] (https://github.com/neo4j/neo4j/issues/5091) может быть для той же проблемы. – cybersam
Для составных свойств вы можете использовать уникальное ограничение для массива prop. –