Comment supprimer / créer des bases de données dans Neo4j?

104

Est-il possible de créer / supprimer différentes bases de données dans la base de données graphique Neo4j comme dans MySQL? Ou, au moins, comment supprimer tous les nœuds et relations d'un graphe existant pour obtenir une configuration propre pour les tests, par exemple, en utilisant des commandes shell similaires à rmrelou rm?

rmv
la source

Réponses:

98

Vous pouvez simplement supprimer tout le répertoire du graphe avec rm -rf, car Neo4j ne stocke rien en dehors de cela:

rm -rf data/*

De plus, vous pouvez bien sûr parcourir tous les nœuds et supprimer leurs relations et les nœuds eux-mêmes, mais cela pourrait être trop coûteux juste pour les tests ...

Peter Neubauer
la source
7
Et si vous itérez sur tous les nœuds, il peut être judicieux de laisser le nœud de référence rester.
nawroth
6
Où se trouve le répertoire des graphes?
Pramod
3
@Pramod est dans le répertoire data du répertoire neo4j. Vous ne pouvez pas le manquer
devshorts
7
Sur MacOSX avec homebrew: /usr/local/Cellar/neo4j/community-1.9.2-unix/libexec/data
Ashley
5
C'est peut-être une bonne idée d'arrêter votre serveur neo4j avant d'exécuter cette commande.
John Bachir
98

commande encore plus simple pour supprimer tous les nœuds et relations:

MATCH (n)
OPTIONAL MATCH (n)-[r]-()
DELETE n,r
John Bachir
la source
11
+1 pour la déclaration. Mais sachez que ce n'est pas parce que vous supprimez tous les nœuds que les étiquettes que vous avez utilisées sont complètement oubliées. Le navigateur affichera toujours toutes les étiquettes. Idem pour les propriétés des nœuds et les étiquettes de relations.
Dilum Ranatunga
@DilumRanatunga 1. Savez-vous comment faire oublier les étiquettes à Neo? 2. Comment les propriétés des nœuds peuvent-elles persister si les nœuds sont supprimés ou si les étiquettes de relation persistent dans les relations?
John Bachir
1
Je ne parle pas des valeurs réelles; Je veux dire les noms de propriété eux-mêmes.
Dilum Ranatunga
5
il peut y avoir non seulement des nœuds et des arêtes, mais aussi des index dans la base de données, et il est plus difficile de s'en débarrasser. De plus, j'ai juste réussi à ruiner une instance de base de données par des tests répétés massifs, y compris des suppressions, et il semble que la suppression physique des fichiers de base de données et que Neo4J les recrée au redémarrage apporte une nette amélioration des performances.
flux du
Je n'ai plus de mémoire sur neo4j dans le conteneur docker.
bolec_kolec
52

Depuis Neo4j 2.3,

Nous pouvons supprimer tous les nœuds avec des relations ,

MATCH (n)
DETACH DELETE n

Actuellement, il n'y a aucune option pour créer plusieurs bases de données dans Noe4j. Vous devez créer plusieurs magasins de données Neo4j. Voir référence .

Somnath Muluk
la source
3
Meilleure réponse si vous ne souhaitez pas recourir au système de fichiers.
ThomasH
Le problème avec cette approche est qu'elle ne supprimera pas les contraintes ni les index
Davide
47

Créer une nouvelle base de données dans Neo4j

Avant de démarrer la communauté neo4j, cliquez sur l'option de navigation

entrez la description de l'image ici

et choisissez un autre répertoire

entrez la description de l'image ici

entrez la description de l'image ici

et cliquez sur le bouton de démarrage.

entrez la description de l'image ici

Nouvelle base de données créée sur ce répertoire

Bharathiraja
la source
12

manière rapide et sale qui fonctionne bien:

bin/neo4j stop
rm -rf data/
mkdir data
bin/neo4j start
Scott
la source
11

Pour tous ceux qui ont besoin d'un graphe propre pour exécuter une suite de tests - https://github.com/jexp/neo4j-clean-remote-db-addon est une excellente extension pour permettre d'effacer la base de données via un appel REST. Évidemment, ne l'utilisez pas en production!

Matt Luongo
la source
Il semble supprimer le nœud 0. Comment le recréer?
Sera
1
En fait, il ignore le nœud de référence ( github.com/jexp/neo4j-clean-remote-db-addon/blob/master/src/… ). Mais si votre nœud de référence est parti (et que vous en avez besoin), vous devrez commencer avec un répertoire de données propre, car il n'y a pas setRefenceNode()encore d'appel ( stackoverflow.com/questions/7186832/… ).
Matt Luongo
7

Exécutez votre code de test sur une autre instance neo4j.

  1. Copiez votre répertoire neo4j dans un nouvel emplacement. Utilisez ceci pour tester. cd dans le nouveau répertoire.
  2. Modifiez le port afin de pouvoir exécuter vos tests et l'utiliser normalement simultanément. Pour changer le port ouvert conf/neo4j-server.propertieset défini org.neo4j.server.webserver.portsur un port inutilisé.
  3. Démarrez le serveur de test lors de l'installation. Faites ./neo4j stopet rm -rf data/graph.dbsur le démontage.

Pour plus de détails, voir neo4j: Comment changer de base de données? et les documents .

Pramod
la source
6

Dans Neo4j 2.0.0, le? n'est plus pris en charge. Utilisez plutôt le MATCH OPTIONNEL:

START n=node(*)
OPTIONAL MATCH (n)-[r]-()
delete n,r;
Charles
la source
6

La réponse la plus simple est: NON

La meilleure façon de "recommencer" est de

  • déplacer vers un autre dossier de données vide

ou

  • fermez complètement Neo4j
  • vider l'ancien dossier de données
  • redémarrez Neo4j et définissez le dossier vide comme dossier de données

Il existe un moyen de supprimer tous les nœuds et relations (comme décrit ici )

MATCH (n)
OPTIONAL MATCH (n)-[r]-()
DELETE n,r
user3194532
la source
1

Dans 2.0.0 -M6, vous pouvez exécuter le script Cypher suivant pour supprimer tous les nœuds et relations:

start n=node(*)
match (n)-[r?]-()
delete n,r
Martin Seeler
la source
2
Malheureusement, cela produit une erreur dans la dernière version 2.0.0: SyntaxException: Le point d'interrogation n'est plus utilisé pour les modèles facultatifs - utilisez plutôt OPTIONAL MATCH (ligne 1, colonne 26) ==> "start n = node (*) match (n ) - [r?] - () delete n, r "
richj
Je ne comprends pas les votes négatifs, car la réponse dit clairement Dans 2.0.0 -M6 , qui était la dernière version lorsque j'ai répondu à la question, tandis que d'autres ont fourni des réponses correctes pour la dernière version actuelle .
Martin Seeler le
1

À partir de la version 3, je pense qu'il est désormais possible de créer des instances de base de données séparées et que leur emplacement est donc légèrement différent.

En référence à: https://neo4j.com/developer/guide-import-csv/

Le --into retail.db est évidemment la base de données cible, qui ne doit pas contenir de base de données existante.

Sur ma boîte Ubuntu, l'emplacement est dans:

/var/lib/neo4j/data/databasesoù je ne vois actuellement que graph.dbce qui, selon moi, doit être la valeur par défaut.

Antony
la source
0

Vous pouvez supprimer vos fichiers de données et si vous souhaitez procéder de cette manière, je vous recommande de supprimer uniquement votre graph.db, par exemple. Sinon, vous allez gâcher vos informations d'authentification.

Raeffray
la source