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

Posted

技术标签:

【中文标题】如何在 Neo4j 中删除/创建数据库?【英文标题】:How to delete/create databases in Neo4j? 【发布时间】:2011-05-28 18:21:15 【问题描述】:

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

【问题讨论】:

【参考方案1】:

您可以使用 rm -rf 删除整个图形目录,因为 Neo4j 不会存储除此之外的任何内容:

rm -rf data/*

此外,您当然可以遍历所有节点并删除它们的关系和节点本身,但这对于测试而言可能成本太高...

【讨论】:

如果您遍历所有节点,最好让参考节点保留。 图表目录在哪里? 在 MacOSX 上使用自制软件:/usr/local/Cellar/neo4j/community-1.9.2-unix/libexec/data 在执行此命令之前停止 Neo4j 服务器可能是个好主意。 Neo4J Web UI 的用户请注意:删除数据目录将清除您的命令行历史记录!要在保持 Web UI 命令行历史记录完整的同时安全地删除您的数据库,请使用rm data/graph.db【参考方案2】:

对于需要干净图表来运行测试套件的任何其他人 - https://github.com/jexp/neo4j-clean-remote-db-addon 是一个很好的扩展,允许通过 REST 调用清除数据库。显然,不要在生产中使用它!

【讨论】:

似乎删除了节点0,如何重新创建? 其实是跳过了引用节点(github.com/jexp/neo4j-clean-remote-db-addon/blob/master/src/…)。但是,如果您的参考节点已经消失(并且您需要它),您需要从一个干净的数据目录开始,因为还没有 setRefenceNode() 调用(***.com/questions/7186832/…)。【参考方案3】:

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

    将neo4j 目录复制到新位置。使用它进行测试。 cd 进入新目录。 更改端口,以便您可以同时运行测试和正常使用它。更改端口打开conf/neo4j-server.properties 并将org.neo4j.server.webserver.port 设置为未使用的端口。 在设置时启动测试服务器。在拆解时执行./neo4j stoprm -rf data/graph.db

有关详细信息,请参阅neo4j: How to Switch Database? 和docs。

【讨论】:

【参考方案4】:

在 2.0.0 -M6 中可以执行以下 Cypher 脚本来删除所有节点和关系:

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

【讨论】:

不幸的是,这会在最新的 2.0.0 版本中产生错误:SyntaxException:问号不再用于可选模式 - 改为使用 OPTIONAL MATCH(第 1 行,第 26 列)==>“开始 n =node(*) 匹配 (n)-[r?]-() 删除 n,r" 我不明白反对意见,因为答案清楚地表明 In 2.0.0 -M6,这是我回答问题时的最新版本,而其他提供的正确当前最新版本的答案。【参考方案5】:

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

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

【讨论】:

声明+1。但是请注意,仅仅因为您删除了所有节点,并不意味着您使用的标签完全被遗忘了。浏览器仍将显示所有标签。节点属性和关系标签也是如此。 @DilumRanatunga 1. 你知道如何让 neo 忘记标签吗? 2. 如果删除了节点,或者删除了关系的关系标签,节点属性如何保持? 我不是指实际值;我的意思是属性名称本身。 在数据库中可能不仅有节点和边,还有索引,要去掉这些比较困难。此外,我只是通过包括删除在内的大量重复测试设法破坏了数据库实例,看起来物理删除数据库文件并让 Neo4J 在重新启动时重新创建它们带来了性能的明显提升。 我在 docker 容器中的 neo4j 上内存不足。【参考方案6】:

在 Neo4j 2.0.0 中?不再支持。改用 OPTIONAL MATCH:

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

【讨论】:

【参考方案7】:

在 Neo4j 中创建新数据库

在启动 neo4j 社区之前点击浏览选项

然后选择一个不同的目录

然后点击开始按钮。

在该目录上创建新数据库

【讨论】:

【参考方案8】:

快速而肮脏的方式,效果很好:

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

【讨论】:

【参考方案9】:

最简单的答案是:

“重新开始”的最佳方式是

移动到另一个空数据文件夹

完全关闭 Neo4j 清空旧数据文件夹 重启 Neo4j 并将空文件夹设置为数据文件夹

有一种方法可以删除所有节点和关系(如here 所述)

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

【讨论】:

【参考方案10】:

你可以删除你的数据文件,如果你想通过这种方式,我建议只删除你的graph.db,例如。否则,您将弄乱您的身份验证信息。

【讨论】:

【参考方案11】:

从 Neo4j 2.3,

我们可以删除all nodes with relationships,

MATCH (n)
DETACH DELETE n

目前没有任何选项可以在 Noe4j 中创建多个数据库。您需要对 Neo4j 数据进行多次存储。见reference。

【讨论】:

如果您不想诉诸文件系统的最佳答案。 这种方法的问题是它不会删除约束和索引【参考方案12】:

从版本 3 开始,我相信现在可以创建单独的数据库实例,因此它们的位置略有不同。

参考:https://neo4j.com/developer/guide-import-csv/

--into retail.db 显然是目标数据库,它不能包含现有数据库。

在我的 Ubuntu 机器上,位置在:

/var/lib/neo4j/data/databases 我目前只看到graph.db,我认为它必须是默认值。

【讨论】:

【参考方案13】:

如果你有非常大的数据库,

`MATCH (n) DETACH DELETE n`

会花费很多时间,并且数据库可能会卡住(我尝试使用它,但不适用于非常大的数据库)。所以这就是我在 linux 服务器上删除一个更大的 Neo4j 数据库的方法。

    首先停止正在运行的 Neo4j 数据库。

    sudo neo4j stop

    其次,删除neo4j文件夹中data文件夹内的databases文件夹和transactions文件夹。那么在哪里可以找到 neo4j 文件夹?你可以通过执行which neo4j找到neo4j的可执行路径。检查通过该路径的 data 文件夹(它位于 neo4j 文件夹内)。进入 data 文件夹,您会看到 databasestransactions 文件夹。

    rm -rf databases/rm -rf transactions/

    重启 Neo4j 服务器

    sudo neo4j start

【讨论】:

以上是关于如何在 Neo4j 中删除/创建数据库?的主要内容,如果未能解决你的问题,请参考以下文章

neo4jorin走索引吗

如何使用 Django 和 Neo4j 数据库创建 GraphQL API?

neo4j:如何更改数据库存储位置?

Neo4j - 图形数据科学库 - 如何对图形目录中的命名图形进行密码查询?

知识图谱Neo4j Cypher查询语言详解

手把手教你快速入门知识图谱 - Neo4J教程