我正在使用Neo4j 2.2.1和Spring Data Neo4j 4.0.0,我正在尝试导入一个时间树状图(具有下一个,第一,最后和子关系),但只有2个级别。我保存在根对象,我得到了以下异常(由于巨大的大小,我省略了异常中重复的部分):
org.neo4j.ogm.session.result.ResultProcessingException: Failed to execute request: {"statements":[{"statement":"CREATE (_1:`Trace`{_1_props}),
...
...
at org.neo4j.ogm.session.request.DefaultRequest.execute(DefaultRequest.java:90)
at org.neo4j.ogm.session.request.SessionRequestHandler.execute(SessionRequestHandler.java:94)
at org.neo4j.ogm.session.delegates.SaveDelegate.save(SaveDelegate.java:66)
at org.neo4j.ogm.session.Neo4jSession.save(Neo4jSession.java:375)
at org.springframework.data.neo4j.repository.GraphRepositoryImpl.save(GraphRepositoryImpl.java:101)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at org.springframework.data.repository.core.support.RepositoryFactorySupport$QueryExecutorMethodInterceptor.executeMethodOn(RepositoryFactorySupport.java:452)
at org.springframework.data.repository.core.support.RepositoryFactorySupport$QueryExecutorMethodInterceptor.doInvoke(RepositoryFactorySupport.java:437)
at org.springframework.data.repository.core.support.RepositoryFactorySupport$QueryExecutorMethodInterceptor.invoke(RepositoryFactorySupport.java:409)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
at org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:99)
at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:281)
at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:96)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:136)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:207)
at com.sun.proxy.$Proxy42.save(Unknown Source)
at de.rwthaachen.service.core.EpisodeServiceImpl.loadEpisodeVersionDataTest(EpisodeServiceImpl.java:141)
at sampleapp.EpisodeLauncher.main(EpisodeLauncher.java:70)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:140)
Caused by: org.apache.http.client.HttpResponseException: Server Error
at org.neo4j.ogm.session.request.DefaultRequest.execute(DefaultRequest.java:77)
... 27 more
这是我插入数据的函数:
public void loadEpisodeVersionDataTest(String projectName, Long timestampOfEpisodeVersion, LinkedHashSet<ExecutionRecord> executionRecords)
{
Long episodeNodeId = timeTreeService.getEpisodeVersionNodeId(projectName, timestampOfEpisodeVersion);
EpisodeVersion episodeVersion = episodeVersionRepository.findOne(episodeNodeId);
if(episodeVersion.getTraces() == null)
{
episodeVersion.contains(new LinkedHashSet<Trace>());
Trace firstTrace = new Trace(0);
episodeVersion.addTrace(firstTrace);
episodeVersion.first(firstTrace);
episodeVersion.last(firstTrace);
}
HashMap<String, Filter> filterMatchingStringToFilterMap = new HashMap<String, Filter>();
for(Filter filter : filterRepository.getFiltersByFilterVersionChangeId(episodeVersion.getFilterVersionChange().getId()))
{
filterMatchingStringToFilterMap.put(filter.getMatchingString(), filter);
}
Iterator<ExecutionRecord> executionRecordIterator = executionRecords.iterator();
ExecutionRecord previousExecutionRecord = episodeVersion.getLastTrace().getLastExecutionRecord();
while(executionRecordIterator.hasNext())
{
ExecutionRecord executionRecord = executionRecordIterator.next();
executionRecord.callerMappedOn(filterMatchingStringToFilterMap.get(executionRecord.getCallerFilterMatchingString()));
executionRecord.calleeMappedOn(filterMatchingStringToFilterMap.get(executionRecord.getCalleeFilterMatchingString()));
if(executionRecord.getTraceSequenceNumber() != episodeVersion.getLastTrace().getTraceSequenceNumber())
{
Trace newTrace = new Trace(executionRecord.getTraceSequenceNumber());
newTrace.nextOf(episodeVersion.getLastTrace());
episodeVersion.addTrace(newTrace);
episodeVersion.last(newTrace);
}
if(episodeVersion.getLastTrace().getExecutionRecords() == null)
{
episodeVersion.getLastTrace().contains(new LinkedHashSet<ExecutionRecord>());
episodeVersion.getLastTrace().first(executionRecord);
}
episodeVersion.getLastTrace().addExecutionRecord(executionRecord);
executionRecord.nextOf(previousExecutionRecord);
previousExecutionRecord = executionRecord;
episodeVersion.getLastTrace().last(executionRecord);
}
episodeVersionRepository.save(episodeVersion);
}
这个异常是什么意思?当我调试代码时,对象定义是预期的。提前感谢您的建议,我将非常感激!
编辑
所以,我已经设法使以前的异常消失了。但是现在我得到了另一个异常,如下所示。
java.lang.OutOfMemoryError: Java heap spacerntat org.parboiled.MatcherContext.runMatcher(MatcherContext.java:366)rntat org.parboiled.matchers.SequenceMatcher.match(SequenceMatcher.java:46)rntat org.parboiled.parserunners.BasicParseRunner.match(BasicParseRunner.java:77)rntat org.parboiled.MatcherContext.runMatcher(MatcherContext.java:351)rntat org.parboiled.matchers.FirstOfMatcher.match(FirstOfMatcher.java:41)rntat org.parboiled.parserunners.BasicParseRunner.match(BasicParseRunner.java:77)rntat org.parboiled.MatcherContext.runMatcher(MatcherContext.java:351)rntat org.parboiled.matchers.FirstOfMatcher.match(FirstOfMatcher.java:41)rntat org.parboiled.matchers.MemoMismatchesMatcher.match(MemoMismatchesMatcher.java:41)rntat org.parboiled.parserunners.BasicParseRunner.match(BasicParseRunner.java:77)rntat org.parboiled.MatcherContext.runMatcher(MatcherContext.java:351)rntat org.parboiled.matchers.FirstOfMatcher.match(FirstOfMatcher.java:41)rntat org.parboiled.parserunners.BasicParseRunner.match(BasicParseRunner.java:77)rntat org.parboiled.MatcherContext.runMatcher(MatcherContext.java:351)rntat org.parboiled.matchers.SequenceMatcher.match(SequenceMatcher.java:46)rntat org.parboiled.parserunners.BasicParseRunner.match(BasicParseRunner.java:77)rntat org.parboiled.MatcherContext.runMatcher(MatcherContext.java:351)rntat org.parboiled.matchers.SequenceMatcher.match(SequenceMatcher.java:46)rntat org.parboiled.parserunners.BasicParseRunner.match(BasicParseRunner.java:77)rntat org.parboiled.MatcherContext.runMatcher(MatcherContext.java:351)rntat org.parboiled.matchers.FirstOfMatcher.match(FirstOfMatcher.java:41)rntat org.parboiled.parserunners.BasicParseRunner.match(BasicParseRunner.java:77)rntat org.parboiled.MatcherContext.runMatcher(MatcherContext.java:351)rntat org.parboiled.matchers.SequenceMatcher.match(SequenceMatcher.java:46)rntat org.parboiled.parserunners.BasicParseRunner.match(BasicParseRunner.java:77)rntat org.parboiled.MatcherContext.runMatcher(MatcherContext.java:351)rntat org.parboiled.matchers.SequenceMatcher.match(SequenceMatcher.java:46)rntat org.parboiled.parserunners.BasicParseRunner.match(BasicParseRunner.java:77)rntat org.parboiled.MatcherContext.runMatcher(MatcherContext.java:351)rntat org.parboiled.matchers.SequenceMatcher.match(SequenceMatcher.java:46)rntat org.parboiled.parserunners.BasicParseRunner.match(BasicParseRunner.java:77)rntat org.parboiled.MatcherContext.runMatcher(MatcherContext.java:351)rntat org.parboiled.matchers.SequenceMatcher.match(SequenceMatcher.java:46)rntat org.parboiled.parserunners.BasicParseRunner.match(BasicParseRunner.java:77)rntat org.parboiled.MatcherContext.runMatcher(MatcherContext.java:351)rntat org.parboiled.matchers.SequenceMatcher.match(SequenceMatcher.java:46)rntat org.parboiled.parserunners.BasicParseRunner.match(BasicParseRunner.java:77)rntat org.parboiled.MatcherContext.runMatcher(MatcherContext.java:351)rntat org.parboiled.matchers.FirstOfMatcher.match(FirstOfMatcher.java:41)rntat org.parboiled.parserunners.BasicParseRunner.match(BasicParseRunner.java:77)rntat org.parboiled.MatcherContext.runMatcher(MatcherContext.java:351)rntat org.parboiled.matchers.SequenceMatcher.match(SequenceMatcher.java:46)rntat org.parboiled.parserunners.BasicParseRunner.match(BasicParseRunner.java:77)rntat org.parboiled.MatcherContext.runMatcher(MatcherContext.java:351)rntat org.parboiled.matchers.SequenceMatcher.match(SequenceMatcher.java:46)rntat org.parboiled.parserunners.BasicParseRunner.match(BasicParseRunner.java:77)rntat org.parboiled.MatcherContext.runMatcher(MatcherContext.java:351)rntat org.parboiled.matchers.SequenceMatcher.match(SequenceMatcher.java:46)rntat org.parboiled.parserunners.BasicParseRunner.match(BasicParseRunner.java:77)rntat org.parboiled.MatcherContext.runMatcher(MatcherContext.java:351)rntat org.parboiled.matchers.SequenceMatcher.match(SequenceMatcher.java:46)rntat org.parboiled.parserunners.BasicParseRunner.match(BasicParseRunner.java:77)rntat org.parboiled.MatcherContext.runMatcher(MatcherContext.java:351)rntat org.parboiled.matchers.SequenceMatcher.match(SequenceMatcher.java:46)rntat org.parboiled.parserunners.BasicParseRunner.match(BasicParseRunner.java:77)rntat org.parboiled.MatcherContext.runMatcher(MatcherContext.java:351)rntat org.parboiled.matchers.FirstOfMatcher.match(FirstOfMatcher.java:41)rntat org.parboiled.parserunners.BasicParseRunner.match(BasicParseRunner.java:77)rntat org.parboiled.MatcherContext.runMatcher(MatcherContext.java:351)rntat org.parboiled.matchers.SequenceMatcher.match(SequenceMatcher.java:46)rntat org.parboiled.parserunners.BasicParseRunner.match(BasicParseRunner.java:77)rntat org.parboiled.MatcherContext.runMatcher(MatcherContext.java:351)rntat org.parboiled.matchers.ZeroOrMoreMatcher.match(ZeroOrMoreMatcher.java:39)rntat org.parboiled.parserunners.BasicParseRunner.match(BasicParseRunner.java:77)rntat org.parboiled.MatcherContext.runMatcher(MatcherContext.java:351)rntat org.parboiled.matchers.SequenceMatcher.match(SequenceMatcher.java:46)rntat org.parboiled.parserunners.BasicParseRunner.match(BasicParseRunner.java:77)rntat org.parboiled.MatcherContext.runMatcher(MatcherContext.java:351)rntat org.parboiled.matchers.SequenceMatcher.match(SequenceMatcher.java:46)rntat org.parboiled.parserunners.BasicParseRunner.match(BasicParseRunner.java:77)rntat org.parboiled.MatcherContext.runMatcher(MatcherContext.java:351)rntat org.parboiled.matchers.FirstOfMatcher.match(FirstOfMatcher.java:41)rntat org.parboiled.parserunners.BasicParseRunner.match(BasicParseRunner.java:77)rntat org.parboiled.MatcherContext.runMatcher(MatcherContext.java:351)rntat org.parboiled.matchers.SequenceMatcher.match(SequenceMatcher.java:46)rntat org.parboiled.parserunners.BasicParseRunner.match(BasicParseRunner.java:77)rntat org.parboiled.MatcherContext.runMatcher(MatcherContext.java:351)rntat org.parboiled.matchers.SequenceMatcher.match(SequenceMatcher.java:46)rntat org.parboiled.parserunners.BasicParseRunner.match(BasicParseRunner.java:77)rntat org.parboiled.MatcherContext.runMatcher(MatcherContext.java:351)rntat org.parboiled.matchers.SequenceMatcher.match(SequenceMatcher.java:46)rntat org.parboiled.parserunners.BasicParseRunner.match(BasicParseRunner.java:77)rntat org.parboiled.MatcherContext.runMatcher(MatcherContext.java:351)rntat org.parboiled.matchers.FirstOfMatcher.match(FirstOfMatcher.java:41)rntat org.parboiled.parserunners.BasicParseRunner.match(BasicParseRunner.java:77)rntat org.parboiled.MatcherContext.runMatcher(MatcherContext.java:351)rntat org.parboiled.matchers.FirstOfMatcher.match(FirstOfMatcher.java:41)rntat org.parboiled.parserunners.BasicParseRunner.match(BasicParseRunner.java:77)rntat org.parboiled.MatcherContext.runMatcher(MatcherContext.java:351)rntat org.parboiled.matchers.SequenceMatcher.match(SequenceMatcher.java:46)rntat org.parboiled.parserunners.BasicParseRunner.match(BasicParseRunner.java:77)rntat org.parboiled.MatcherContext.runMatcher(MatcherContext.java:351)rntat org.parboiled.matchers.ZeroOrMoreMatcher.match(ZeroOrMoreMatcher.java:39)rntat org.parboiled.parserunners.BasicParseRunner.match(BasicParseRunner.java:77)rntat org.parboiled.MatcherContext.runMatcher(MatcherContext.java:351)rntat org.parboiled.matchers.SequenceMatcher.match(SequenceMatcher.java:46)rntat org.parboiled.parserunners.BasicParseRunner.match(BasicParseRunner.java:77)rntat org.parboiled.MatcherContext.runMatcher(MatcherContext.java:351)rntat org.parboiled.matchers.SequenceMatcher.match(SequenceMatcher.java:46)rntat org.parboiled.parserunners.BasicParseRunner.match(BasicParseRunner.java:77)rntat org.parboiled.MatcherContext.runMatcher(MatcherContext.java:351)rntat org.parboiled.matchers.SequenceMatcher.match(SequenceMatcher.java:46)rntat org.parboiled.parserunners.BasicParseRunner.match(BasicParseRunner.java:77)rntat org.parboiled.MatcherContext.runMatcher(MatcherContext.java:351)rntat org.parboiled.matchers.FirstOfMatcher.match(FirstOfMatcher.java:41)rntat org.parboiled.parserunners.BasicParseRunner.match(BasicParseRunner.java:77)rntat org.parboiled.MatcherContext.runMatcher(MatcherContext.java:351)rntat org.parboiled.matchers.FirstOfMatcher.match(FirstOfMatcher.java:41)rntat org.parboiled.parserunners.BasicParseRunner.match(BasicParseRunner.java:77)rntat org.parboiled.MatcherContext.runMatcher(MatcherContext.java:351)rntat org.parboiled.matchers.SequenceMatcher.match(SequenceMatcher.java:46)rntat org.parboiled.parserunners.BasicParseRunner.match(BasicParseRunner.java:77)rntat org.parboiled.MatcherContext.runMatcher(MatcherContext.java:351)rntat org.parboiled.matchers.SequenceMatcher.match(SequenceMatcher.java:46)rntat org.parboiled.parserunners.BasicParseRunner.match(BasicParseRunner.java:77)rntat org.parboiled.MatcherContext.runMatcher(MatcherContext.java:351)rntat org.parboiled.parserunners.BasicParseRunner.run(BasicParseRunner.java:72)rntat org.parboiled.parserunners.ReportingParseRunner.runBasicMatch(ReportingParseRunner.java:86)rntat org.parboiled.parserunners.ReportingParseRunner.run(ReportingParseRunner.java:66)rntat org.parboiled.scala.parserunners.ReportingParseRunner.run(ReportingParseRunner.scala:34)rntat org.neo4j.cypher.internal.compiler.v2_2.parser.Base$class.parseOrThrow(Base.scala:117)rntat org.neo4j.cypher.internal.compiler.v2_2.parser.CypherParser.parseOrThrow(CypherParser.scala:27)rntat org.neo4j.cypher.internal.compiler.v2_2.parser.CypherParser.parse(CypherParser.scala:34)rntat org.neo4j.cypher.internal.compiler.v2_2.CypherCompiler.prepareQuery(CypherCompiler.scala:126)rntat org.neo4j.cypher.internal.compatibility.CompatibilityFor2_2$$anon$2$$anonfun$3.apply(CompatibilityFor2_2.scala:154)rntat org.neo4j.cypher.internal.compatibility.CompatibilityFor2_2$$anon$2$$anonfun$3.apply(CompatibilityFor2_2.scala:154)rntat scala.util.Try$.apply(Try.scala:161)rntat org.neo4j.cypher.internal.compatibility.CompatibilityFor2_2$$anon$2.<init>(CompatibilityFor2_2.scala:154)rntat org.neo4j.cypher.internal.compatibility.CompatibilityFor2_2$class.produceParsedQuery(CompatibilityFor2_2.scala:153)rntat org.neo4j.cypher.internal.compatibility.CompatibilityFor2_2Cost.produceParsedQuery(CompatibilityFor2_2.scala:326)rntat org.neo4j.cypher.internal.CypherCompiler.parseQuery(CypherCompiler.scala:81)rntat org.neo4j.cypher.ExecutionEngine$$anonfun$org$neo4j$cypher$ExecutionEngine$$parsePreParsedQuery$1.apply(ExecutionEngine.scala:116)rntat org.neo4j.cypher.ExecutionEngine$$anonfun$org$neo4j$cypher$ExecutionEngine$$parsePreParsedQuery$1.apply(ExecutionEngine.scala:116)rntat org.neo4j.cypher.internal.LRUCache.getOrElseUpdate(LRUCache.scala:34)rntat org.neo4j.cypher.ExecutionEngine.org$neo4j$cypher$ExecutionEngine$$parsePreParsedQuery(ExecutionEngine.scala:116)rntat org.neo4j.cypher.ExecutionEngine.parseQuery(ExecutionEngine.scala:112)rntat org.neo4j.cypher.internal.ServerExecutionEngine.isPeriodicCommit(ServerExecutionEngine.scala:34)rntat org.neo4j.cypher.javacompat.internal.ServerExecutionEngine.isPeriodicCommit(ServerExecutionEngine.java:72)rntat org.neo4j.server.rest.transactional.TransactionHandle.selectExecutionStrategy(TransactionHandle.java:189)rntat org.neo4j.server.rest.transactional.TransactionHandle.commit(TransactionHandle.java:133)rntat org.neo4j.server.rest.web.TransactionalService$2.write(TransactionalService.java:211)rntat com.sun.jersey.core.impl.provider.entity.StreamingOutputProvider.writeTo(StreamingOutputProvider.java:71)rntat com.sun.jersey.core.impl.provider.entity.StreamingOutputProvider.writeTo(StreamingOutputProvider.java:57)rntat com.sun.jersey.spi.container.ContainerResponse.write(ContainerResponse.java:302)rntat com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl.java:1510)rntat com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:1419)rntat com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:1409)rntat com.sun.jersey.spi.container.servlet.WebComponent.service(WebComponent.java:409)rntat com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:540)rntat com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:715)rntat javax.servlet.http.HttpServlet.service(HttpServlet.java:790)rntat org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:800)rntat org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1669)rntat org.neo4j.server.rest.dbms.AuthorizationFilter.doFilter(AuthorizationFilter.java:120)rntat org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1652)rntat org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:585)rntat org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:221)rntat org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1125)rntat org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:515)rntat org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:185)rntat org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1059)rntat org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141)rntat org.eclipse.jetty.server.handler.HandlerList.handle(HandlerList.java:52)rntat org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:97)rntat org.eclipse.jetty.server.Server.handle(Server.java:497)rntat org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:310)rntat org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:248)rntat org.eclipse.jetty.io.AbstractConnection$2.run(AbstractConnection.java:540)rntat org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:620)rntat org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:540)rntat java.lang.Thread.run(Thread.java:745)rnCaused by: java.lang.OutOfMemoryError: Java heap spacerntat java.util.HashMap.resize(HashMap.java:580)rntat java.util.HashMap.addEntry(HashMap.java:879)rntat java.util.HashMap.put(HashMap.java:505)rntat java.util.HashSet.add(HashSet.java:217)rntat org.parboiled.MatcherContext.memoizeMismatch(MatcherContext.java:312)rntat org.parboiled.matchers.MemoMismatchesMatcher.match(MemoMismatchesMatcher.java:44)rntat org.parboiled.parserunners.BasicParseRunner.match(BasicParseRunner.java:77)rntat org.parboiled.MatcherContext.runMatcher(MatcherContext.java:351)rntat org.parboiled.matchers.SequenceMatcher.match(SequenceMatcher.java:46)rntat org.parboiled.parserunners.BasicParseRunner.match(BasicParseRunner.java:77)rntat org.parboiled.MatcherContext.runMatcher(MatcherContext.java:351)rntat org.parboiled.matchers.FirstOfMatcher.match(FirstOfMatcher.java:41)rntat org.parboiled.parserunners.BasicParseRunner.match(BasicParseRunner.java:77)rntat org.parboiled.MatcherContext.runMatcher(MatcherContext.java:351)rntat org.parboiled.matchers.FirstOfMatcher.match(FirstOfMatcher.java:41)rntat org.parboiled.matchers.MemoMismatchesMatcher.match(MemoMismatchesMatcher.java:41)rntat org.parboiled.parserunners.BasicParseRunner.match(BasicParseRunner.java:77)rntat org.parboiled.MatcherContext.runMatcher(MatcherContext.java:351)rntat org.parboiled.matchers.FirstOfMatcher.match(FirstOfMatcher.java:41)rntat org.parboiled.parserunners.BasicParseRunner.match(BasicParseRunner.java:77)rntat org.parboiled.MatcherContext.runMatcher(MatcherContext.java:351)rntat org.parboiled.matchers.SequenceMatcher.match(SequenceMatcher.java:46)rntat org.parboiled.parserunners.BasicParseRunner.match(BasicParseRunner.java:77)rntat org.parboiled.MatcherContext.runMatcher(MatcherContext.java:351)rntat org.parboiled.matchers.SequenceMatcher.match(SequenceMatcher.java:46)rntat org.parboiled.parserunners.BasicParseRunner.match(BasicParseRunner.java:77)rntat org.parboiled.MatcherContext.runMatcher(MatcherContext.java:351)rntat org.parboiled.matchers.FirstOfMatcher.match(FirstOfMatcher.java:41)rntat org.parboiled.parserunners.BasicParseRunner.match(BasicParseRunner.java:77)rntat org.parboiled.MatcherContext.runMatcher(MatcherContext.java:351)rntat org.parboiled.matchers.SequenceMatcher.match(SequenceMatcher.java:46)rntat org.parboiled.parserunners.BasicParseRunner.match(BasicParseRunner.java:77)rn"}]}
at org.neo4j.ogm.session.response.JsonResponse.parseErrors(JsonResponse.java:132)
at org.neo4j.ogm.session.response.JsonResponse.parseColumns(JsonResponse.java:109)
at org.neo4j.ogm.session.response.JsonResponse.initialiseScan(JsonResponse.java:53)
at org.neo4j.ogm.session.response.RowModelResponse.initialiseScan(RowModelResponse.java:60)
at org.neo4j.ogm.session.response.RowModelResponse.<init>(RowModelResponse.java:34)
at org.neo4j.ogm.session.response.SessionResponseHandler.updateObjects(SessionResponseHandler.java:77)
at org.neo4j.ogm.session.delegates.SaveDelegate.save(SaveDelegate.java:67)
at org.neo4j.ogm.session.delegates.SaveDelegate.save(SaveDelegate.java:41)
at org.neo4j.ogm.session.Neo4jSession.save(Neo4jSession.java:370)
at org.springframework.data.neo4j.repository.GraphRepositoryImpl.save(GraphRepositoryImpl.java:46)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at org.springframework.data.repository.core.support.RepositoryFactorySupport$QueryExecutorMethodInterceptor.executeMethodOn(RepositoryFactorySupport.java:452)
at org.springframework.data.repository.core.support.RepositoryFactorySupport$QueryExecutorMethodInterceptor.doInvoke(RepositoryFactorySupport.java:437)
at org.springframework.data.repository.core.support.RepositoryFactorySupport$QueryExecutorMethodInterceptor.invoke(RepositoryFactorySupport.java:409)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
at org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:99)
at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:281)
at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:96)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:136)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:207)
at com.sun.proxy.$Proxy42.save(Unknown Source)
at de.rwthaachen.service.core.EpisodeServiceImpl.loadEpisodeVersionDataTest(EpisodeServiceImpl.java:141148)
at sampleapp.EpisodeLauncher.main(EpisodeLauncher.java:70)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:140)
Caused by: org.apache.http.client.HttpResponseException: Server Error
at org.neo4j.ogm.session.request.DefaultRequest.execute(DefaultRequest.java:77)
... 27 more
SDN 4不是真正打算用来批量导入您的对象到Neo4j。它是一个用于通用Java应用程序的对象图映射框架,而不是一个批量导入器(它会带来一系列特定的问题)。支持SDN预期用例的一些设计决策与您试图设计专用ETL时所做的相反。我们还受到Neo4j的HTTP事务性端点性能的限制,虽然从绝对意义上说它并不慢,但不能指望与Batch Inserter竞争。
我们将在未来对性能进行一些改进,当Neo4j的新二进制协议发布(2.3)时,我们将把它作为我们的传输协议。我们希望这能将数据库之间的传输速度提高至少一个数量级。但是,请不要期望这些改变会从根本上改变SDN 4的行为特征。虽然未来的版本可能能够比现在更快地加载几千个节点,但它仍然不会是一个ETL工具,我也不希望它被这样使用。如果您受内存限制,那么定期保存将有所帮助,因为SDN 4会保留更改的内容。您看到的多个提交是一个正在运行的事务的一部分。
在LinkedHashSet问题上,像这样使用接口Set
Set<Foo> x = new LinkedHashSet<();
...
public Set<Foo> getX() {}
。
经过几个小时的反复试验,我终于发现我需要限制我的保存深度。
之前,我没有指定深度级别,并且保存的对象越来越大,因为它的子对象的插入也同时进行。所以,在给每个保存方法的深度为1之后,我终于摆脱了StackOverFlow错误。而且,由于没有定期保存(我将所有对象放在ArrayList中并在最后保存它们),我在导入大约1000个节点(带有关系)时获得了1分钟的性能提升。
尽管如此,性能仍然不令人满意,因为我可以在不到1分钟的时间内导入超过60,000个数据与我以前的MongoDB实现。我不知道这是不是因为SDN4,如果它可以更快与嵌入式API。我很好奇是否有人做过SDN4和嵌入式API的基准测试。