我已经制作了一个简单的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]));
}
}
}
答案 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/