Jak usuwać / tworzyć bazy danych w Neo4j?

104

Czy jest możliwe tworzenie / usuwanie różnych baz danych w grafowej bazie danych Neo4j, tak jak w MySQL? Albo przynajmniej, jak usunąć wszystkie węzły i relacje istniejącego wykresu, aby uzyskać czystą konfigurację do testów, np. Używając poleceń powłoki podobnych do rmrellub rm?

rmv
źródło

Odpowiedzi:

99

Możesz po prostu usunąć cały katalog wykresów za pomocą rm -rf, ponieważ Neo4j nie przechowuje niczego poza tym:

rm -rf data/*

Możesz także oczywiście iterować przez wszystkie węzły i usuwać ich relacje oraz same węzły, ale może to być zbyt kosztowne tylko do testowania ...

Peter Neubauer
źródło
7
A jeśli iterujesz po wszystkich węzłach, dobrym pomysłem może być pozostawienie węzła odniesienia.
nawroth
6
Gdzie znajduje się katalog wykresów?
Pramod
3
@Pramod znajduje się w katalogu danych katalogu neo4j. Nie możesz tego przegapić
devshorts
7
Na MacOSX z homebrew: /usr/local/Cellar/neo4j/community-1.9.2-unix/libexec/data
Ashley
5
Być może dobrym pomysłem jest zatrzymanie serwera neo4j przed wykonaniem tego polecenia.
John Bachir
98

jeszcze prostsze polecenie usunięcia wszystkich węzłów i relacji:

MATCH (n)
OPTIONAL MATCH (n)-[r]-()
DELETE n,r
John Bachir
źródło
11
+1 za oświadczenie. Ale pamiętaj, że tylko dlatego, że usuwasz wszystkie węzły, nie oznacza, że ​​używane etykiety są całkowicie zapomniane. Przeglądarka nadal będzie wyświetlać wszystkie etykiety. To samo dotyczy właściwości węzłów i etykiet relacji.
Dilum Ranatunga
@DilumRanatunga 1. Czy wiesz, jak sprawić, by neo zapomniało o etykietach? 2. W jaki sposób właściwości węzłów mogą pozostać zachowane, jeśli węzły zostaną usunięte lub etykiety relacji pozostają zachowane w relacjach?
John Bachir,
1
Nie mam na myśli rzeczywistych wartości; Mam na myśli same nazwy nieruchomości.
Dilum Ranatunga
5
w bazie danych mogą znajdować się nie tylko węzły i krawędzie, ale także indeksy i trudniej się ich pozbyć. Ponadto właśnie udało mi się zrujnować instancję DB przez masowe, powtarzane testy, w tym usunięcia, i wygląda na to, że fizyczne usunięcie plików DB i ponowne ich odtworzenie przez Neo4J przy ponownym uruchomieniu przynosi wyraźną poprawę wydajności.
przepływ
Brakuje mi pamięci na neo4j w kontenerze docker.
bolec_kolec
52

Od Neo4j 2.3,

Możemy usunąć wszystkie węzły z relacjami ,

MATCH (n)
DETACH DELETE n

Obecnie nie ma żadnej opcji tworzenia wielu baz danych w Noe4j. Musisz utworzyć wiele magazynów danych Neo4j. Zobacz odniesienie .

Somnath Muluk
źródło
3
Najlepsza odpowiedź, jeśli nie chcesz uciekać się do systemu plików.
ThomasH,
Problem z tym podejściem polega na tym, że nie usunie ono ograniczeń ani indeksów
Davide
47

Tworzenie nowej bazy danych w Neo4j

Przed uruchomieniem społeczności neo4j kliknij opcję przeglądania

wprowadź opis obrazu tutaj

i wybierz inny katalog

wprowadź opis obrazu tutaj

wprowadź opis obrazu tutaj

i kliknij przycisk Start.

wprowadź opis obrazu tutaj

Nowa baza danych utworzona w tym katalogu

Bharathiraja
źródło
12

szybki i brudny sposób, który działa dobrze:

bin/neo4j stop
rm -rf data/
mkdir data
bin/neo4j start
Scott
źródło
11

Dla każdego, kto potrzebuje czystego wykresu, aby uruchomić zestaw testów - https://github.com/jexp/neo4j-clean-remote-db-addon to świetne rozszerzenie, które umożliwia wyczyszczenie bazy danych przez wywołanie REST. Oczywiście nie używaj go w produkcji!

Matt Luongo
źródło
Wydaje się, że usuwa węzeł 0. Jak go odtworzyć?
Will
1
Właściwie pomija węzeł referencyjny ( github.com/jexp/neo4j-clean-remote-db-addon/blob/master/src/… ). Ale jeśli twój węzeł referencyjny zniknął (i potrzebujesz go), musisz zacząć od czystego katalogu danych, ponieważ nie ma setRefenceNode()jeszcze połączenia ( stackoverflow.com/questions/7186832/… ).
Matt Luongo,
7

Uruchom kod testowy na innej instancji neo4j.

  1. Skopiuj katalog neo4j do nowej lokalizacji. Użyj tego do testowania. cd do nowego katalogu.
  2. Zmień port, aby można było uruchamiać testy i używać go normalnie jednocześnie. Aby zmienić port, otwórz conf/neo4j-server.propertiesi ustaw org.neo4j.server.webserver.portna nieużywany.
  3. Uruchom serwer testowy podczas instalacji. Zrób ./neo4j stopi rm -rf data/graph.dbporzuć.

Aby uzyskać więcej informacji, zobacz neo4j: Jak przełączyć bazę danych? i dokumenty .

Pramod
źródło
6

W Neo4j 2.0.0? nie jest już obsługiwany. Zamiast tego użyj DOPASOWANIA OPCJONALNEGO:

START n=node(*)
OPTIONAL MATCH (n)-[r]-()
delete n,r;
Karol
źródło
6

Najłatwiejsza odpowiedź brzmi: NIE

Najlepszym sposobem na „rozpoczęcie od nowa” jest

  • przejdź do innego pustego folderu danych

lub

  • zamknij całkowicie Neo4j
  • opróżnij stary folder danych
  • uruchom ponownie Neo4j i ustaw pusty folder jako folder danych

Istnieje sposób na usunięcie wszystkich węzłów i relacji (zgodnie z opisem tutaj )

MATCH (n)
OPTIONAL MATCH (n)-[r]-()
DELETE n,r
user3194532
źródło
1

W wersji 2.0.0 -M6 Możesz wykonać następujący skrypt Cypher, aby usunąć wszystkie węzły i relacje:

start n=node(*)
match (n)-[r?]-()
delete n,r
Martin Seeler
źródło
2
Niestety powoduje to błąd w najnowszej wersji 2.0.0: Wyjątek składni: Znak zapytania nie jest już używany dla opcjonalnych wzorców - zamiast tego użyj OPCJONALNEGO DOPASOWANIA (wiersz 1, kolumna 26) ==> "start n = node (*) match (n ) - [r?] - () delete n, r "
richj
Nie rozumiem głosów przeciw, ponieważ odpowiedź mówi wyraźnie w wersji 2.0.0 -M6 , która była ostatnią wersją, kiedy odpowiedziałem na pytanie, podczas gdy inne dostarczyły poprawnych odpowiedzi dla aktualnie najnowszej wersji.
Martin Seeler,
1

Uważam, że od wersji 3 można teraz tworzyć oddzielne instancje bazy danych, dlatego ich lokalizacja jest nieco inna.

W odniesieniu do: https://neo4j.com/developer/guide-import-csv/

--Into retail.db jest oczywiście docelową bazą danych, która nie może zawierać istniejącej bazy danych.

Na moim pudełku Ubuntu lokalizacja jest w:

/var/lib/neo4j/data/databasesgdzie obecnie widzę tylko te, graph.dbktóre moim zdaniem muszą być domyślne.

Antony
źródło
0

Możesz usunąć swoje pliki danych i jeśli chcesz przejść w ten sposób, poleciłbym na przykład usunąć tylko plik graph.db. W przeciwnym razie będziesz bałaganić informacje uwierzytelniające.

raeffray
źródło