Creating/Managing Neo4j 3.0.4 中的数百万顶点树
Creating/Managing millions of Vertex Tree in Neo4j 3.0.4
我正在为我的大学做一些事情,我被要求创建一个系统来构建具有数百万个节点(至少 1 或 200 万)的完整树。
我试图使用定期提交创建带有加载 CSV 的树,并且它在仅创建节点时运行良好(在通用笔记本上为 70000 毫秒 :P )。当我对 Edges 进行同样的尝试时,它也没有缩放。
Using periodic commit LOAD CSV WITH HEADERS FROM 'file:///Archi.csv' AS line
Merge (:Vertex {name:line.from})<-[:EDGE {attr1: toFloat(line.attr1), attr2:toFloat(line.attr2), attr3: toFloat(line.attr3), attr4: toFloat(line.attr4), attr5: toFloat(line.attr5)}]-(:Vertex {name:line.to})
我需要保证在不超过5分钟内生成一棵树。
有没有更快的方法可以return这样的表现?
P.S。 : 该任务不希望使用 Neo4j,而只是一个数据库(SQL 或 NoSQL),但我发现了这个 NoSQL 图形数据库,我认为会很好使用 Neo4j 实现,因为图形数据结构是免费提供的。
P.P.S : 我正在使用 Cypher
我认为您应该再次阅读开发人员文档中的 MERGE,以确保您准确理解它在做什么。
需要特别注意的几件事...
如果您要合并的图案不存在,则将合并该图案的所有元素,这可能会导致创建重复的 :Vertex 节点。如果您的 :Vertexes 应该已经在数据库中,并且还没有关系,并且如果您确定没有关系在您的 CSV 中重复出现,我强烈建议您在开始和结束节点上匹配,然后创建它们之间的关系而不是 MERGE。请记住,对具有多个属性的关系执行 MERGE 意味着它会首先尝试匹配该属性,因此随着节点之间关系数量的增加,比较的数量也会增加,这会进一步减慢您的查询速度。如果您知道不会复制任何关系,并且您确定这些关系尚不存在,则 CREATE 是更好的选择。
我还敦促您在 :Vertex(name) 上创建一个索引,因为这将极大地帮助匹配端节点。
我正在为我的大学做一些事情,我被要求创建一个系统来构建具有数百万个节点(至少 1 或 200 万)的完整树。 我试图使用定期提交创建带有加载 CSV 的树,并且它在仅创建节点时运行良好(在通用笔记本上为 70000 毫秒 :P )。当我对 Edges 进行同样的尝试时,它也没有缩放。
Using periodic commit LOAD CSV WITH HEADERS FROM 'file:///Archi.csv' AS line
Merge (:Vertex {name:line.from})<-[:EDGE {attr1: toFloat(line.attr1), attr2:toFloat(line.attr2), attr3: toFloat(line.attr3), attr4: toFloat(line.attr4), attr5: toFloat(line.attr5)}]-(:Vertex {name:line.to})
我需要保证在不超过5分钟内生成一棵树。
有没有更快的方法可以return这样的表现?
P.S。 : 该任务不希望使用 Neo4j,而只是一个数据库(SQL 或 NoSQL),但我发现了这个 NoSQL 图形数据库,我认为会很好使用 Neo4j 实现,因为图形数据结构是免费提供的。
P.P.S : 我正在使用 Cypher
我认为您应该再次阅读开发人员文档中的 MERGE,以确保您准确理解它在做什么。
需要特别注意的几件事...
如果您要合并的图案不存在,则将合并该图案的所有元素,这可能会导致创建重复的 :Vertex 节点。如果您的 :Vertexes 应该已经在数据库中,并且还没有关系,并且如果您确定没有关系在您的 CSV 中重复出现,我强烈建议您在开始和结束节点上匹配,然后创建它们之间的关系而不是 MERGE。请记住,对具有多个属性的关系执行 MERGE 意味着它会首先尝试匹配该属性,因此随着节点之间关系数量的增加,比较的数量也会增加,这会进一步减慢您的查询速度。如果您知道不会复制任何关系,并且您确定这些关系尚不存在,则 CREATE 是更好的选择。
我还敦促您在 :Vertex(name) 上创建一个索引,因为这将极大地帮助匹配端节点。