私は、同時のMERGE
リクエストを実行するシンプルなテストを書いて、空のデータベースには一意のノードがあると思われるが複数のノードが作成されていることがわかりました。Neo4j/Cypher concurrent MERGE
[Test]
public void ConcurrentNodeMerge()
{
// act
Parallel.ForEach(Enumerable.Range(1, 10), index =>
{
client.Cypher
.Merge("(n:Node)")
.Set("n.Index = COALESCE(n.Index, '') + ' ' + {index}")
.WithParam("index", index.ToString())
.ExecuteWithoutResults();
});
// assert
var result = client.Cypher
.Match("(n:Node)")
.Return<string>("n.Index")
.Results;
Assert.That(result.Count(), Is.EqualTo(1));
}
私は実行、最新のインデックスを持つ一つのノードを持つことを期待
Index 8 3 7 5 2 10 6 1
Index 4 3 7 9 5 2 10 6 1
以下のように私は常にインデックスフィールドを持つ2つのノードで終わります。
注私は私はあなたが上の制約はありませんと仮定.NET Neo4jClient
将来の読者のために、いくつかのNeo4jバージョン(3.0.xバージョンの場合は3.0.9未満、3.1.xバージョンの場合は3.1.2バージョン)のバグの結果、競合状態が修正されました。 MERGEが重複したノードを作成できないように、常に保証をロックするためのものです。 – InverseFalcon