2017-03-01 115 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