Как удалить / создать базы данных в Neo4j?


104

Можно ли создавать / удалять разные базы данных в базе данных графа Neo4j, как в MySQL? Или, по крайней мере, как удалить все узлы и отношения существующего графа, чтобы получить чистую настройку для тестов, например, с помощью команд оболочки, подобных rmrelили rm?

Ответы:


99

Вы можете просто удалить весь каталог графа с помощью rm -rf, потому что Neo4j не хранит ничего за пределами этого:

rm -rf data/*

Кроме того, вы, конечно, можете перебирать все узлы и удалять их отношения и сами узлы, но это может быть слишком дорого только для тестирования ...


7
И если вы перебираете все узлы, было бы неплохо оставить ссылочный узел.
nawroth

6
Где находится каталог графиков?
Pramod

3
@Pramod находится в каталоге данных каталога neo4j. Вы не можете пропустить это
devshorts

7
На MacOSX с домашним пивом: /usr/local/Cellar/neo4j/community-1.9.2-unix/libexec/data
Эшли

5
Возможно, стоит остановить сервер neo4j перед выполнением этой команды.
John Bachir

98

еще более простая команда для удаления всех узлов и отношений:

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

11
+1 за заявление. Но имейте в виду, что тот факт, что вы удалили все узлы, не означает, что использованные вами метки полностью забыты. Браузер по-прежнему будет показывать все ярлыки. То же самое для свойств узла и меток отношений.
Dilum Ranatunga

@DilumRanatunga 1. ты знаешь, как заставить neo забыть лейблы? 2. как могут сохраняться свойства узла, если узлы удалены или метки отношений, оставшиеся от отношений, удалены?
John Bachir

1
Я не имею в виду реальные значения; Я имею в виду сами названия собственности.
Dilum Ranatunga

5
в БД могут быть не только узлы и ребра, но и индексы, и избавиться от них сложнее. Кроме того, мне только что удалось разрушить экземпляр БД путем массового повторного тестирования, включая удаления, и похоже, что физическое удаление файлов БД и их воссоздание Neo4J при перезапуске дает явное улучшение производительности.
flow

У меня закончилась память на neo4j в контейнере докера.
bolec_kolec

52

Начиная с Neo4j 2.3,

Мы можем удалить все узлы с отношениями ,

MATCH (n)
DETACH DELETE n

В настоящее время в Noe4j нет возможности создавать несколько баз данных. Вам нужно сделать несколько хранилищ данных Neo4j. См. Ссылку .


3
Лучший ответ, если вы не хотите прибегать к файловой системе.
ThomasH

Проблема с этим подходом в том, что он не удаляет ни ограничения, ни индексы,
Давиде

47

Создание новой базы данных в Neo4j

Перед запуском сообщества neo4j нажмите опцию обзора

введите описание изображения здесь

и выберите другой каталог

введите описание изображения здесь

введите описание изображения здесь

и нажмите кнопку «Пуск».

введите описание изображения здесь

Новая база данных создана в этом каталоге


12

быстрый и грязный способ, который отлично работает:

bin/neo4j stop
rm -rf data/
mkdir data
bin/neo4j start

11

Для всех, кому нужен чистый график для запуска набора тестов - https://github.com/jexp/neo4j-clean-remote-db-addon - отличное расширение, позволяющее очистить базу данных с помощью вызова REST. Однако очевидно, что не используйте его в производстве!


Кажется, удаляется узел 0. Как мне его воссоздать?
Will

1
Фактически, он пропускает ссылочный узел ( github.com/jexp/neo4j-clean-remote-db-addon/blob/master/src/… ). Но если ваш ссылочный узел исчез (а он вам нужен), вам нужно будет начать с чистого каталога данных, поскольку еще нет setRefenceNode()вызова ( stackoverflow.com/questions/7186832/… ).
Мэтт Луонго

7

Запустите свой тестовый код на другом экземпляре neo4j.

  1. Скопируйте каталог neo4j в новое место. Используйте это для тестирования. cd в новый каталог.
  2. Измените порт, чтобы вы могли запускать тесты и одновременно использовать его в обычном режиме. Для смены порта откройте conf/neo4j-server.propertiesи установите org.neo4j.server.webserver.portна неиспользуемый.
  3. Запустите тестовый сервер при настройке. Делаю ./neo4j stopи rm -rf data/graph.dbна разборку.

Подробнее см. Neo4j: как переключить базу данных? и документы .


6

В Neo4j 2.0.0? больше не поддерживается. Вместо этого используйте ДОПОЛНИТЕЛЬНОЕ СОГЛАСОВАНИЕ:

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

6

Самый простой ответ: НЕТ

Лучший способ "начать все сначала" - это

  • перейти в другую пустую папку с данными

или

  • полностью закрыть Neo4j
  • очистить старую папку данных
  • перезапустите Neo4j и установите пустую папку в качестве папки данных

Есть способ удалить все узлы и отношения (как описано здесь )

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

1

В 2.0.0 -M6 вы можете выполнить следующий скрипт Cypher для удаления всех узлов и связей:

start n=node(*)
match (n)-[r?]-()
delete n,r

2
К сожалению, это приводит к ошибке в последней версии 2.0.0: SyntaxException: вопросительный знак больше не используется для дополнительных шаблонов - вместо этого используйте OPTIONAL MATCH (строка 1, столбец 26) ==> "start n = node (*) match (n ) - [r?] - () delete n, r "
richj

Я не понимаю downvotes, так как ответ ясно говорит в 2.0.0 -M6 , которая была последней версии , когда я ответил на вопрос, в то время как другие предоставляемые правильные ответы на данный момент последней сборки.
Мартин Зеелер

1

Что касается версии 3, я считаю, что теперь можно создавать отдельные экземпляры базы данных, и поэтому их расположение немного отличается.

Ссылаясь на: https://neo4j.com/developer/guide-import-csv/

--Into retail.db, очевидно, является целевой базой данных, которая не должна содержать существующую базу данных.

В моем ящике Ubuntu это расположение:

/var/lib/neo4j/data/databasesгде я сейчас вижу только то, graph.dbчто, по моему мнению, должно быть по умолчанию.


0

Вы можете удалить свои файлы данных, и, если вы хотите пройти этот путь, я бы рекомендовал удалить, например, только ваш graph.db. В противном случае вы испортите информацию для аутентификации.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.