此问题与此类似:create relationships between nodes in parallel和此Neo4j: Best way to batch relate nodes using Cypher?
我想使用Cypher查询和Neo4jClient(Neo4j的c#客户端)参数化批处理来创建关系。
我如何写出来(特别注重性能) - 即仅使用match和create语句而不是Merge,因为合并因某种原因导致超时?
我以为我可以做这样的事情(如第二条SO链接所述)
MATCH (s:ContactPlayer {ContactPrefixTypeId:{cptid}})
MATCH (c:ContactPrefixType {ContactPrefixTypeId:{cptid}})
CREATE c-[:CONTACT_PLAYER]->s
用params:
{
"query":...,
"params": {
"cptid":id1
}
}
但这不起作用,因为它试图将该属性与数组匹配。
我将其修改为使用WHERE x.Y IN {params}
,但这非常慢。第二个建议是尝试使用Neo4j的事务端点,但我不确定如何使用Neo4jClient。
这是上面第二条SO链接的建议:
{
"statements":[
"statement":...,
"parameters": {
"cptid":id1
},
"statement":...,
"parameters": {
"cptid":id2
}
]
}
我确实看到了这个拉取请求,但没有看到它已经实现了:https://github.com/Readify/Neo4jClient/pull/26
如果没有交易支持,还有另一种方法吗?
答案 0 :(得分:0)
使用以下查询时的效果如何?
USING PERIODIC COMMIT 1000
MATCH (s:ContactPlayer), (c:ContactPrefixType)
WHERE s.ContactPrefixTypeId = c.ContactPrefixTypeId
CREATE c-[:CONTACT_PLAYER]->s
如果您想试用periodic commit声明,那么您现在必须使用版本2.1.0-M1。否则,你可以把它留下来。