2016-06-17 3 views
0

В настоящее время вы пытаетесь вставить 1,9 М записи с 8 параллельными потоками в локальную базу данных neo4j, в то время как вставка нескольких сотен прошла нормально, тогда я получаю это исключение, хотя процесс все еще работает, но после по 1,9 М записи, только 600 тыс. фактически сохраняется, поэтому мне было интересно, что это за причины?neo4j Ошибка подключения к удаленному графику через HTTP

Я использую SDN4.1.1.RELEASE и Neo4j 3.0

org.neo4j.ogm.exception.ConnectionException: Error connecting to remote graph over HTTP 
    at org.neo4j.ogm.drivers.http.request.HttpRequest.execute(HttpRequest.java:261) 
    at org.neo4j.ogm.drivers.http.request.HttpRequest.executeRequest(HttpRequest.java:204) 
    at org.neo4j.ogm.drivers.http.request.HttpRequest.execute(HttpRequest.java:123) 
    at org.neo4j.ogm.session.request.RequestExecutor.executeSave(RequestExecutor.java:73) 
    at org.neo4j.ogm.session.delegates.SaveDelegate.save(SaveDelegate.java:70) 
    at org.neo4j.ogm.session.delegates.SaveDelegate.save(SaveDelegate.java:43) 
    at org.neo4j.ogm.session.Neo4jSession.save(Neo4jSession.java:364) 
    at org.springframework.data.neo4j.template.Neo4jTemplate.save(Neo4jTemplate.java:203) 
    at sun.reflect.GeneratedMethodAccessor64.invoke(Unknown Source) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:498) 
    at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:302) 
    at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:190) 
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:157) 
    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:208) 
    at com.sun.proxy.$Proxy62.save(Unknown Source) 
    at org.springframework.data.neo4j.repository.GraphRepositoryImpl.save(GraphRepositoryImpl.java:48) 
    at sun.reflect.GeneratedMethodAccessor63.invoke(Unknown Source) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:498) 
    at org.springframework.data.repository.core.support.RepositoryFactorySupport$QueryExecutorMethodInterceptor.executeMethodOn(RepositoryFactorySupport.java:503) 
    at org.springframework.data.repository.core.support.RepositoryFactorySupport$QueryExecutorMethodInterceptor.doInvoke(RepositoryFactorySupport.java:488) 
    at org.springframework.data.repository.core.support.RepositoryFactorySupport$QueryExecutorMethodInterceptor.invoke(RepositoryFactorySupport.java:460) 
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179) 
    at org.springframework.data.projection.DefaultMethodInvokingMethodInterceptor.invoke(DefaultMethodInvokingMethodInterceptor.java:61) 
    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.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:92) 
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179) 
    at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:208) 
    at com.sun.proxy.$Proxy76.save(Unknown Source) 
    at movies.spring.data.neo4j.controllers.BenchmarkInsertController.saveFacebook(BenchmarkInsertController.java:475) 
    at movies.spring.data.neo4j.controllers.BenchmarkInsertController$Neo4jCountDownCallable.call(BenchmarkInsertController.java:549) 
    at movies.spring.data.neo4j.controllers.BenchmarkInsertController$Neo4jCountDownCallable.call(BenchmarkInsertController.java:1) 
    at java.util.concurrent.FutureTask.run(FutureTask.java:266) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
    at java.lang.Thread.run(Thread.java:745) 
Caused by: org.apache.http.client.HttpResponseException: Not Found 
    at org.neo4j.ogm.drivers.http.request.HttpRequest.execute(HttpRequest.java:238) 
    ... 44 common frames omitted 

и в строке 475:

FBUser neoFacebook = new FBUser(); 
     neoFacebook.setEmail(usr.getEmail()); 
     neoFacebook.setId(usr.getFbId()); 
     neoFacebook.setFbToken(usr.getFbtoken()); 
     AuthBy auth = new AuthBy(); 
     auth.setAuth(neoFacebook); 
     auth.setUser(neoUser); 
     auth.setLastSeen(System.currentTimeMillis());  
     authRepo.save(auth);   
+0

Сколько ядер имеет ваша машина? У вас достаточно для одновременного запуска 8 клиентских и 8 потоков сервера без блокировки? –

+0

В настоящее время его работа на 8 ядрах с 8 ГБ ОЗУ должна быть достаточной. – kenlz

+0

@MichaelHunger после прочтения этого сообщения http://stackoverflow.com/questions/9568203/save-method-of-crudrepository-is-very-slow, я думаю, его безопасно заключить, что он пытается вставить больше данных, в то время как другой процесс вставки Не завершено. что приводит к блокировке соединения с neo4j? – kenlz

ответ

0

Похоже, ваши транзакции таймаут. Каков размер транзакции? Рекомендуемый размер составляет 1k-10k в зависимости от того, сколько у вас свойств. При этом необходимо помочь вам сэкономить средства в транзакциях с разумным размером транзакций с каждой транзакцией, используя новый сеанс OGM. Кроме того, если ваши объекты очень глубокие, вам может понадобиться еще больше уменьшить размер вашей транзакции или разделить свои сохраненные данные, чтобы сначала сохранить связанные элементы, а затем работать с родителем.

+0

В настоящее время я вставляю 10k за один раз с максимальным количеством 10 свойств в 1 ярлыке, а остальные ярлыки всего 3-5 макс. Я все еще задаюсь вопросом, в чем разница в использовании repo.save и session.save? Я попробую сократить размер партии до 3k и посмотреть, удастся ли ей это сделать. – kenlz

+0

Каждый FBUser связан с x другими объектами, поэтому каждая сохранность FBUser фактически сохранит x сущностей - да, может потребоваться обрезать количество сохраненных объектов. Нет никакой разницы между repo.save и session.save. Репозитории представляют собой конструкцию Spring и обертки вокруг сеанса OGM сохраняются. – Luanne

+0

BTW, я бы также рекомендовал вам перейти на SDN 4.1.2 (выпущен вчера), так как он содержит улучшения производительности. – Luanne