Como excluir / criar bancos de dados no Neo4j?

104

É possível criar / excluir bancos de dados diferentes no banco de dados gráfico Neo4j como no MySQL? Ou, pelo menos, como excluir todos os nós e relacionamentos de um gráfico existente para obter uma configuração limpa para testes, por exemplo, usando comandos de shell semelhantes a rmrelou rm?

rmv
fonte

Respostas:

98

Você pode simplesmente remover todo o diretório do gráfico com rm -rf, porque o Neo4j não está armazenando nada fora disso:

rm -rf data/*

Além disso, é claro que você pode iterar por todos os nós e excluir seus relacionamentos e os próprios nós, mas isso pode ser muito caro apenas para teste ...

Peter Neubauer
fonte
7
E se você iterar em todos os nós, pode ser uma boa ideia deixar o nó de referência permanecer.
nawroth
6
Onde está localizado o diretório do gráfico?
Pramod de
3
@Pramod está no diretório de dados do diretório neo4j. Você não pode perder
devshorts de
7
No MacOSX com homebrew: /usr/local/Cellar/neo4j/community-1.9.2-unix/libexec/data
Ashley de
5
Talvez seja uma boa ideia parar o servidor neo4j antes de executar este comando.
John Bachir
98

comando ainda mais simples para excluir todos os nós e relacionamentos:

MATCH (n)
OPTIONAL MATCH (n)-[r]-()
DELETE n,r
John Bachir
fonte
11
1 para a declaração. Mas esteja ciente, só porque você excluiu todos os nós, não significa que os rótulos que você usou foram completamente esquecidos. O navegador ainda mostrará todos os rótulos. Idem para propriedades de nó e rótulos de relacionamento.
Dilum Ranatunga
@DilumRanatunga 1. você sabe como fazer o neo esquecer os rótulos? 2. como as propriedades do nó podem persistir se os nós forem excluídos ou se os rótulos de relacionamento persistirem dos relacionamentos forem excluídos?
John Bachir
1
Não me refiro aos valores reais; Refiro-me aos próprios nomes das propriedades.
Dilum Ranatunga
5
pode haver não apenas nós e arestas, mas também índices no banco de dados, e é mais difícil se livrar deles. Além disso, acabei de arruinar uma instância de banco de dados por meio de testes repetidos massivos, incluindo exclusões, e parece que excluir fisicamente os arquivos do banco de dados e ter o Neo4J recriá-los na reinicialização traz uma melhoria clara no desempenho.
fluxo
Fiquei sem memória no neo4j no docker container.
bolec_kolec
52

Do Neo4j 2.3,

Podemos excluir todos os nós com relacionamentos ,

MATCH (n)
DETACH DELETE n

Atualmente não há nenhuma opção para criar vários bancos de dados no Noe4j. Você precisa fazer vários armazenamentos de dados do Neo4j. Veja a referência .

Somnath Muluk
fonte
3
Melhor resposta se você não quiser recorrer ao sistema de arquivos.
ThomasH
O problema com essa abordagem é que ela não exclui Restrições nem índices
Davide
47

Criando novo banco de dados no Neo4j

Antes de iniciar a comunidade neo4j clique na opção de navegação

insira a descrição da imagem aqui

e escolha um diretório diferente

insira a descrição da imagem aqui

insira a descrição da imagem aqui

e clique no botão Iniciar.

insira a descrição da imagem aqui

Novo banco de dados criado naquele diretório

Bharathiraja
fonte
12

maneira rápida e suja que funciona bem:

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

Para qualquer pessoa que precise de um gráfico limpo para executar um conjunto de testes - https://github.com/jexp/neo4j-clean-remote-db-addon é uma ótima extensão para permitir limpar o banco de dados por meio de uma chamada REST. Obviamente, porém, não o use na produção!

Matt Luongo
fonte
Parece excluir o nó 0. Como faço para recriá-lo?
Será em
1
Na verdade, ele ignora o nó de referência ( github.com/jexp/neo4j-clean-remote-db-addon/blob/master/src/… ). Mas se o seu nó de referência sumiu (e você precisa dele), você precisará começar com um diretório de dados limpo, uma vez que não há uma setRefenceNode()chamada ainda ( stackoverflow.com/questions/7186832/… ).
Matt Luongo
7

Execute seu código de teste em uma instância diferente do neo4j.

  1. Copie seu diretório neo4j em um novo local. Use isso para teste. cd para o novo diretório.
  2. Altere a porta para que você possa executar seus testes e usá-la normalmente simultaneamente. Para alterar a porta, abra conf/neo4j-server.propertiese defina org.neo4j.server.webserver.portpara uma não utilizada.
  3. Inicie o servidor de teste na configuração. Faça ./neo4j stope rm -rf data/graph.dbna desmontagem.

Para obter mais detalhes, consulte neo4j: Como alternar o banco de dados? e os documentos .

Pramod
fonte
6

No Neo4j 2.0.0 o? não é mais compatível. Em vez disso, use OPTIONAL MATCH:

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

A resposta mais fácil é: NÃO

A melhor maneira de "recomeçar" é

  • mover para outra pasta de dados vazia

ou

  • feche o Neo4j completamente
  • esvaziar a pasta de dados antiga
  • reinicie o Neo4j e defina a pasta vazia como a pasta de dados

Existe uma maneira de excluir todos os nós e relacionamentos (conforme descrito aqui )

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

Em 2.0.0 -M6, você pode executar o seguinte script Cypher para excluir todos os nós e relações:

start n=node(*)
match (n)-[r?]-()
delete n,r
Martin Seeler
fonte
2
Infelizmente, isso produz um erro na versão 2.0.0 mais recente: SyntaxException: O ponto de interrogação não é mais usado para padrões opcionais - use OPTIONAL MATCH (linha 1, coluna 26) ==> "start n = node (*) match (n ) - [r?] - () delete n, r "
richj
Não entendo os votos negativos , já que a resposta diz claramente Em 2.0.0 -M6 , que era a versão mais recente quando respondi à pergunta, enquanto outros forneciam respostas corretas para a compilação mais recente atualmente .
Martin Seeler
1

A partir da versão 3, acredito que agora seja possível criar instâncias de banco de dados separadas e, portanto, sua localização é um pouco diferente.

Referindo-se a: https://neo4j.com/developer/guide-import-csv/

O --into retail.db é obviamente o banco de dados de destino, que não deve conter um banco de dados existente.

Na minha caixa do Ubuntu, a localização é:

/var/lib/neo4j/data/databasesonde atualmente vejo apenas o graph.dbque acredito ser o padrão.

Antony
fonte
0

Você pode deletar seus arquivos de dados e se quiser seguir por este caminho, eu recomendo deletar apenas seu graph.db, por exemplo. Caso contrário, você bagunçará suas informações de autenticação.

Raeffray
fonte