Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.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查询导致neo4j shell内存不足错误_Shell_Properties_Neo4j_Out Of Memory_Cypher - Fatal编程技术网

删除属性的Cypher查询导致neo4j shell内存不足错误

删除属性的Cypher查询导致neo4j shell内存不足错误,shell,properties,neo4j,out-of-memory,cypher,Shell,Properties,Neo4j,Out Of Memory,Cypher,我有一个超过1500万个节点的大型网络。我想使用neo4 shell中的一个Cypher查询从所有这些属性中删除属性“CONTROL” 如果我尝试并执行以下任何一项: 匹配(n),其中has(n.`CONTROL`)移除n.`CONTROL`返回计数(n) 匹配(n)其中有(n.`CONTROL`)删除n.`CONTROL` 匹配(n)删除n.`CONTROL` 系统返回: 服务器线程中发生错误;嵌套异常是: java.lang.OutOfMemoryError:java堆空间 即使以下查询

我有一个超过1500万个节点的大型网络。我想使用neo4 shell中的一个Cypher查询从所有这些属性中删除属性“CONTROL”

如果我尝试并执行以下任何一项:

  • 匹配(n),其中has(n.`CONTROL`)移除n.`CONTROL`返回计数(n)
  • 匹配(n)其中有(n.`CONTROL`)删除n.`CONTROL`
  • 匹配(n)删除n.`CONTROL`
系统返回:

服务器线程中发生错误;嵌套异常是: java.lang.OutOfMemoryError:java堆空间

即使以下查询也会给出OutOfMemoryError:

  • 匹配(n)删除n.`CONTROL`返回n.`ID`限制10
作为一项测试,以下操作确实正确执行:

  • 匹配(n),其中有(n.`CONTROL`)返回计数(n)
返回166351

一些细节:

内存限制取决于以下设置:

  • wrapper.java.maxmemory(conf/neo4j wrapper.conf)
  • neostore…\内存(conf/neo4j.properties)
通过将两个文件中的这些值设置为总计28 GB,将生成约45 GB的java_pidXXX.hprof文件(wrapper.java.additional=-XX:+HeapDumpOnOutOfMemoryError)

我能找到的唯一线索是:

…您使用Neo4j外壳,它只是一个ops工具,只在发送回之前收集内存中的数据,它从来没有打算处理巨大的结果集

使用neo4j shell和cypher真的不可能删除大型网络中的属性吗?或者我做错了什么

PS

其他信息:

  • Neo4j版本:2.1.3

  • Java版本:Java(TM)SE运行时环境(build 1.7.0_76-b13)和OpenJDK运行时环境(IcedTea 2.5.4)(7u75-2.5.4-1~trusty1)

  • 数据库为7.4 GB(166351个节点,14724489个关系)

  • 属性“CONTROL”为空,即,它只是为所有节点定义的,没有实际分配属性值

data/console.log中的异常示例:

java.lang.OutOfMemoryError:java堆空间 正在将堆转储到java_pid20541.hprof。。。 转储文件不完整:文件大小限制 线程“GC Monitor”中的异常线程“pool-2-thread-2”中的异常java.lang.OutOfMemoryError:java堆空间 位于java.util.Arrays.copyOf(Arrays.java:2271) safeTrim(StringCoding.java:79) 在java.lang.StringCoding.access$300(StringCoding.java:50) 在java.lang.StringCoding$StringEncoder.encode(StringCoding.java:305) 在java.lang.StringCoding.encode(StringCoding.java:344) 在java.lang.StringCoding.encode(StringCoding.java:387) 位于java.lang.String.getBytes(String.java:956) 位于ch.qos.logback.core.encoder.layoutWrappingCoder.convertToBytes(layoutWrappingCoder.java:122) 在ch.qos.logback.core.encoder.LayoutWrappingEncoder.doEncode(LayoutWrappingEncoder.java:135) 在ch.qos.logback.core.OutputStreamAppender.writeOut(OutputStreamAppender.java:194)中 位于ch.qos.logback.core.FileAppender.writeOut(FileAppender.java:209) 位于ch.qos.logback.core.OutputStreamAppender.subAppend(OutputStreamAppender.java:219) 在ch.qos.logback.core.OutputStreamAppender.append(OutputStreamAppender.java:103)中 位于ch.qos.logback.core.UnsynchronizedAppenderBase.doAppend(UnsynchronizedAppenderBase.java:88) 位于ch.qos.logback.core.spi.appenderatachableimpl.appenderlooponappenders(appenderatachableimpl.java:48) 位于ch.qos.logback.classic.Logger.appendLoopOnAppenders(Logger.java:273) 位于ch.qos.logback.classic.Logger.callAppenders(Logger.java:260) 在ch.qos.logback.classic.Logger.buildLoggingEventAndAppend(Logger.java:442)中 在ch.qos.logback.classic.Logger.filterAndLog_0_或3plus上(Logger.java:396) 位于ch.qos.logback.classic.Logger.warn(Logger.java:709) 位于org.neo4j.kernel.logging.LogbackService$Slf4jToStringLoggerAdapter.warn(LogbackService.java:243) 位于org.neo4j.kernel.impl.cache.MeasureDoNothing.run(MeasureDoNothing.java:84) java.lang.OutOfMemoryError:java堆空间 位于java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.AddConditionWater(AbstractQueuedSynchronizer.java:1857) 位于java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2039) 位于java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:1079) 位于java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:807) 位于java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1068) 位于java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1130) 位于java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) 运行(Thread.java:745) 线程“Statistics Gatherer[primitives]”java.lang.OutOfMemoryError中出现异常:java堆空间 线程“RMI RenewClean-[10.65.4.212:42299]”java.lang.OutOfMemoryError:java堆空间中出现异常 线程“RMI RenewClean-[10.65.4.212:43614]”java.lang.OutOfMemoryError:java堆空间中出现异常参见此处:

要使用Cypher更新数据,还需要考虑事务大小。对于嵌入式情况,批处理事务将在本系列的下一期中讨论。对于通过Neo4j REST API的远程执行,有几件重要的事情需要记住。特别是对于大型索引查找和匹配结果,查询可能会更新数十万个元素。然后,可以在更新操作之前放置使用WITH和SKIP/LIMIT的分页机制

MATCH (m:Movie)<-[:ACTED_IN]-(a:Actor)
WITH a, count(*) AS cnt
SKIP {offset} LIMIT {pagesize}
SET a.movie_count = cnt
RETURN count(*)
MATCH (n) WHERE has(n.`CONTROL`) 
WITH n
LIMIT 100000
REMOVE n.`CONTROL` 
RETURN COUNT(n);