serviceunavailable pagina oficial failure downloads neo4j spring-data-neo4j

pagina - Rendimiento de REST Neo4J



neo4j serviceunavailable (2)

Creé una aplicación Java que usa Spring y Neo4J en modo REST. El Neo4j está instalado en la máquina Linux Red Hat y no cambié nada en su configuración predeterminada.

Las consultas / inserciones se ejecutan MUY lentas cuando uso mis Servicios Java para consultar datos, pero las mismas consultas se ejecutan rápidamente cuando realizo las mismas operaciones a través del administrador web remoto.

por ejemplo, tengo una consulta que se ejecuta en unos pocos milisegundos cuando la ejecuto desde el administrador web, pero demora más de 30 segundos (!!) en regresar cuando la llamo desde mi servicio Rest. Actualmente, no tengo muchos datos en mi base de datos (todavía): algunos miles de nodos.

No tengo ni idea de dónde podría estar el problema, supongo que si funciona directamente rápido, también debería ser rápido cuando se ejecuta desde mi servicio, ¿no es así?

Esta es una consulta de ejemplo (la sanqué para una lectura fácil):

@Query("start movie=node({0}) match (topic)<-[r:relatesToTopic]-(movie) where r.orderInTop5? is not null and r.orderInTop5?>0 return topic order by r.orderInTop5 asc;") public Iterable<Topic> findTopTopics(Content content);

Directamente en el administrador web, se ve así:

start movie=node(50537) match (topic)<-[r:relatesToTopic]-(movie) where r.orderInTop5? is not null and r.orderInTop5?>0 return topic.name , topic.category, r.orderInTop5 order by r.orderInTop5 asc;

Si es importante, la relación relationToTopic se declara en una clase primaria abstracta y no en la clase Movie.

Creo que tengo un problema general porque es lento para cualquier consulta o creación. Los servicios que no usan Neo4J funcionan muy rápido.

¿Puede ser la configuración REST? ¿algo más?

Agradezco cualquier idea sobre dónde buscar o qué probar.

Gracias Carmel


Descubrí que el problema no está en el neo4j en sí, sino en la iteración de los resultados.

Mi repositorio extiende org.springframework.data.neo4j.repository.GraphRepository. Uso el método ''findAll ()'' que devuelve Iterator, tal como está.

¡La próxima () operación tarda de 1 a 4 segundos!

Leí en otro foro que debería usar RestCypherQueryEngine para consultar, pero ¿cómo puedo hacerlo al usar Spring-neo4j?

Esta es mi definición de Spring:

<neo4j:config graphDatabaseService="graphDatabaseService" /> <bean id="graphDatabaseService" class="org.springframework.data.neo4j.rest.SpringRestGraphDatabase"> <constructor-arg value="${db.neo4j.restAddress}" /> </bean> <neo4j:repositories base-package="com.vo.insight.processed" />

Muchas gracias Carmelo


Carmel,

SDN sobre REST aún no proporciona acceso de alto rendimiento.

Puede tratar de utilizar métodos de repositorio anotados con cifrado y solo devolver datos simples, por lo tanto, no devuelva "tema" sino las propiedades de tema que necesita y luego utilice un mapeo @MapResult o @QueryResult para acceder a sus valores devueltos.

Ver: http://docs.spring.io/spring-data/data-neo4j/docs/2.3.x/reference/htmlsingle/#d0e964