我有一些非常长的查询时间,我无法查明问题。
我有一个包含 6685 个节点、26407 个属性和 22921 个关系的图形数据库,运行在具有 1.7GB RAM 的 Amazon EC2 实例上。
我的用例是将人们映射到他们的各种兴趣点,并为给定的用户找到与他有共同兴趣的人。
我的数据库中有大约 500 人的数据,每个人平均有 100 多个与他相关的不同兴趣点。
1)当我运行这个密码查询时:
START u=node(5) MATCH (u)-[:interests]->(i)<-[:interests]-(o) RETURN o;
这里 node(5) 是一个用户节点。所以,我试图找到与用户(u)具有相同“:兴趣”关系的所有用户。
此查询返回 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 毫秒。
我在这里做错了什么?