Подтвердить что ты не робот

Лучший способ удалить все узлы и отношения в Cypher

Каков наилучший способ очистки графика от всех узлов и связей через Cypher?

В http://neo4j.com/docs/stable/query-delete.html#delete-delete-a-node-and-connected-relationships пример

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

имеет примечание:

Этот запрос не предназначен для удаления больших объемов данных

Итак, лучше ли следующее?

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

и

MATCH (n) DELETE n

Или есть ли другой способ, который лучше для больших графов?

4b9b3361

Ответ 1

Как вы уже упоминали, самый простой способ - остановить Neo4j, отбросить папку data/graph.db и перезагрузить ее.

Удаление большого графика через Cypher будет всегда медленнее, но все же выполнимо, если вы используете правильный размер транзакции для предотвращения проблем с памятью (помните, что транзакция сначала создается в памяти, прежде чем они будут зафиксированы). Обычно 50-100 тыс. Атомных операций - хорошая идея. Вы можете добавить ограничение в оператор удаления для управления размерами tx и сообщить, сколько узлов было удалено. Перезапустите этот оператор, пока не вернется значение 0:

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

Ответ 2

Согласно официальному документу здесь:

MATCH (n)
DETACH DELETE n

но также сказано This query isnt for deleting large amounts of data. так что лучше использовать с ограничением.

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

Ответ 3

Написал этот маленький script, добавил его в мою папку NEO/bin.

Протестировано в сообществе v3.0.6

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

Я использую его, когда мои нагрузки LOAD CSV являются дрянной.

Надеюсь, что это поможет

Ответ 4

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

В тестовом прогоне удалены отношения 50000, завершенные после 589 мс.