Wie kann ich die neo4j Datenbank zurücksetzen / löschen / löschen?


73

Wir können alle Knoten und Beziehungen löschen, indem wir der Abfrage folgen.

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

Der neu erstellte Knoten erhält jedoch die interne ID als ({letzte interne ID des Knotens} + 1). Es wird nicht auf Null zurückgesetzt.

Wie können wir die neo4j-Datenbank zurücksetzen, wenn der neu erstellte Knoten die ID 0 erhält?

Ab 2.3 können wir alle Knoten mit Beziehungen löschen.

MATCH (n)
DETACH DELETE n

6
seit Neo4j 2.3 können Sie MATCH (n) DETACH DELETE nalternativ verwenden.
Stefan Armbruster

3
MATCH (n) DETACH DELETE n kläglich scheitert, wenn es viele Knoten gibt: There is not enough memory to perform the current task. Please try increasing 'dbms.memory.heap.max_size' in the neo4j configuration (normally in 'conf/neo4j.conf' or, if you you are using Neo4j Desktop, found through the user interface) or if you are running an embedded installation increase the heap by using '-Xmx' command line flag, and then restart the database
Marco Ancona

Antworten:


81

Fahren Sie Ihren Neo4j-Server herunter, führen Sie a aus rm -rf data/graph.dbund starten Sie den Server erneut. Bei diesem Verfahren werden Ihre Daten vollständig gelöscht. Gehen Sie daher vorsichtig vor.


3
Ich glaube, die Dateistruktur hat sich in Neo4j 3.0 geändert, jetzt befinden sich alle Datendateien im Stammdatenbankverzeichnis, nicht im Datenordner. Was ich jetzt mache, ist "rm -rf databaseFolder / *", um alles aus dem Ordner zu entfernen. Zuerst sollte der Server natürlich gestoppt werden.
Melis

10
Neo4j 3.0 ist der erste Schritt zur Unterstützung mehrerer Datenbanken. Derzeit kann eine Neo4j-Installation mehrere Grafikdatenbanken hosten, kann jedoch nur eine davon gleichzeitig ausführen. So löschen Sie eine Datenbank in 3.0: rm -rf data/databases/graph.db(im Fall der Standarddatenbank mit dem Namen graph.db).
Stefan Armbruster

2
Beachten Sie, dass sich diese Datei unter macOS mit Homebrew in einem Systemordner befindet, z. B. /usr/local/Cellar/neo4j/3.1.1/libexec/data/databases
Colin D,

2
Am Ubuntu 18.04 ist dieser Ordner /var/lib/neo4j/data/databases/graph.dbfür neo4j 3.5
Unlockme

1
@StefanArmbruster ist es nicht möglich, Ihren Vorschlag mit neo4j 4.0+ zu machen. Also habe ich eine Problemumgehung gefunden und unten einen weiteren Vorschlag gemacht.
Aipi

15

Führen Sie beide Befehle aus.

match (a) -[r] -> () delete a, r

Der obige Befehl löscht alle Knoten mit Beziehungen. dann renne ,

match (a) delete a

und es werden Knoten gelöscht, die keine Beziehungen haben.


2

Umgang mit mehreren Datenbanken.

Laut Neo4j verwalten mehrere Datenbanken Dokumentation :

Ein letzter administrativer Unterschied besteht darin, wie eine Datenbank vollständig bereinigt wird, ohne die gesamte Instanz mit mehreren Datenbanken zu beeinträchtigen. Bei einer einzelnen Instanz und einem einzelnen Datenbankansatz können Benutzer die gesamte Instanz löschen und neu starten. Bei mehreren Datenbanken können wir dies jedoch nur tun, wenn wir in diesem Fall alles aus unseren anderen Datenbanken verlieren. Der Ansatz ähnelt anderen DBMS, bei denen wir die Datenbank löschen und neu erstellen können, aber alles andere beibehalten. Cyphers Befehl dafür ist CREATE OR REPLACE DATABASE <name>. Dadurch wird die Datenbank erstellt (falls noch nicht vorhanden) oder eine vorhandene Datenbank durch eine saubere Datenbank ersetzt.

Wenn neo4j gestartet wird, können Sie auf zwei Datenbanken zugreifen, eine systemDatenbank und eine default ( neo4j) -Datenbank. So löschen / setzen Sie die neo4jDatenbank zurück:

1 - Zur systemDatenbank wechseln:

:use system

2 - Alle mit der Instanz erstellten Datenbanken anzeigen:

SHOW DATABASES

3 - Führen Sie den Befehl aus, um die Datenbank zu löschen.

CREATE OR REPLACE DATABASE <name>

1
Das Problem mit dieser Antwort ist, dass es für die Community-Version nicht funktioniert. Ansonsten ist es ein guter Vorschlag
Enrique Ortuño

@ EnriqueOrtuño Es hat bei mir in der Community-Version funktioniert! Es gibt jedoch ein Problem, dass meine Datenbank beschädigt wurde, wenn ich es mehr als zweimal versuche. Ich beabsichtige, dieses Problem in Github zu melden.
Aipi

3
Auch in der Community-Version habe ich kein Glück. Die Dokumentation zeigt an, dass es sich nur um Enterprise handelt: neo4j.com/docs/cypher-manual/4.0/administration/databases/…
radicand

2

Dieser Befehl löscht alles, erfordert jedoch die Installation von apoc:

CALL apoc.periodic.iterate ('MATCH (n) RETURN n', 'DETACH DELETE n', {batchSize: 1000})


1

Wenn Sie es in einem Docker-Container verwenden, können Sie dies tun

docker-compose rm -f -s -v myNeo4jService


2
Nicht, wenn Sie einen externen Volume-Mount für die Datenbank verwenden. Wenn Sie dies nicht tun, führt ein einfacher Neustart des Docker-Containers zu einem neuen Status.
OneCricketeer

@ Cricket_007 Kannst du näher auf "Neustart" eingehen?
Jordan Morris

Durch das Entfernen und Starten des Docker-Containers wird eine auf einem externen Volume
bereitgestellte

1

Da neo4j nur die aktuelle Datenbank ausführt, die in der conf-Datei angegeben ist, können Sie eine neue und saubere Datenbank auf einfache Weise starten, indem Sie die aktuelle Datenbank in der Datei neo4j.conf ändern und dann den neo4j-Server neu starten.

dbms.active_database=graph.db --> dbms.active_database=graph2.db

Einige könnten argumentieren, dass der Datenbankname geändert wird. Zum jetzigen Zeitpunkt [2018-12] unterstützt neo4j jedoch nicht mehrere Datenbankinstanzen. Wir müssen nicht zwischen Datenbanken unterscheiden, daher wird der Name der Datenbank in unserem Code nicht verwendet.


0

Nach meiner Erfahrung gibt es zwei Möglichkeiten, eine Neo4j-Datenbank zurückzusetzen, je nachdem, was Sie benötigen.

Methode 1: Löschen Sie einfach alle Knoten / Beziehungen / Indizes / Einschränkungen

Im Neo4j Browser oder in Py2neo mit graph.run()( Link ).

# All nodes and relationships.
MATCH (n) DETACH DELETE n

# All indexes and constraints.
CALL apoc.schema.assert({},{},true) YIELD label, key RETURN *

Obwohl dieser Ansatz praktisch ist, ist er nicht geeignet, wenn ein Befehl neo4j-admin.bat importfür den BULK-Import verwendet wird, dh ideal, um Millionen von Knoten gleichzeitig schnell zu importieren .

Methode 2: Datenbank für BULK Import Tool zurücksetzen

Es ist nicht möglich, BULK zu importieren, wenn die Datenbank nicht leer ist . Ich habe die obige Methode ausprobiert, aber trotzdem den Fehler erhalten:

Import error: C:\Users\[username]\AppData\Local\Neo4j\Relate\Data\dbmss\dbms-dd16c384-78c5-4c21-94f3-b0e63e6c4e06\data\databases\neo4j already contains data, cannot do import here
Caused by:C:\Users\[username]\AppData\Local\Neo4j\Relate\Data\dbmss\dbms-dd16c384-78c5-4c21-94f3-b0e63e6c4e06\data\databases\neo4j already contains data, cannot do import here
java.lang.IllegalStateException: C:\Users\[username]\AppData\Local\Neo4j\Relate\Data\dbmss\dbms-dd16c384-78c5-4c21-94f3-b0e63e6c4e06\data\databases\neo4j already contains data, cannot do import here

Um dieses Problem zu beheben, habe ich die folgenden Ordner gelöscht:

c:\Users\[username]\AppData\Local\Neo4j\Relate\Data\dbmss\dbms-dd16c384-78c5-4c21-94f3-b0e63e6c4e06\data\databases\neo4j

und

c:\Users\[username]\AppData\Local\Neo4j\Relate\Data\dbmss\dbms-dd16c384-78c5-4c21-94f3-b0e63e6c4e06\data\transactions\neo4j

Führen Sie dann den Importbefehl aus:

"C:\Users\[username]\AppData\Local\Neo4j\Relate\Data\dbmss\dbms-dd16c384-78c5-4c21-94f3-b0e63e6c4e06\bin\neo4j-admin.bat" import --database=neo4j --multiline-fields=true --nodes=node_ABC.csv --nodes=node_XYZ.csv relationships=relationship_LMN.csv --relationships=relationship_UIO.csv

Starten Sie die Neo4j-Datenbank. In Neo4j Desktop sollten die Beschriftungen und Beziehungen jetzt erkannt werden.

Geben Sie hier die Bildbeschreibung ein

Beachten Sie, dass die von mir gelöschte Datenbank ( neo4j ) und die Datenbank, in die ich importiert habe, identisch sind.

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.