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?

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 ...


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

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 .


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


12

schnelle und schmutzige Art und Weise, die gut funktioniert:

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

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!


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 .


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;

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

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

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.


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.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.