我正在尝试用Neo4j建立一个数据库,它的结构包含七种不同类型的节点,总共大约4-5,000个节点,它们之间大约有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个功能版本。这些功能版本被映射到它的功能,这些功能对数据库中的所有东西都有一点依赖。我还涉及到硬件依赖关系,例如运行这些功能的可能硬件,发布版本等,因此基本上使用密码进行即时通信,例如:
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表格等中查找所有这些信息,所以我以这种方式编写代码,我认为我可以将它们放在一个大规模的密码查询中,然后在本地主机的/browser上运行它。只要我一次使用的查询不超过4-5000个,它就能工作得很好。然后它在最多5-10秒内创建了整个数据库,但现在当我试图同时运行大约45000个查询时,它已经运行了近24个小时,并且仍然在加载并说“正在执行查询...”。我想知道是否有任何方法可以缩短所需的时间,数据库最终会被创建吗?或者,我可以做一些更智能的索引或其他事情来提高性能吗?因为顺便说一下,我现在不能将密码分成几个部分,因为数据库中的所有内容都与产品有某种联系。我需要重写代码吗?或者有什么平滑的方法吗?
发布于 2014-04-28 23:24:35
您可以使用一条create语句创建多个相互链接的节点和关系,如下所示:
create (a { name: "foo" })-[:HELLO]->(b {name : "bar"}),
(c {name: "Baz"})-[:GOODBYE]->(d {name:"Quux"});这是一种方法,而不是使用单个语句单独创建每个节点,然后使用单个语句创建每个关系。
您还可以从对象创建多个关系,方法是先匹配,然后创建:
match (a {name: "foo"}), (d {name:"Quux"}) create (a)-[:BLAH]->(d);当然,您可以有多个匹配子句和多个create子句。
您可以尝试匹配给定类型的节点,然后从该类型的节点创建所有必要的关系。您有足够的关系,这将需要许多查询。确保你已经索引了你用来匹配节点的属性。随着您的数据库变得越来越大,允许快速查找您试图从中创建新关系的内容将变得非常重要。
您尚未指定正在运行的查询不是“停止加载”。请使用详细信息更新您的问题,并让我们知道您尝试过的内容,也许这可能会有所帮助。
发布于 2019-02-27 10:36:45
如果您已经创建了一个节点,那么一种简单的方法是:
MATCH (n: user {uid: "1"}) CREATE (n) -[r: posted]-> (p: post {pid: "42", title: "Good Night", msg: "Have a nice and peaceful sleep.", author: n.uid});在这里,用户节点已经存在,您已经创建了一个新的关系和一个新的post节点。
发布于 2014-04-29 16:53:21
另一种有趣的方法可能是直接在Excel中生成语句,参见http://blog.bruggen.com/2013/05/reloading-my-beergraph-using-in-graph.html?view=sidebar的示例。您可以在一个事务中运行许多CREATE语句,因此这不应该过于复杂。
https://stackoverflow.com/questions/23336802
复制相似问题