2013-02-06 10 views
2

Je récupère des données d'un index dans ma base de données neo4j, et j'ai quelques problèmes avec le temps d'exécution. J'essaie une requête où je compte simplement les valeurs résultantes. Dans ma base de données de production, je fais des calculs plus complexes. Quoi qu'il en soit, ma requête ressemble à quelque chose comme ça,neo4j lent lucene index requête

START person = node:user_index('muncipalityCode:(1278 OR 1285 OR 1283 OR 1293 OR 1284 OR 1261 OR 1282 OR 1262 OR 1281 OR 1280 OR 1273) ') 
return count(person) 

Le comte retourne 278418 en 20 secondes environ (2,5-3 secondes seconde fois, lorsque le cache est chaud). Bien sûr, je retourne un assez grand ensemble de données. Cependant, ce n'est pas immense.

Y at-il quelque part où je peux réduire ce goulot d'étranglement ou certains paramètres de configuration que je devrais examiner? J'ai essayé d'échauffer le cache au démarrage, mais je ne peux pas adapter toutes les données en mémoire vive sur mon serveur de production, de sorte qu'il se retourne contre (Mon serveur a 16 Go de RAM).

Ma base de données possède les attributs suivants. 10 329 245 noeuds 97 923 564 propriétés 50 697 532 relations

+0

Pouvez-vous traduire ce code par l'API Java et le chronométrer pour voir s'il s'agit de l'index ou du nombre? – Nicholas

+0

Je pense que la condition OR peut être un problème (du moins c'est en sql où parfois l'index est omis quand il y a beaucoup de conditions OU) .si vous divisez la requête en phases START distinctes comme ça, cela aide-t-il? 'START person1 = noeud: user_index ('muncipalityCode: 1278), person2 = noeud: user_index (' muncipalityCode: 1285), person3 = .... RETURN nombre (person1) + count (person2) + count (person3) ... ' – ulkas

+0

Combien de personnes sont renvoyées? Et pouvez-vous modéliser les codes postaux en tant que nœuds indexés et connecter les gens à ceux-ci? Alors la requête lucene doit seulement retourner 15 entrées. Lucene conserve également ses résultats, ce qui peut également être lié à l'utilisation de la mémoire et à GC. –

Répondre

2

J'utiliser Luke pour vérifier si le problème est dans l'index ou ailleurs dans le code. Si la requête Luke correspondante est rapide, alors le problème se situe probablement ailleurs.