web-dev-qa-db-fra.com

Meilleure façon de supprimer tous les nœuds et toutes les relations dans Cypher

Quel est le meilleur moyen de nettoyer le graphique de tous les nœuds et relations via Cypher?

Sur http://neo4j.com/docs/stable/query-delete.html#delete-delete-a-node-and-connected-relationships l'exemple

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

a la note:

Cette requête ne concerne pas la suppression de grandes quantités de données.

Alors, la suite est-elle meilleure?

MATCH ()-[r]-() DELETE r

et

MATCH (n) DELETE n

Ou y a-t-il un autre moyen qui est préférable pour les grands graphiques?

12
George Birbilis

Comme vous l'avez dit, le moyen le plus simple consiste à arrêter Neo4j, à supprimer le dossier data/graph.db et à le redémarrer. 

La suppression d'un graphique de grande taille via Cypher sera toujours plus lente mais toujours réalisable si vous utilisez une taille de transaction appropriée pour éviter les problèmes de mémoire (rappelez-vous que les transactions sont d'abord créées en mémoire avant d'être validées). En règle générale, une opération atomique de 50 à 100 000 $ est une bonne idée. Vous pouvez ajouter une limite à votre instruction de suppression pour contrôler les tailles de tx et indiquer le nombre de nœuds supprimés. Relancez cette instruction jusqu'à ce qu'une valeur de 0 soit renvoyée:

MATCH (n)
OPTIONAL MATCH (n)-[r]-()
WITH n,r LIMIT 50000
DELETE n,r
RETURN count(n) as deletedNodesCount
15
Stefan Armbruster

Selon le document officiel ici

MATCH (n)
DETACH DELETE n

mais il a également dit This query isn’t for deleting large amounts of data. il vaut donc mieux utiliser avec limite.

match (n)  
with n limit 10000  
DETACH DELETE n;  
9
ShaneX

A écrit ce petit script, l'a ajouté dans mon dossier NEO/bin.

Testé sur la communauté v3.0.6

#!/bin/sh
echo Stopping neo4j
./neo4j stop
echo Erasing ALL data
rm -rf ../data/databases/graph.db
./neo4j start
echo Done

Je l'utilise quand mes importations LOAD CSV sont de mauvaise qualité.

J'espère que ça aide

4
Jerome_B
optional match (n)-[p:owner_real_estate_relation]->() with n,p LIMIT 1000 delete p

En exécution de test, 50000 relations supprimées, complétées après 589 ms.

0
BazSTR