我正在尝试使用Neo4j构建一个包含七种不同类型节点的结构的数据库,总共大约有4-5000个节点和40000个关系。我目前正在使用的Cypher代码是首先使用以下代码创建节点:
Create (node1:type {name:'example1', type:'example2'})
大约有4000个具有独特节点的示例。
然后我得到了以下关系说明:
Create
(node1)-[:r]-(node51),
(node2)-[:r]-(node5),
(node3)-[:r]-(node2);
大约有40000种这样独特的关系。
对于规模较小的图表,这一点都不成问题。但对于这个图表,执行查询永远不会停止加载。
有什么建议可以让我让这种类型的查询起作用吗?或者我应该做些什么呢?
编辑。我正在尝试构建一个关于产品的大型图形,其中包含其发布、发布版本、功能等。与电影图例类似。
该产品总共有大约6个发布版本,每个发布版本大约有20个发布版本。总共有371个功能,其中371个功能中还有438个功能版本。每个发布版本(总共120个)则有大约2-300个功能版本。这些功能版本被映射到其具有依赖关系的功能,这些依赖关系涉及数据库中的各个方面。我还涉及了硬件依赖性,例如可能运行这些功能的硬件、发行版等。因此,我使用像下面这样的 Cypher 代码:
Create (Product1:Product {name:'ABC', type:'Product'})
Create (Release1:Release {name:'12A', type:'Release'})
Create (Release2:Release {name:'13A, type:'release'})
Create (ReleaseVersion1:ReleaseVersion {name:'12.0.1, type:'ReleaseVersion'})
Create (ReleaseVersion2:ReleaseVersion {name:'12.0.2, type:'ReleaseVersion'})
并且在它们下面,我使用了结构化的方式进行了整理
Create (Product1)<-[:Is_Version_Of]-(Release1),
(Product1)<-[:Is_Version_Of]-(Release2),
(Release2)<-[:Is_Version_Of]-(ReleaseVersion21),
一直到特性层面,我还添加了它们之间的依赖关系,例如:
(Feature1)-[:Requires]->(Feature239),
(Feature239)-[:Requires]->(Feature51);
由于我需要从许多不同的Excel表格等文件中找到所有这些信息,所以我以这种方式编写了代码,认为我可以将其合并为一个大的Cypher查询,并在本地主机上的/浏览器上运行它。只要我一次不使用超过4-5000个查询,它就非常好用。然后,在最长5-10秒的时间内创建整个数据库,但现在当我尝试同时运行约45000个查询时,它已经运行了近24小时,仍在加载并显示“执行查询...”。我想知道是否有任何方法可以改善它所需的时间?数据库最终会被创建吗?还是我可以做一些更智能的索引或其他事情来提高性能?因为按照我的Cypher编写方式,我不能将其分成几部分,因为数据库中的每个内容都与产品有某种连接。我需要重新编写代码吗,还是有其他的解决办法?
MERGE
子句 https://neo4j.com/docs/developer-manual/current/cypher/clauses/merge/ - Tony