Come eliminare / creare database in Neo4j?


104

È possibile creare / eliminare diversi database nel database grafico Neo4j come in MySQL? O, almeno, come eliminare tutti i nodi e le relazioni di un grafico esistente per ottenere una configurazione pulita per i test, ad esempio, utilizzando comandi di shell simili a rmrelo rm?

Risposte:


98

Puoi semplicemente rimuovere l'intera directory del grafico con rm -rf, perché Neo4j non memorizza nulla al di fuori di questo:

rm -rf data/*

Inoltre, puoi ovviamente iterare attraverso tutti i nodi ed eliminare le loro relazioni e i nodi stessi, ma potrebbe essere troppo costoso solo per i test ...


7
E se iterate su tutti i nodi, potrebbe essere una buona idea lasciare che il nodo di riferimento rimanga.
nawroth

6
Dove si trova la directory del grafico?
Pramod

3
@Pramod è nella directory dei dati della directory neo4j. Da non perdere
devshorts

7
Su MacOSX con homebrew: /usr/local/Cellar/neo4j/community-1.9.2-unix/libexec/data
Ashley

5
Forse è una buona idea fermare il server neo4j prima di eseguire questo comando.
John Bachir

98

comando ancora più semplice per eliminare tutti i nodi e le relazioni:

MATCH (n)
OPTIONAL MATCH (n)-[r]-()
DELETE n,r

11
+1 per la dichiarazione. Ma attenzione, solo perché elimini tutti i nodi, non significa che le etichette che hai usato siano completamente dimenticate. Il browser mostrerà comunque tutte le etichette. Idem per le proprietà del nodo e le etichette di relazione.
Dilum Ranatunga

@DilumRanatunga 1. sai come far dimenticare a neo le etichette? 2. come possono persistere le proprietà del nodo se i nodi vengono eliminati o se le etichette delle relazioni persistono se le relazioni vengono eliminate?
John Bachir

1
Non intendo i valori effettivi; Intendo i nomi delle proprietà stesse.
Dilum Ranatunga

5
potrebbero esserci non solo nodi e bordi, ma anche indici nel DB, ed è più difficile sbarazzarsene. Inoltre, sono appena riuscito a rovinare un'istanza database mediante test ripetuti e massicci, incluse le eliminazioni, e sembra che l'eliminazione fisica dei file DB e il fatto che Neo4J li ricrea al riavvio apporti un netto miglioramento delle prestazioni.
flusso

Ho esaurito la memoria su neo4j nel container docker.
bolec_kolec

52

Da Neo4j 2.3,

Possiamo eliminare tutti i nodi con relazioni ,

MATCH (n)
DETACH DELETE n

Attualmente non esiste alcuna opzione per creare più database in Noe4j. È necessario creare più archivi di dati Neo4j. Vedi riferimento .


3
La migliore risposta se non vuoi ricorrere al file system.
ThomasH

Il problema con questo approccio è che non cancellerà né vincoli né indici
Davide

47

Creazione di un nuovo database in Neo4j

Prima di avviare la comunità neo4j fare clic sull'opzione Sfoglia

inserisci qui la descrizione dell'immagine

e scegli una directory diversa

inserisci qui la descrizione dell'immagine

inserisci qui la descrizione dell'immagine

e fare clic sul pulsante di avvio.

inserisci qui la descrizione dell'immagine

Nuovo database creato in quella directory


12

modo veloce e sporco che funziona bene:

bin/neo4j stop
rm -rf data/
mkdir data
bin/neo4j start

11

Per chiunque altro abbia bisogno di un grafico pulito per eseguire una suite di test - https://github.com/jexp/neo4j-clean-remote-db-addon è un'ottima estensione per consentire la cancellazione del db tramite una chiamata REST. Ovviamente, però, non usarlo in produzione!


Sembra eliminare il nodo 0. Come posso ricrearlo?
Il

1
In realtà, salta il nodo di riferimento ( github.com/jexp/neo4j-clean-remote-db-addon/blob/master/src/… ). Ma se il tuo nodo di riferimento non c'è più (e ne hai bisogno) dovrai iniziare con una directory dei dati pulita, poiché non c'è ancora una setRefenceNode()chiamata ( stackoverflow.com/questions/7186832/… ).
Matt Luongo

7

Esegui il tuo codice di prova su un'istanza neo4j diversa.

  1. Copia la tua directory neo4j in una nuova posizione. Usalo per i test. cd nella nuova directory.
  2. Modificare la porta in modo da poter eseguire i test e utilizzarla normalmente contemporaneamente. Per modificare la porta aperta conf/neo4j-server.propertiese impostarla org.neo4j.server.webserver.portsu una inutilizzata.
  3. Avvia il server di prova durante l'installazione. Fai ./neo4j stope rm -rf data/graph.dballo smontaggio.

Per maggiori dettagli vedi neo4j: come cambiare database? e i documenti .


6

In Neo4j 2.0.0 il? non è più supportato. Utilizza invece PARTITA OPZIONALE:

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

6

La risposta più semplice è: NO

Il modo migliore per "ricominciare" è

  • spostarsi in un'altra cartella di dati vuota

o

  • chiudi Neo4j completamente
  • svuota la vecchia cartella dati
  • riavvia Neo4j e imposta la cartella vuota come cartella dei dati

C'è un modo per eliminare tutti i nodi e le relazioni (come descritto qui )

MATCH (n)
OPTIONAL MATCH (n)-[r]-()
DELETE n,r

1

In 2.0.0 -M6 è possibile eseguire il seguente script Cypher per eliminare tutti i nodi e le relazioni:

start n=node(*)
match (n)-[r?]-()
delete n,r

2
Sfortunatamente questo produce un errore nell'ultima versione 2.0.0: SyntaxException: il punto interrogativo non è più utilizzato per i modelli opzionali - usa invece OPTIONAL MATCH (riga 1, colonna 26) ==> "start n = node (*) match (n ) - [r?] - () cancella n, r "
richj

Non capisco i voti negativi , poiché la risposta dice chiaramente in 2.0.0 -M6 , che era l'ultima versione quando ho risposto alla domanda, mentre altri hanno fornito risposte corrette per l' ultima build attualmente .
Martin Seeler

1

A partire dalla versione 3, credo che ora sia possibile creare istanze di database separate e quindi la loro posizione è leggermente diversa.

Riferendosi a: https://neo4j.com/developer/guide-import-csv/

Il --into retail.db è ovviamente il database di destinazione, che non deve contenere un database esistente.

Sulla mia scatola di Ubuntu la posizione è in:

/var/lib/neo4j/data/databasesdove attualmente vedo solo quello graph.dbche credo debba essere l'impostazione predefinita.


0

Puoi eliminare i tuoi file di dati e se vuoi procedere in questo modo, ti consiglio di eliminare solo il tuo graph.db, per esempio. Altrimenti rovinerai le tue informazioni di autenticazione.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.