2015-10-27 2 views
2

Je suis nouveau sur NEO4J mais je travaille avec MySQL depuis de nombreuses années. Maintenant, j'ai créé une base de données avec 700 000 utilisateurs, 800 000 livres de recettes et 1,6 million de recettes enregistrées dans NEO4J.NEO4J Match lent contre MySQL

La structure des nœuds est la suivante: (Utilisateur) - [: CREATED] - (: Cookbook) - [: SAVED] - (: Recipe). Tous les utilisateurs et les recettes sont uniques, mais un utilisateur peut avoir des livres de cuisine multipistes et chaque livre de cuisine peut avoir des recettes multipel. J'utilise un EC2 m3.x2large, donc c'est assez rapide. Mais la performance est très mauvaise. Cette requête:

MATCH (r: Recette {id_recip .: 2987431}) return r;

Prendre entre 300-500 ms et mysql peut l'exécuter en environ 2 ms.

Est-ce normal ou ai-je configuré le serveur de manière incorrecte?

(je un index sur: Recette (recette_id))

+0

votre index est-il une contrainte unique? comme dans 'CREATE CONSTRAINT ON (livre: livre) ASSERT book.isbn EST UNIQUE'? – Joshua

+0

Oui c'est unique. –

+0

Non ce n'est pas normal car ici vous n'utilisez que l'index. Par exemple sur mon ordinateur ce genre de requête avec la même volumétrie prend 10ms. Pour tester la requête, utilisez-vous le navigateur ou neo4j-shell? – logisima

Répondre

1

a-t-index encore venu en ligne? Si vous exécutez :schema dans la console, il doit répertorier toutes les contraintes/index et s'ils ont déjà été entièrement analysés et sont en ligne et disponibles pour utilisation.

+0

Oui, ils sont tous en ligne. –

+0

C'est vraiment étrange ... Avez-vous fait la requête depuis que vous avez vérifié? Il se pourrait qu'il soit entré en ligne depuis votre dernière requête (je suis peut-être pince, mais c'est bon à vérifier). Il ne devrait certainement pas prendre autant de temps avec un index –

+0

Essayez aussi d'exécuter 'PROFILE MATCH (r: Recette {recipe_id: 2987431}) RETURN r' pour voir ce qu'il essaie de faire (la console web devrait vous donner une belle sortie ici) –