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
你可以在你的查询上运行配置文件并发布扩展视图 –
我关闭了我的电脑,并在几分钟后重新启动(这是温暖的,cpu工作非常辛苦)。有一些进程在后台工作,这使得我的电脑性能很差。我再次重新运行查询,耗时13秒。顺便说一句,我要更新我的问题,包括你要求的扩展视图。即使我使用的是旧电脑,我认为我可以做得比13秒更好。 – splunk
你可以尝试'MATCH(u1:User {idUtente:“86660”}) - [:FRIEND_OF * 3..3] - >(u2:User) RETURN u2.name'只是为了好玩我不知道如果它将帮助 –