2017-03-01 112 views
3

我有一個Neo4j圖,它由總共100.000個用戶和2.000.000個關係(用戶之間的友誼)組成。 用戶擁有約20個友誼。Neo4j查詢時間太長

現在我試圖找出需要多少時間才能找到特定用戶(深度1),朋友的朋友(深度2)和朋友的朋友的朋友(深度3)的朋友。

這是暗號查詢我跑(用於用戶ID爲86660):

對於深度1

MATCH (u1:User{idUtente:"86660"})-[:FRIEND_OF]->(u2:User) 
RETURN u2.name 

對於深度2

MATCH (u1:User{idUtente:"86660"})-[:FRIEND_OF]->(u2:User)-[:FRIEND_OF]->(u3:User) 
RETURN u3.name 

對於深度3

MATCH (u1:User{idUtente:"86660"})-[:FRIEND_OF]->(u2:User)-[:FRIEND_OF]->(u3:User)-[:FRIEND_OF]->(u4:User) 
RETURN u4.name 

深度1(它返回我17結果)和深度2(它返回320結果)查詢花了幾毫秒,而深度3是無止境的。

如何在合理的時間內得到depth3的結果?

UPDATE

使用配置文件,我得到這樣的:

PROFILE 
    MATCH (u1:User{idUtente:"86660"})-[:FRIEND_OF]->(u2:User)-[:FRIEND_OF]->(u3:User)-[:FRIEND_OF]->(u4:User) 
    RETURN u4.name 

enter image description here

+0

你可以在你的查詢上運行配置文件併發布擴展視圖 –

+0

我關閉了我的電腦,並在幾分鐘後重新啓動(這是溫暖的,cpu工作非常辛苦)。有一些進程在後臺工作,這使得我的電腦性能很差。我再次重新運行查詢,耗時13秒。順便說一句,我要更新我的問題,包括你要求的擴展視圖。即使我使用的是舊電腦,我認爲我可以做得比13秒更好。 – splunk

+1

你可以嘗試'MATCH(u1:User {idUtente:「86660」}) - [:FRIEND_OF * 3..3] - >(u2:User) RETURN u2.name'只是爲了好玩我不知道如果它將幫助 –

回答

1

顯然,這有助於

MATCH (u1:User{idUtente:"86660"})-[:FRIEND_OF*3..3]->(u2:User) RETURN u2.name 

我覺得我的查詢之間的差異,你的就是你映射所有t他一路走來,而[:FRIEND_OF*3..3]限制我的查詢,只檢查3跳遠的實體。你可以找到更多的信息in documentation