我写了一个简单的测试执行并发MERGE
请求,并发现,虽然创建我希望唯一的节点空数据库的多个节点。的Neo4j/Cypher支架并发合并
[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
我希望有一个节点与最新指标执行。
注意我所使用的.NET Neo4jClient
注意到对于未来的读者,比赛条件是在某些Neo4j的版本(版本3.1.X <3.0.9为3.0.x的版本,并<3.1.2)中的错误的结果,并且已被固定。这样做的目的是始终锁定保障,以便MERGE无法创建重复节点。 – InverseFalcon