让节点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算法效率高,并为大量关系工作的任何建议?也可以重新设计图表。
答案 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列表。