Neo4j需要很长时间才能在节点之间建立关系

时间:2017-04-23 12:53:50

标签: java neo4j

我已经制作了一个简单的java代码来建立超过60万个现有节点之间的关系,关系数据来自100万行,问题是几乎要永远完成创建关系,只有7930关系被创建在写这篇文章的那一刻。

如何解决这个问题?

public void createRealtionBetweenNodes(Postgresql object){

 Map<Integer, String[][]> data = object.getRelationData();

try (Driver driver = org.neo4j.driver.v1.GraphDatabase.driver( "bolt://localhost:7687", AuthTokens.basic( "user", "password" ) );
                Session session = driver.session()){

for(int incrementer: data.keySet()){

String [][] dataholder = data.get(incrementer);

session.run( "match (x:Node{id:{id1}}),(y:Node{id:{id2}}) create (x)-[:Knows{ID:{KID}}]->(y);", parameters("id1",dataholder[0][0],"id2",dataholder[0][1],"KID",dataholder[0][2]));

    }
  }
}

2 个答案:

答案 0 :(得分:3)

我猜,根据您提供的数据,Node.id未编入索引。如果不是,并且有很多Node节点,那么数据库命中可能会很多,直到它与id匹配。尝试创建一个索引并再次运行它。

答案 1 :(得分:1)

您也不应该为每次插入创建驱动程序会话。而是保留它们并在每10k到100k的关系中创建一个事务。

另外为了加快速度,请看一下: http://jexp.de/blog/2017/03/5-tips-tricks-for-fast-batched-updates-of-graph-structures-with-neo4j-and-cypher/