MAX OS X 10.11.6, neo4j 3.2.0
proste zapytanie w bazie danych bez relacji (relacje zostały usunięte MATCH ()-[a]-() delete a
);
Ustawić:
match ()-[a]-() return count(a);
+----------+
| count(a) |
+----------+
| 576333 |
+----------+
Następnie chcę wyczyścić bazę danych:
match (a) delete a;
i po 5 minutach dostaję
Za mało pamięci, aby wykonać prądzadanie. Spróbuj zwiększyć „dbms.memory.heap.max_size” w konfiguracji neo4j (zwykle w „conf / neo4j.conf” lub, jeśli używasz Neo4j Desktop, znaleziony przez interfejs użytkownika) lub jeśli prowadzisz instalację osadzoną zwiększ stertę, używając flagi wiersza polecenia „-Xmx”, a następnie ponownie uruchom bazę danych.
Pomaga to jednak:
MATCH (n) with n limit 100000 delete (n) ;
0 wierszy dostępnych po 302 ms, zużyte po kolejnych 0 ms
Usunięto 100000 węzłów
Czy ktoś mógłby skomentować takie zachowanie bazy danych? Czy to błąd, czy funkcja?
Odpowiedzi:
1 dla odpowiedzi № 1Po pierwsze, jeśli chcesz usunąć wszystkie swoje dane, rozważ użycie DETACH DELETE
zamiast DELETE
dowództwo.
Spowoduje to usunięcie wszystkich relacji między węzłami, a następnie usunięcie węzła. W przeciwnym razie z MATCH (n) with n limit 100000 delete (n)
usuniesz tylko sieroce węzły.
Wszystkie modyfikacje danych w transakcji są przechowywane w pamięci. Więc jeśli spróbujesz usunąć 10G of data
od razu będziesz potrzebować 10G of RAM
.
Aby uniknąć dodawania pamięci do sterty Java w celu rozwiązania tego problemu, należy wykonać wsadowe operacje.
Jednym ze sposobów jest powtórzenie tego zapytania, dopóki nie uzyska wyniku 0
: MATCH (n) WITH n LIMIT 100000 DETACH DELETE n RETURN count(*)
.
Istnieje kilka pomocników w projekcie APOC, które mogą ci pomóc w podobny sposób apoc.periodic.commit
. Spójrz tutaj: https://neo4j-contrib.github.io/neo4j-apoc-procedures/#_further_functions
Twoje zdrowie