在Neo4J中优化摄取查询
我正在尝试摄取一个包含约100个节点但有约10K个时间戳关系的图 经过一些研究,我使用了批处理&在我的本地机器(localhost)上使用UNWIND可以将摄取时间从6分钟缩短到40秒 但是,当我将相同的10K关系批处理事务发送到不同的服务器时,需要花费3分钟以上的时间 在远程服务器上,我可以使用哪些策略来减少对neo4j的摄取时间?(我之所以托管远程服务器,是为了将neo4j的执行周期与我的pc分开,我的pc必须执行我的应用程序所需的大量nlp任务,服务器位于我的lan上&我是唯一使用ip地址连接到它的用户) 我的摄取查询如下:在Neo4J中优化摄取查询,neo4j,cypher,Neo4j,Cypher,我正在尝试摄取一个包含约100个节点但有约10K个时间戳关系的图 经过一些研究,我使用了批处理&在我的本地机器(localhost)上使用UNWIND可以将摄取时间从6分钟缩短到40秒 但是,当我将相同的10K关系批处理事务发送到不同的服务器时,需要花费3分钟以上的时间 在远程服务器上,我可以使用哪些策略来减少对neo4j的摄取时间?(我之所以托管远程服务器,是为了将neo4j的执行周期与我的pc分开,我的pc必须执行我的应用程序所需的大量nlp任务,服务器位于我的lan上&我是唯一使用ip地址
result = cypher.query("CREATE CONSTRAINT ON (n:USPolitics) ASSERT n.id IS UNIQUE",map());
parameters = createrelations();
result = cypher.query(
"UNWIND {batches} as batch " +
"MATCH (nodeA {id: batch.nodeA})"+
"MATCH (nodeB {id: batch.nodeB})"+
"MERGE (nodeA)-[rel:KNOWS]->(nodeB)" +
"ON CREATE SET rel+=batch.properties " +
"RETURN 1", parameters);
您需要将标签
USPolitics
添加到查询中,以确保使用您创建的约束的索引。当然,假定nodeA
和nodeB
实际上是USPolitics
节点
result = cypher.query("CREATE CONSTRAINT ON (n:USPolitics) ASSERT n.id IS UNIQUE",map());
parameters = createrelations();
result = cypher.query(
"UNWIND {batches} as batch " +
"MATCH (nodeA:USPolitics {id: batch.nodeA})"+
"MATCH (nodeB:USPolitics {id: batch.nodeB})"+
"MERGE (nodeA)-[rel:KNOWS]->(nodeB)" +
"ON CREATE SET rel+=batch.properties " +
"RETURN 1", parameters);
您忘记了
匹配的节点上的标签参见Dave的答案。您不必返回任何内容,或者只需返回计数(*)