performance configuration neo4j cypher

performance - cypher reference manual



Neo4j Match/Retrieving Query tarda demasiado tiempo 25 sec (2)

Mi sistema es de 8 núcleos y 16 GB de RAM. Pero aún atravesando: los nodos de usuario toman demasiado tiempo alrededor de 25 segundos.

Tengo 2 propiedades como en neo4j-wrapper.conf:

wrapper.java.initmemory = 6144 wrapper.java.maxmemory = 12288

  • : Usuario que devuelve los campos 15-20;
  • 2-3 índices (created_at have index)
  • clasificación realizada en created_at DESC
  • total de 5 millones de nodos que tienen un tamaño de base de datos de casi 8 GB
  • : Los nodos de usuario son 4 millones.
  • La paginación está hecha. Por la página 10 se obtienen los registros.
  • Sin ORDEN Por da resultados en 0.3 segundos.

MATCH (u:User) RETURN id(u) as id, u.username, u.email, (..15 More fields..), u.created_at as created_at ORDER BY created_at desc SKIP 0 LIMIT 10

¿Cómo puedo reducir el tiempo de respuesta del servidor Neo4j? ¿Qué neo4j.properties se puede configurar para reducir el tiempo de ejecución?


Los índices en Neo4j se usan para la búsqueda de nodos y no para la clasificación. Si desea paginar una lista ordenada de nodos de 4M, llevará algo de tiempo.

La forma de resolverlo es mediante el modelado de datos adecuado. Al agregar un nuevo User considere tener una relación :PREV_USER con la que se está creando antes de la actual, los usuarios de su sistema formarán una lista vinculada que mantendrá a los usuarios en el orden oportuno.

Esta lista enlazada es rápida y fácil de atravesar.


Tuve algo de suerte al configurar la memoria de inicio y la memoria máxima en el mismo valor (por lo que el jvm no tiene que hacer ningún cambio de tamaño) y también configurar la recolección de elementos no utilizados. dale una oportunidad a estos valores en tu archivo conf:

-Xmx4g #max -Xms4g #init -XX:+UseConcMarkSweepG #garbage collector