在Neo4j 3.0.4中创建/管理数百万个顶点树

时间:2016-11-18 18:17:27

标签: neo4j tree database-performance

我正在为我的大学做一些事情,并且我被要求创建一个系统来构建具有数百万个节点(至少1或2百万)的完整树。 我试图使用加载CSV创建树使用定期提交,它可以很好地创建正常的节点(通用笔记本上的70000毫秒:P)。当我尝试与边缘相同时,它也没有扩展。

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分钟的时间内生成一个树。

是否有更快的方法可以返回这样的表演?

P.S。 :任务不期望使用Neo4j,而只是一个数据库(SQL或NoSQL),但我发现这个NoSQL Graph DB,我认为用Neo4j实现是很好的,因为图形数据结构是给出的免费。

P.P.S:我使用Cypher

1 个答案:

答案 0 :(得分:1)

我认为您应该再次阅读开发人员文档中的MERGE,以确保您完全了解它正在做什么。

特别要注意的一些事情......

如果您要合并的模式不存在,则模式的所有元素都将合并,这可能会导致重复:正在创建顶点节点。如果您的:Vertexes应该已经在数据库中,如果还没有关系,并且如果您确定CSV中没有任何关系重复,我强烈建议您在开始和结束节点上进行MATCH,然后创建它们之间的关系而不是MERGE。请记住,使用具有许多属性的关系进行MERGE意味着它将首先尝试匹配,因此当节点之间的关系数量增加时,将会有越来越多的比较,这将进一步减慢查询速度。如果您知道不会重复关系,并且您确定这些关系尚不存在,那么CREATE是一个更好的选择。

我还建议你在:Vertex(name)上创建一个索引,因为这将极大地帮助匹配终端节点。