1
votes

Chargement d'un gros fichier de chiffrement dans Neo4J

J'ai des difficultés à charger un fichier Cypher dans Neo4J sous Windows 10. Le fichier en question est un fichier .cql de 175 Mo rempli de plus d'un million de lignes de nœuds et d'arêtes (séparées par des points-virgules) en langage Cypher - CRÉER [nœud], ce genre de chose. Pour les éléments plus petits, j'utilise une commande APOC dans le navigateur Web:

neo4j-shell -file <file path> -path localhost

mais c'est trop lent pour un fichier de requête d'un million +. J'ai créé des index pour les nœuds et je l'exécute actuellement via une commande:

call apoc.cypher.runFile('file:///<file path>')

mais c'est encore lent. Je me demandais, y a-t-il un moyen d'accélérer l'admission?

De plus, notez que j'utilise une version récente d'ONGDB, plutôt que Neo4J directement; Je ne pense pas que cela fera une différence substantielle.


0 commentaires

3 Réponses :


3
votes

Si le but de votre très gros fichier CQL est simplement d'ingérer des données, le faire uniquement dans Cypher sera très lent (et peut même provoquer une erreur de mémoire insuffisante).

Si vous effectuez une acquisition dans une nouvelle base de données neo4j, vous devriez envisager de refactoriser les données et d'utiliser le commande d'importation de l'outil neo4j-admin pour ingérer efficacement les données.

Si vous effectuez une acquisition dans une base de données existante, vous devriez envisager de refactoriser les données et la logique hors du fichier CQL et d'utiliser LOAD CSV .


0 commentaires

2
votes

J'ai fini par l'ingérer en utilisant cypher-shell. C'est encore lent, mais au moins ça se termine. Pour l'utiliser, il faut d'abord ouvrir une console Neo4J puis, dans une deuxième ligne de commande, utiliser:

type <filepath>\data.cql | bin\cypher-shell.bat -a localhost -u <user> -p <password> --fail-at-end

Cela fonctionne pour Windows 10, même si cela prend un certain temps.

p>


0 commentaires

1
votes

Lors de l'exécution d'une requête en dehors d'une transaction, neo4j démarre automatiquement et valider une transaction distincte pour chaque requête . Vous pouvez accélérer les choses en démarrant une transaction au début, et en validant et en démarrant de nouvelles transactions toutes les quelques milliers de requêtes (l'utilisation de la mémoire augmentera avec la taille de la transaction, c'est donc le facteur limitant de la taille des transactions).

Exemple queries.cypher (avec des transactions de taille 3):

:begin
CREATE(n:PERSON { name: "Homer Simpson" })  
CREATE(n:PERSON { name: "Marge Simpson" })
CREATE(n:PERSON { name: "Abe Simpson" })    
:commit
:begin
CREATE(n:PERSON { name: "Bart Simpson" })
CREATE(n:PERSON { name: "Lisa Simpson" })
CREATE(n:PERSON { name: "Maggie Simpson" })
:commit

Et puis exécutez cypher-shell comme d'habitude. p>


0 commentaires