1

我有一些非常长的查询时间,我无法查明问题。

我有一个包含 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 毫秒。

我在这里做错了什么?

4

1 回答 1

2

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

于 2013-09-30T09:26:01.327 回答