¿Cómo eliminar / crear bases de datos en Neo4j?

104

¿Es posible crear / eliminar diferentes bases de datos en la base de datos gráfica Neo4j como en MySQL? O, al menos, ¿cómo eliminar todos los nodos y relaciones de un gráfico existente para obtener una configuración limpia para las pruebas, por ejemplo, usando comandos de shell similares a rmrelo rm?

rmv
fuente

Respuestas:

98

Puede eliminar todo el directorio de gráficos con rm -rf, porque Neo4j no almacena nada fuera de eso:

rm -rf data/*

Además, por supuesto, puede iterar a través de todos los nodos y eliminar sus relaciones y los nodos mismos, pero eso podría ser demasiado costoso solo para probar ...

Peter Neubauer
fuente
7
Y si itera sobre todos los nodos, podría ser una buena idea dejar que el nodo de referencia permanezca.
nawroth
6
¿Dónde está ubicado el directorio de gráficos?
Pramod
3
@Pramod está en el directorio de datos del directorio neo4j. No te lo puedes perder
devshorts
7
En MacOSX con homebrew: /usr/local/Cellar/neo4j/community-1.9.2-unix/libexec/data
Ashley
5
Quizás sea una buena idea detener su servidor neo4j antes de ejecutar este comando.
John Bachir
98

comando aún más simple para eliminar todos los nodos y relaciones:

MATCH (n)
OPTIONAL MATCH (n)-[r]-()
DELETE n,r
John Bachir
fuente
11
+1 para la declaración. Pero tenga en cuenta que el hecho de que elimine todos los nodos no significa que las etiquetas que utilizó se hayan olvidado por completo. El navegador seguirá mostrando todas las etiquetas. Lo mismo ocurre con las propiedades de los nodos y las etiquetas de relación.
Dilum Ranatunga
@DilumRanatunga 1. ¿Sabes cómo hacer que neo olvide las etiquetas? 2. ¿Cómo pueden persistir las propiedades de los nodos si los nodos se eliminan o las etiquetas de relación persistentes de las relaciones se eliminan?
John Bachir
1
No me refiero a los valores reales; Me refiero a los propios nombres de las propiedades.
Dilum Ranatunga
5
puede haber no solo nodos y bordes, sino también índices en la base de datos, y es más difícil deshacerse de ellos. Además, me las arreglé para arruinar una instancia de base de datos mediante pruebas masivas y repetidas, incluidas las eliminaciones, y parece que eliminar físicamente los archivos de base de datos y hacer que Neo4J los vuelva a crear al reiniciar trae una clara mejora en el rendimiento.
flujo
Me quedé sin memoria en neo4j en el contenedor de la ventana acoplable.
bolec_kolec
52

Desde Neo4j 2.3,

Podemos eliminar todos los nodos con relaciones ,

MATCH (n)
DETACH DELETE n

Actualmente no existe ninguna opción para crear múltiples bases de datos en Noe4j. Necesita hacer varias tiendas de datos de Neo4j. Ver referencia .

Somnath Muluk
fuente
3
La mejor respuesta si no desea recurrir al sistema de archivos.
ThomasH
El problema con este enfoque es que no eliminará las restricciones ni los índices
Davide
47

Creando una nueva base de datos en Neo4j

Antes de iniciar la comunidad neo4j, haga clic en la opción de exploración

ingrese la descripción de la imagen aquí

y elige un directorio diferente

ingrese la descripción de la imagen aquí

ingrese la descripción de la imagen aquí

y haga clic en el botón de inicio.

ingrese la descripción de la imagen aquí

Nueva base de datos creada en ese directorio

Bharathiraja
fuente
12

manera rápida y sucia que funciona bien:

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

Para cualquier otra persona que necesite un gráfico limpio para ejecutar un conjunto de pruebas, https://github.com/jexp/neo4j-clean-remote-db-addon es una gran extensión que permite borrar la base de datos a través de una llamada REST. Sin embargo, obviamente, ¡no lo uses en producción!

Matt Luongo
fuente
Parece eliminar el nodo 0. ¿Cómo lo vuelvo a crear?
Será el
1
En realidad, omite el nodo de referencia ( github.com/jexp/neo4j-clean-remote-db-addon/blob/master/src/… ). Pero si su nodo de referencia se ha ido (y lo necesita), deberá comenzar con un directorio de datos limpio, ya que aún no hay una setRefenceNode()llamada ( stackoverflow.com/questions/7186832/… ).
Matt Luongo
7

Ejecute su código de prueba en una instancia de neo4j diferente.

  1. Copie su directorio neo4j en una nueva ubicación. Use esto para probar. cd en el nuevo directorio.
  2. Cambie el puerto para que pueda ejecutar sus pruebas y usarlo normalmente simultáneamente. Para cambiar el puerto abierto conf/neo4j-server.propertiesy configurado org.neo4j.server.webserver.porta uno no utilizado.
  3. Inicie el servidor de prueba en la configuración. Hacer ./neo4j stopy rm -rf data/graph.dbdesmontar.

Para obtener más detalles, consulte neo4j: ¿Cómo cambiar de base de datos? y los docs .

Pramod
fuente
6

En Neo4j 2.0.0 el? ya no es compatible. Utilice PARTIDA OPCIONAL en su lugar:

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

La respuesta más fácil es: NO

La mejor forma de "empezar de nuevo" es

  • mover a otra carpeta de datos vacía

o

  • cerrar Neo4j completamente
  • vaciar la carpeta de datos antigua
  • reinicie Neo4j y configure la carpeta vacía como carpeta de datos

Hay una forma de eliminar todos los nodos y relaciones (como se describe aquí )

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

En 2.0.0 -M6 Puede ejecutar el siguiente script Cypher para eliminar todos los nodos y relaciones:

start n=node(*)
match (n)-[r?]-()
delete n,r
Martín Seeler
fuente
2
Desafortunadamente, esto produce un error en la última versión 2.0.0: SyntaxException: el signo de interrogación ya no se usa para patrones opcionales; use OPTIONAL MATCH en su lugar (línea 1, columna 26) ==> "start n = node (*) match (n ) - [r?] - () eliminar n, r "
richj
No entiendo los votos negativos, ya que la respuesta dice claramente en 2.0.0 -M6 , que era la última versión cuando respondí la pregunta, mientras que otras proporcionaron respuestas correctas para la última versión actual .
Martin Seeler
1

A partir de la versión 3, creo que ahora es posible crear instancias de bases de datos separadas y, por lo tanto, su ubicación es ligeramente diferente.

Refiriéndose a: https://neo4j.com/developer/guide-import-csv/

El --into retail.db es obviamente la base de datos de destino, que no debe contener una base de datos existente.

En mi caja de Ubuntu, la ubicación está en:

/var/lib/neo4j/data/databasesdonde actualmente veo solo graph.dblo que creo que debe ser el predeterminado.

Antonio
fuente
0

Puede eliminar sus archivos de datos y, si desea seguir adelante, le recomendaría que elimine solo su graph.db, por ejemplo. De lo contrario, estropeará su información de autenticación.

Raeffray
fuente