2017-04-23 73 views
0

我已經做出了一個簡單的java代碼來使60多萬個現有節點之間的關係,關係數據取自100萬行,問題是幾乎永遠需要完成創建關係,在寫這篇文章的時候只有7930個關係被創建。Neo4j花費很長時間來創建節點之間的關係

如何解決這個問題?

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

分配採樣和你的代碼 –

+0

我已經更新了我的代碼@TomažBratanič – User

+2

不知道怎麼會有人回答你:我們有不知道你的閱讀從Postgres讀取多長時間,如果這是瓶頸(你運行你的代碼而不插入neo,並從postgres讀取?)。我們不知道您使用的是什麼類型的硬件或虛擬機,或者您的兩個數據庫共享相同的環境。我們不知道每個插入操作需要多長時間(您的代碼不會測量任何內容)。而且「在寫這篇文章的時候,」我們不知道你坐了多久等待。 –

回答

3

根據您提供的數據,我猜想Node.id沒有編入索引。如果不是,並且有很多節點節點,那麼數據庫命中可能會很多,直到它與該ID匹配爲止。嘗試創建索引並重新運行。

+0

'創建索引:節點(id)'或更好'創建約束(n:節點)斷言n.id是唯一的' –

+0

您的解決方案已經解決了我的問題,非常感謝:) – User