Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/google-chrome/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用cypher和apoc向neo4j空间层添加数百万个节点_Neo4j_Cypher_Neo4j Spatial_Neo4j Apoc - Fatal编程技术网

使用cypher和apoc向neo4j空间层添加数百万个节点

使用cypher和apoc向neo4j空间层添加数百万个节点,neo4j,cypher,neo4j-spatial,neo4j-apoc,Neo4j,Cypher,Neo4j Spatial,Neo4j Apoc,我有一个380万节点的数据集,我正试图将所有这些节点加载到Neo4j spatial中。节点将进入一个简单的点图层,因此具有所需的纬度和经度字段。我试过: MATCH (d:pointnode) WITH collect(d) as pn CALL spatial.addNodes("point_geom", pn) yield count return count 但这只是继续旋转,没有任何事情发生。我也尝试过(我一直在一行上运行下一个查询,但为了便于阅读,我只是将其拆分): 但是再次出

我有一个380万节点的数据集,我正试图将所有这些节点加载到Neo4j spatial中。节点将进入一个简单的点图层,因此具有所需的纬度和经度字段。我试过:

MATCH (d:pointnode) 
WITH collect(d) as pn 
CALL spatial.addNodes("point_geom", pn) yield count return count
但这只是继续旋转,没有任何事情发生。我也尝试过(我一直在一行上运行下一个查询,但为了便于阅读,我只是将其拆分):

但是再次出现了大量的旋转和偶尔出现的JAVA堆错误

我尝试的最后一种方法是将FME与HTTP调用程序一起使用,这种方法可以工作,但速度非常慢,因此无法很好地扩展到数百万个节点


如有任何意见或建议,将不胜感激。apoc.periodic.commit或apoc.periodic.rock_____roll是比定期迭代更好的选择吗

您有380000个节点,您可以在one列表中收集它们。。。然后你调用一次,将列表添加到图层中。。。这需要一段时间,消耗大量的记忆apoc.periodic.iterate完全没有区别,因为您只调用一个spatial.addNodes

这可能需要一段时间,但为什么不逐点添加它们呢

CALL apoc.periodic.iterate(
  "MATCH (d:pointnode) RETURN d",
  "CALL spatial.addNode('point_geom', d) YIELD node RETURN node"
  {batchSize:10000, parallel:false, listIterate:true})
希望这能有所帮助(或者至少能解释为什么你会有问题)

问候,,
Tom

经过一点尝试和错误后,定期提交已导致相对快速的解决方案(仍然需要2-3个小时)

批量越大,速度越快


批量大小为5000的编辑需要45分钟

谢谢,确实有效,但正如您所说的,速度非常慢。我认为apocalype.periodic.commit不会同时读取所有节点,这对吗?因此,如果语法正确,它将读取前10000个节点,将它们添加到空间层。然后继续,因此需要更少的内存?是的,但需要先标记需要处理的节点,然后删除已处理的一批节点的标记。这当然需要额外的处理(read:time),但会减少内存使用。然而,3800000节点的标记本身也需要时间和内存,因此,如果我最初的解决方案对您来说是可行的(内存方面…您仍然可以稍微增加批处理大小),您可能希望坚持这一点。感谢您的建议,Tom,问题的答案在于定期提交,我将把该解决方案作为一个答案发布{limit:1000}do??限制批处理的大小,因此在每个委员会的空间层中添加1000个节点。与您有相同的问题,但是您的解决方案不适用于我,这是我的问题
CALL apoc.periodic.iterate(
  "MATCH (d:pointnode) RETURN d",
  "CALL spatial.addNode('point_geom', d) YIELD node RETURN node"
  {batchSize:10000, parallel:false, listIterate:true})
call apoc.periodic.commit("match (n:pointnode) 
where not (n)-[:RTREE_REFERENCE]-() with n limit {limit} 
WITH collect(n) AS pnodes 
CALL spatial.addNodes('point_geom', pnodes) YIELD count return count",
{limit:1000})