Neo4j 3.0.6を実行していて、大量のデータを複数のソースから新しいインスタンスにインポートしています。私は複数のソースと複数のスレッドから、インポートデータとの関係でしょうNeo4j 3.0.6 MERGEで一意性制約違反が発生しました
CREATE CONSTRAINT ON (n:Person) ASSERT n.id IS UNIQUE
:私は、次の制約を使用して一意性
MERGE (mother:Person{id: 22})
MERGE (father:Person{id: 55})
MERGE (self:Person{id: 128})
SET self += {name: "Alan"}
MERGE (self)-[:MOTHER]->(mother)
MERGE (self)-[:FATHER]->(father)
一方、別のスレッド上で、それでも同じのNeo4jサーバーとボルトエンドポイント、私は残りのデータをインポートすることがあります:
MERGE (husband:Person{id: 55})
MERGE (self:Person{id: 22})
SET self += {name: "Phyllis"}
MERGE (self)-[:HUSBAND]->(husband)
MERGE (wife:Person{id: 22})
MERGE (self:Person{id: 55})
SET self += {name: "Angel"}
MERGE (self)-[:WIFE]->(wife)
MERGE (brother:Person{id: 128})
MERGE (self:Person{id: 92})
SET self += {name: "Brian"}
MERGE (self)-[:BROTHER]->(brother)
MERGE (self)<-[:BROTHER]-(brother)
最後に、私は再び制約コマンドを実行した場合、私はこの取得:
Unable to create CONSTRAINT ON (Person:Person) ASSERT Person.id IS UNIQUE:
Multiple nodes with label `Person` have property `id` = 55:
node(708823)
node(708827)
をレコードがで処理される順序保証はありません何が起こって終わることは同じ(:Person{id})
取得のための複数のレコードです。作成されますが、1つにはname
データが入力されます。
Neo4jには同じIDの2つが同時に発生すると競合状態が発生するようですが、両方とも作成されます。この競合状態を避ける方法はありますか?必要なロックを確立する方法はありますか?
可能な重複:Neo4J 2.1.3 Uniqueness Constraint Being Violated, Is This A Bug?しかし、これはCREATE
のためのものであり、this google groups answerがCREATE
が制約に関してMERGE
とは動作が異なりますことを示しています。
私の答えは削除されました。更新された説明には適用されなくなりました。私はもっと良い解決策を考えることができれば別の答えを提出します。 – InverseFalcon
ありがとうInverseFalcon。私の間違った構文は、私が見るだけの完全で有用な答えを書くように促しました。 – wizulus
好奇心の邪魔をして、あなたのSETを 'ON CREATE SET ...'と 'ON MERGE SET ... 'の両方に変更するとどうなりますか?ノードが重複していますか? – InverseFalcon