令人难以置信的高查询时间

时间:2013-09-30 07:59:15

标签: neo4j

我的查询时间非常长,我无法确定问题所在。

我有一个包含6685个节点,26407个属性和22921个关系的图形数据库,在具有1.7GB RAM的Amazon EC2实例上运行。

我的用例是将人们映射到他们的各种兴趣点,并找到给定用户,他们是与他有共同兴趣的人。

我的数据库中有大约500人的数据,每个人平均有超过100个与他相关的不同兴趣点。

1)当我运行这个密码查询时:

START u=node(5) MATCH (u)-[:interests]->(i)<-[:interests]-(o) RETURN o;

这里节点(5)是用户节点。因此,我试图找到与用户(u)具有相同“:interest”关系的所有用户。

此查询返回2557行,大约需要350毫秒。

2)当我加入一些额外的MATCH条件时,查询时间呈指数级下降。

例如,如果我想找到与user(u)= node(5)有共同兴趣的所有用户,并且也分享同一个家乡,我写道:

START u=node(5) 
MATCH (u)-[:interests]->(i)<-[:interests]-(o) 

WITH u,o,i
MATCH (u)-[:hometown]->(h)<-[:hometown]-(o)
RETURN u, o, i, h;

此查询返回755行,大约需要2500毫秒!

3)如果我向MATCH添加更多约束,如同性别,相同的母校等,查询时间逐渐恶化到> 10,000 ms。

我在这里做错了什么?

1 个答案:

答案 0 :(得分:2)

您是否可以尝试在第一个MATCH子句中说明整个模式,即MATCH (u)-[:interests]->(i)<-[:interests]-(o)-[:hometown]->(h)<-[:hometown]-(o)