在Neo4J中优化摄取查询

在Neo4J中优化摄取查询,neo4j,cypher,Neo4j,Cypher,我正在尝试摄取一个包含约100个节点但有约10K个时间戳关系的图 经过一些研究,我使用了批处理&在我的本地机器(localhost)上使用UNWIND可以将摄取时间从6分钟缩短到40秒 但是,当我将相同的10K关系批处理事务发送到不同的服务器时,需要花费3分钟以上的时间 在远程服务器上,我可以使用哪些策略来减少对neo4j的摄取时间?(我之所以托管远程服务器,是为了将neo4j的执行周期与我的pc分开,我的pc必须执行我的应用程序所需的大量nlp任务,服务器位于我的lan上&我是唯一使用ip地址

我正在尝试摄取一个包含约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的答案。您不必返回任何内容,或者只需
返回计数(*)