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

标签 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 有 100 万个关系。我们只能从 n 开始。

密码挂起!通过java程序和neoclipse。如果我们将关系的数量从 50,000 和 100 万减少到几百个,密码就可以工作。

关于如何使该密码在算法上高效并适用于大量关系有什么建议吗?也愿意重新设计图表。

最佳答案

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

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

关于java - Cypher 挂起,我们如何修复/重新设计?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18766502/

相关文章:

java - 如何在多个 Kubernetes 容器之间共享一个 jar?

java - 使用 java -jar 运行 scala 应用程序

jQuery 选择器与过滤器()

r - 在 R 中将矩阵强制转换为整数矩阵的最快方法

neo4j - 如何避免neo4j的死锁

用于 csv 导入的 neo4j 密码查询

java - 在构建和报告部分之间共享 Maven 插件配置

javascript - jquery 快速点击

neo4j - 如何在我的 Graphql 模式中表示 Neo4j 关系属性?

java - 如何解决 clojure : java. lang.Exception 中的此错误:def 的参数太多(NO_SOURCE_FILE:130)