performance - tutorial - Neo4j Match/Récupération Requête prenant trop de temps 25 sec




neo4j tutorial français (2)

Les index dans Neo4j sont utilisés pour la recherche de nœuds et non pour le tri. Si vous souhaitez paginer une liste triée de noeuds 4M, cela prendra du temps.

La façon de résoudre cela est par une bonne modélisation des données. Lors de l'ajout d'un nouvel User envisagez d'avoir une relation :PREV_USER avec celle créée avant celle en cours, les utilisateurs de votre système formeront une liste chaînée qui maintiendra les utilisateurs en temps opportun.

Cette liste chaînée est rapide et facile à parcourir.

Mon système est 8 core et 16 Go de RAM. Mais toujours traversant: Les nœuds utilisateur prennent trop de temps autour de 25 secondes.

Je suis défini 2 propriétés comme dans neo4j-wrapper.conf:

wrapper.java.initmemory = 6144
wrapper.java.maxmemory = 12288
  • : Utilisateur retournant les champs 15-20;
  • 2-3 index (created_at have index)
  • tri effectué sur created_at DESC
  • total de 5 millions de nœuds ayant une taille de base de données de presque 8 Go
  • : Les nœuds utilisateur sont 4 millions.
  • La pagination est terminée. Par page 10 les enregistrements sont récupérés.
  • Sans ORDER Par cela donne des résultats en 0.3 secondes.
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

Comment puis-je réduire le temps de réponse du serveur Neo4j? Quels neo4j.properties peuvent être définis pour réduire le temps d'exécution?


J'ai eu de la chance en réglant à la fois la mémoire init et la mémoire max à la même valeur (donc le jvm n'a pas besoin de faire de redimensionnement) et en réglant la garbage collection. Donnez à ces valeurs une chance dans votre fichier conf:

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