Wie lösche / erstelle ich Datenbanken in Neo4j?

104

Ist es möglich, verschiedene Datenbanken in der Grafikdatenbank Neo4j wie in MySQL zu erstellen / löschen ? Oder zumindest, wie alle Knoten und Beziehungen eines vorhandenen Diagramms gelöscht werden, um ein sauberes Setup für Tests zu erhalten, z. B. mithilfe von Shell-Befehlen ähnlich rmreloder rm?

rmv
quelle

Antworten:

98

Sie können einfach das gesamte Diagrammverzeichnis mit entfernen rm -rf, da Neo4j nichts außerhalb davon speichert:

rm -rf data/*

Sie können natürlich auch alle Knoten durchlaufen und ihre Beziehungen und die Knoten selbst löschen, aber das kann nur zum Testen zu kostspielig sein ...

Peter Neubauer
quelle
7
Wenn Sie alle Knoten durchlaufen, ist es möglicherweise eine gute Idee, den Referenzknoten beizubehalten.
Nawroth
6
Wo befindet sich das Grafikverzeichnis?
Pramod
3
@Pramod ist im Datenverzeichnis des neo4j-Verzeichnisses. Sie können es nicht verfehlen
Devshorts
7
Unter MacOSX mit Homebrew: /usr/local/Cellar/neo4j/community-1.9.2-unix/libexec/data
Ashley
5
Vielleicht ist es eine gute Idee, Ihren neo4j-Server zu stoppen, bevor Sie diesen Befehl ausführen.
John Bachir
98

Noch einfacherer Befehl zum Löschen aller Knoten und Beziehungen:

MATCH (n)
OPTIONAL MATCH (n)-[r]-()
DELETE n,r
John Bachir
quelle
11
+1 für die Anweisung. Beachten Sie jedoch, dass die von Ihnen verwendeten Beschriftungen nicht vollständig vergessen werden, nur weil Sie alle Knoten löschen. Der Browser zeigt weiterhin alle Beschriftungen an. Das Gleiche gilt für Knoteneigenschaften und Beziehungsbezeichnungen.
Dilum Ranatunga
@ DilumRanatunga 1. Weißt du, wie man Neo dazu bringt, die Etiketten zu vergessen? 2. Wie können Knoteneigenschaften bestehen bleiben, wenn die Knoten gelöscht werden oder Beziehungsbezeichnungen der Beziehungen gelöscht werden?
John Bachir
1
Ich meine nicht die tatsächlichen Werte; Ich meine die Eigenschaftsnamen selbst.
Dilum Ranatunga
5
Möglicherweise gibt es nicht nur Knoten und Kanten, sondern auch Indizes in der Datenbank, und es ist schwieriger, diese zu entfernen. Außerdem habe ich es gerade geschafft, eine DB-Instanz durch massive wiederholte Tests einschließlich Löschvorgängen zu ruinieren. Es sieht so aus, als würde das physische Löschen der DB-Dateien und das Neuerstellen von Neo4J beim Neustart zu einer deutlichen Verbesserung der Leistung führen.
Flow
Ich habe auf neo4j im Docker-Container nicht mehr genügend Speicher.
bolec_kolec
52

Ab Neo4j 2.3,

Wir können alle Knoten mit Beziehungen löschen ,

MATCH (n)
DETACH DELETE n

Derzeit gibt es keine Möglichkeit, mehrere Datenbanken in Noe4j zu erstellen. Sie müssen mehrere Speicher für Neo4j-Daten erstellen. Siehe Referenz .

Somnath Muluk
quelle
3
Beste Antwort, wenn Sie nicht auf das Dateisystem zurückgreifen möchten.
ThomasH
Das Problem mit diesem Ansatz ist, dass es weder Einschränkungen noch Indizes löscht
Davide
47

Neue Datenbank in Neo4j erstellen

Bevor Sie die neo4j-Community starten, klicken Sie auf die Option Durchsuchen

Geben Sie hier die Bildbeschreibung ein

und wählen Sie ein anderes Verzeichnis

Geben Sie hier die Bildbeschreibung ein

Geben Sie hier die Bildbeschreibung ein

und klicken Sie auf die Schaltfläche Start.

Geben Sie hier die Bildbeschreibung ein

Neue Datenbank in diesem Verzeichnis erstellt

Bharathiraja
quelle
12

schnelle und schmutzige Art und Weise, die gut funktioniert:

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

Für alle anderen, die ein sauberes Diagramm benötigen, um eine Testsuite auszuführen - https://github.com/jexp/neo4j-clean-remote-db-addon - ist eine großartige Erweiterung, um das Löschen der Datenbank durch einen REST-Aufruf zu ermöglichen. Verwenden Sie es natürlich nicht in der Produktion!

Matt Luongo
quelle
Es scheint Knoten 0 zu löschen. Wie erstelle ich es neu?
Will
1
Tatsächlich wird der Referenzknoten übersprungen ( github.com/jexp/neo4j-clean-remote-db-addon/blob/master/src/… ). Wenn Ihr Referenzknoten jedoch nicht mehr vorhanden ist (und Sie ihn benötigen), müssen Sie mit einem sauberen Datenverzeichnis beginnen, da noch kein setRefenceNode()Aufruf erfolgt ( stackoverflow.com/questions/7186832/… ).
Matt Luongo
7

Führen Sie Ihren Testcode auf einer anderen neo4j-Instanz aus.

  1. Kopieren Sie Ihr neo4j-Verzeichnis an einen neuen Speicherort. Verwenden Sie dies zum Testen. CD in das neue Verzeichnis.
  2. Ändern Sie den Port, damit Sie Ihre Tests ausführen und gleichzeitig normal verwenden können. Um den Port zu ändern, öffnen Sie ihn conf/neo4j-server.propertiesund stellen Sie ihn org.neo4j.server.webserver.portauf einen nicht verwendeten ein.
  3. Starten Sie den Testserver beim Setup. Tun ./neo4j stopund rm -rf data/graph.dbbeim Abreißen.

Weitere Informationen finden Sie unter neo4j: So wechseln Sie die Datenbank? und die Dokumente .

Pramod
quelle
6

In Neo4j 2.0.0 ist das? wird nicht mehr unterstützt. Verwenden Sie stattdessen OPTIONAL MATCH:

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

Die einfachste Antwort lautet: NEIN

Der beste Weg, um von vorne zu beginnen, ist zu

  • in einen anderen leeren Datenordner verschieben

oder

  • Schließen Sie Neo4j vollständig
  • Leeren Sie den alten Datenordner
  • Starten Sie Neo4j neu und legen Sie den leeren Ordner als Datenordner fest

Es gibt eine Möglichkeit, alle Knoten und Beziehungen zu löschen (wie hier beschrieben ).

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

In 2.0.0 -M6 können Sie das folgende Cypher-Skript ausführen, um alle Knoten und Beziehungen zu löschen:

start n=node(*)
match (n)-[r?]-()
delete n,r
Martin Seeler
quelle
2
Leider führt dies in der neuesten Version 2.0.0 zu einem Fehler: SyntaxException: Das Fragezeichen wird nicht mehr für optionale Muster verwendet. Verwenden Sie stattdessen OPTIONAL MATCH (Zeile 1, Spalte 26) ==> "start n = node (*) match (n ) - [r?] - () lösche n, r "
richj
Ich verstehe die Downvotes nicht, da die Antwort in 2.0.0 -M6 , der neuesten Version, als ich die Frage beantwortete, klar lautet , während andere die richtigen Antworten für den aktuell neuesten Build lieferten .
Martin Seeler
1

Ab Version 3 ist es meines Erachtens jetzt möglich, separate Datenbankinstanzen zu erstellen, und daher unterscheidet sich deren Speicherort geringfügig.

Verweis auf: https://neo4j.com/developer/guide-import-csv/

Die Datei --into Retail.db ist offensichtlich die Zieldatenbank, die keine vorhandene Datenbank enthalten darf.

Auf meiner Ubuntu-Box befindet sich der Speicherort in:

/var/lib/neo4j/data/databaseswo ich momentan nur sehe graph.dbwas ich glaube muss der default sein.

Antonius
quelle
0

Sie können Ihre Datendateien löschen. Wenn Sie diesen Weg gehen möchten, würde ich empfehlen, beispielsweise nur Ihre graph.db zu löschen. Andernfalls werden Sie Ihre Authentifizierungsinformationen durcheinander bringen.

Raeffray
quelle