2014-03-06 33 views
0

这个问题是与此类似:create relationships between nodes in parallel,这Neo4j: Best way to batch relate nodes using Cypher?Neo4j的Cypher支架2.0:通过在params用于在批量比赛 - 关系

我想参数化批次使用的Cypher查询和Neo4jClient(AC#客户端创建关系对于Neo4j)。

我该如何写出来(特别关注性能) - 即仅使用匹配和创建语句,而不是合并作为合并结束了由于某种原因超时?

我想我可以做这样的事情(如在第二SO链接说明)

MATCH (s:ContactPlayer {ContactPrefixTypeId:{cptid}}) 
MATCH (c:ContactPrefixType {ContactPrefixTypeId:{cptid}}) 
CREATE c-[:CONTACT_PLAYER]->s 

使用参数:

{ 
    "query":..., 
    "params": { 
     "cptid":id1 
    } 
} 

但是,这并不工作,因为它试图匹配属性作为一个数组。

我修改它为使用WHERE x.Y IN {params}但这是非常缓慢的。第二个建议是尝试使用Neo4j的事务端点,但我不确定如何使用Neo4jClient执行此操作。

这是从2号建议,以便链接上面:

{ 
    "statements":[ 
     "statement":..., 
     "parameters": { 
      "cptid":id1 
     }, 
     "statement":..., 
     "parameters": { 
      "cptid":id2 
     } 
    ] 
}  

我没有看到这个拉请求,但没有看到,它已经实施尚未:https://github.com/Readify/Neo4jClient/pull/26

没有事务支持,有另一种方式来做到这一点?

回答

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现在。否则,您可以将其保留。