Cypher挂起,我们如何修复/重新设计?

时间:2013-09-12 14:06:12

标签: java performance neo4j cypher

让节点m,n,p和关系r1,r2如下:

(n)-r1->(p)<-r2-(m)

我们需要从m,n,p,r1和r2返回属性,所以我们有一个跟随START,MATCH和WHERE子句的密码:

START START n=node:...
MATCH (n)-[r1:RELTYPE]->(p)<-[r2:RELTYPE]-(m)
WHERE r1.SOMEPROPERTY = r2.SOMEPROPERTY
RETURN ...

SOMEPROPERTY始终存在于r1和r2上。通常,n与p具有50,000个关系,并且每个p与m具有一百万个关系。我们只能从n开始。

密码挂起!!通过java程序和neoclipse。如果我们将关系数量从50,000和100万减少到几百,那么密码就会起作用。

有关如何使此cypher算法效率高,并为大量关系工作的任何建议?也可以重新设计图表。

1 个答案:

答案 0 :(得分:1)

所以你有| r1 | = 50,000和| r2 | = 1,000,000。如果要将每个r1与每个r2进行比较,则需要50,000 * 1,000,000 = 50,000,000,000。您需要进行50亿次比较。如果每次比较需要1毫秒,那么执行此比较仍然需要50,000,000(五千万)秒。这是578天。

我可以看到你降低这种复杂性的唯一可能方法是,如果要在SOMEPROPERTY上键入的节点p上创建一个r1和r2映射。然后你只需要获取SOMEPROPERTY的r1列表和SOMEPROPERTY的r2列表。