Как удалить встроенную базу данных neo4j с помощью Java? - PullRequest
10 голосов
/ 17 марта 2011

Класс GraphDatabaseService, по-видимому, не предоставляет какого-либо метода удаления / очистки базы данных.Есть ли какие-либо другие средства для удаления / очистки текущей встроенной базы данных с Java?

Ответы [ 4 ]

6 голосов
/ 17 марта 2011

Просто выполните GraphDatabaseService.shutdown () и после его возвращения удалите файлы базы данных (используя код, подобный this ).

Вы также можете использовать getAllNodes () для перебора всех узлов, удаления их связей и самих узлов.Возможно, избегайте удаления ссылочного узла.

Если ваш вариант использования тестирует, вы можете использовать ImpermanentGraphDatabase , который удалит базу данных после завершения работы.

Для использования ImpermanentGraphDatabaseдобавьте в свой проект jar / зависимость тестов ядра neo4j.Найдите файл с именем, заканчивающимся на «tests.jar» на maven central .

1 голос
/ 19 декабря 2012

Как сказал Наврот, для тестирования вы должны использовать ImpermanentGraphDatabase. Это в значительной степени автоматически исправляет все ваши проблемы.

Если вы не тестируете, есть два способа. Обычно у меня есть два метода. Одним из них является метод clearDB, в котором я рекурсивно удаляю путь к БД. Для этого я использую библиотеку FileUtils, и она представляет собой одну строку кода:

FileUtils.deleteRecursively(new File(DB_PATH));

Другой - удалить все узлы в базе данных, КРОМЕ СПРАВОЧНОГО УЗЛА, используя метод removeAllNodes Для этого есть простой запрос, который вы выполняете так:

engine.execute("START n = node(*), ref = node(0)  WHERE n<>ref DELETE n");

Важно отметить, что вам нужно вызывать метод clearDB ПРЕЖДЕ чем вы создадите новый объект EmbeddedGraphDatabase. Метод removeAllNodes называется ПОСЛЕ того, как вы создали этот объект.

1 голос
/ 14 апреля 2011

Я думаю, что самый простой способ - это удалить каталог с базой данных neo4j. Я делаю это в своих тестах junit после запуска всех тестов. Вот функция, которую я использую, где file - это каталог neo4j:

public static void deleteFileOrDirectory( final File file ) {
    if ( file.exists() ) {
        if ( file.isDirectory() ) {
            for ( File child : file.listFiles() ) {
                deleteFileOrDirectory( child );
            }
        }
        file.delete();
    }
}

Я думаю, что нашел это в вики neo4j. Я нашел в этом обсуждении другое решение. Вы можете использовать Blueprint API , который предоставляет метод clear.

0 голосов
/ 06 декабря 2014

Существует вспомогательный класс

Neo4jHelper.cleanDb(db);

(взято из org.springframework.data.neo4j.support.node.Neo4jHelper, а ссылка на БД, на которую вы ссылаетесь - это GraphDatabaseService)

Вытакже есть возможность сбросить его:

Neo4jHelper.dumpDb();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...