如何在Neo4j中删除/创建数据库?

109

在图形数据库Neo4j中,是否可以像MySQL一样创建/删除不同的数据库?或者至少如何删除现有图形的所有节点和关系,以便在测试中获得干净的设置,例如使用类似于rmrelrm的shell命令?

14个回答

100

删除所有节点和关系的更简单的命令:

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

11
对于这个说法点赞。但需要注意的是,仅仅因为你删除了所有节点,并不意味着你使用的标签就被完全遗忘了。浏览器仍然会显示所有的标签。同样适用于节点属性和关系标签。 - Dilum Ranatunga
1
我指的不是实际的值,而是属性名称本身。 - Dilum Ranatunga
5
数据库中可能不仅存在节点和边,还有索引,而且删除它们更加困难。此外,我刚刚通过大量重复测试(包括删除操作)来破坏了一个数据库实例,并发现物理删除数据库文件,并在重新启动后让Neo4J重新创建这些文件可以明显提高性能。 - flow
我在 Docker 容器中的 neo4j 上遇到了内存不足的问题。 - bolec_kolec
是的,这种方法比上面提到的“rm-rf”更简单、更优雅。 - Vikas Pandey
显示剩余2条评论

100

你可以使用 rm -rf 命令直接删除整个图形目录,因为 Neo4j 不会在图形目录之外存储任何数据:

rm -rf data/*

当然,你可以遍历所有节点并删除它们的关系和节点本身,但这可能会因为测试而过于昂贵...


7
如果你遍历所有节点,让参考节点保持不变可能是一个好主意。 - nawroth
6
图表目录位于哪里? - Pramod
7
在MacOSX上使用Homebrew安装的Neo4j路径为:/usr/local/Cellar/neo4j/community-1.9.2-unix/libexec/data。 - Ashley
5
在执行这个命令之前,也许停止你的Neo4j服务器是一个好主意。 - John Bachir
5
注意 Neo4J Web UI 的用户:删除数据目录将清空您的命令行历史记录! 如果要安全地删除数据库并保留 Web UI 命令行历史记录,请使用rm data/graph.db - Noah Sussman
显示剩余6条评论

52

从Neo4j 2.3版本开始,

我们可以使用删除所有带有关系的节点

MATCH (n)
DETACH DELETE n

目前还没有任何选项可以在Neo4j中创建多个数据库。 您需要制作多个Neo4j数据存储。请参见引用


3
如果您不想使用文件系统,最好的方法是选择最佳答案。 - ThomasH
这种方法的问题在于它不会删除约束和索引。 - Davide D'Alto

47

在Neo4j中创建新数据库

在开始使用Neo4j社区版之前,点击浏览选项

输入图像描述

并选择另一个目录

输入图像描述

输入图像描述

然后点击开始按钮。

输入图像描述

在该目录下创建了新的数据库。


13

快速而有效的方式:

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

11

似乎删除了节点0。我该如何重新创建它? - Will
1
实际上,它跳过了参考节点 (https://github.com/jexp/neo4j-clean-remote-db-addon/blob/master/src/main/java/org/neo4j/server/extension/test/delete/Neo4jDatabaseCleaner.java#L54)。但是如果您的参考节点已经丢失(而您需要它),则需要从干净的数据目录开始,因为还没有 setRefenceNode() 调用(https://dev59.com/E1rUa4cB1Zd3GeqPlp4_)。 - Matt Luongo

7

在不同的neo4j实例上运行你的测试代码。

  1. 将你的neo4j目录复制到一个新位置,用于测试。进入新目录。
  2. 更改端口,以便同时运行测试并正常使用它。要更改端口,请打开conf/neo4j-server.properties文件,并将org.neo4j.server.webserver.port设置为未使用的端口。
  3. 在设置期间启动测试服务器。在拆卸时执行./neo4j stoprm -rf data/graph.db

有关详细信息,请参见neo4j:如何切换数据库?文档


6
最简单的答案是:不行 “重新开始”的最佳方法是:
  • 移动到另一个空数据文件夹
或者
  • 彻底关闭Neo4j
  • 清空旧的数据文件夹
  • 重新启动Neo4j并将空文件夹设置为数据文件夹
有一种方法可以删除所有节点和关系(如此处所述)。
MATCH (n)
OPTIONAL MATCH (n)-[r]-()
DELETE n,r

6
在Neo4j 2.0.0中,不再支持使用“?”。请改用OPTIONAL MATCH代替:
START n=node(*)
OPTIONAL MATCH (n)-[r]-()
delete n,r;

2
我相信从版本3开始,现在可以创建单独的数据库实例,因此它们的位置略有不同。
参考:https://neo4j.com/developer/guide-import-csv/ “--into retail.db”显然是目标数据库,其中不能包含现有数据库。
在我的Ubuntu盒子上,位置在:/var/lib/neo4j/data/databases,我目前只看到graph.db,我相信这必须是默认值。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接