2012-12-03 2 views
1

J'ai un ensemble de données de 60000 éléments dans mysql et j'essaie de l'insérer dans neo4j. L'insertion a lieu mais cela prend beaucoup de temps (environ 10-15 par 3 sec). Y a-t-il un moyen de l'accélérer? aussi est-il possible de donner quelque chose comme une clé unique dans neo4j afin que les index de duplication ne soient pas indexés? Je suis nouveau à neo4j. J'utilise neo4j 1.8 avec le pilote PHP Everyman.comment accélérer l'insertion de mysql dans neo4j?

+0

Pouvez-vous être plus précis au sujet de cette opération? Pour autant que je sache, vous ne pouvez pas créer des fichiers MySQL Neo4j 'parse-in'; cela signifie que vous devez d'abord extraire les données de MySQL et les stocker dans Neo4j, ensuite: la performance dépend de ces deux étapes. Utilisez-vous BatchInserter? – raina77ow

+0

Les données ont été extraites de mysql en utilisant une requête de sélection et je n'utilise pas un batchinserter pour cela. Comme je suis nouveau à cela, je suis l'exemple de jadell (https://github.com/jadell/neo4jphp/blob/master/examples/bacon.php). Y a-t-il une meilleure façon de le faire? – hablema

+0

le code php que vous avez référencé fait une seule opération http pour chaque création de noeud et paramétrage de propriété, ceci doit être au moins reposé, mieux fait en chiffrement (également en batch), ou en utilisant l'un des outils importateur –

Répondre

1

Il y a une belle présentation de Max De Marzi, à propos d'ETL dans Neo4j.

Voir: http://www.slideshare.net/maxdemarzi/etl-into-neo4j

Cela dépend de la langue que vous voulez utiliser, beaucoup d'options de java embarqué via JRuby et à distance via Ruby, PHP, python.

Vous souhaitez regrouper vos demandes dans des transactions de taille appropriée (par exemple, 10 000 articles par transaction).

Il est possible d'importer des fichiers CSV directement dans un fichier de base de données en utilisant le batch-importer ou via le BATCH REST API du serveur Neo4j.

+0

vous me donnez un exemple où les données sont transférées de mysql à neo4j en PHP? Cela m'aiderait vraiment. – hablema

+0

Neo4j est toujours lent pendant l'insertion. Le maximum que je pouvais atteindre était de 100 nœuds par seconde avec l'insertion par lots. Y at-il un moyen de l'insérer, j'ai environ 2M nœuds à faire à partir de ma base de données MySQL et ensuite les relier. – hablema

+0

cela ne semble pas être directement lié à neo4j. Je n'ai jamais de temps d'insertion aussi lent, et j'ai fait beaucoup d'importation de psql-> neo4j. Je suppose que vous interrogez les données depuis le mysql sur la route - essayez d'abord interroger les données et les insérer dans un format graphML ou geoff xml. puis utilisez simplement une fonction in-build, comme gremlins g.loadGraphML ('mysqlexport.xml') - http://docs.neo4j.org/chunked/snapshot/gremlin-plugin.html#rest-api-load-a -sample-graph – ulkas

1

Comme mentionné ci-dessus, l'option préférée est l'importateur par lots.

Si vous avez besoin de passer par le client PHP, ici je l'ai mis en place un exemple qui utilise le api batch REST: http://phpfiddle.org/main/code/mu3-sgk

Vous pouvez tester les lignes/lot ce qui fonctionne le mieux pour votre système. Pour mon portable c'est 750, pour mon serveur de test c'est 1250. Le code json_decode qui arrive est lourd sur le CPU.