【问题标题】:Clear Neo4j Embedded database清除 Neo4j 嵌入式数据库
【发布时间】:2015-10-14 09:00:34
【问题描述】:

使用新版本的 Spring Data Neo4j 我无法使用 Neo4jHelper.cleanDb(db);

那么,在我的应用程序中完全清除嵌入式 Neo4j 数据库的最有效方法是什么?

为此我已经实现了自己的 util 方法,但是这个方法很慢:

public static void cleanDb(Neo4jTemplate template) {
    template.query("MATCH (n) OPTIONAL MATCH (n)-[r]-() DELETE n,r", null);
}

如何正确清除/删除数据库?

更新

这是类似的问题How to reset / clear / delete neo4j database?,但我不知道如何以编程方式关闭 Embedded Neo4j 以及删除后如何启动它。

我使用 Spring Data Neo4j 并根据用户请求清除/删除现有数据库并使用新数据重新创建它。建议调用关闭方法后如何启动新的嵌入式数据库?

用例:

在我已配置嵌入式数据库的工作应用程序上:

GraphDatabaseService graphDb = new GraphDatabaseFactory()
                .newEmbeddedDatabaseBuilder(environment.getProperty(NEO4J_EMBEDDED_DATABASE_PATH_PROPERTY))
                .setConfig(GraphDatabaseSettings.node_keys_indexable, "name,description")
                .setConfig(GraphDatabaseSettings.node_auto_indexing, "true")
                .newGraphDatabase();

另外,我用 1000000 个节点预先填充了这个数据库。根据用户请求,我需要清除此数据库并用新数据填充它。如何正确快速的清空已有数据库?

我可以在database.shutdown() 之后调用 Neo4j 数据库 API 来创建新节点还是需要在它之前初始化新数据库?

【问题讨论】:

标签: neo4j spring-data-neo4j-4


【解决方案1】:

查看相关问题的其他答案。在 java 内部,您可以使用 GraphDatabaseService#shutdown() 方法关闭嵌入式数据库。

从那里,有很多不同的方法可以删除底层目录see this other answer

所以一般的答案还是一样的:

  1. 使用 neo4j java API 关闭数据库
  2. 从磁盘中删除数据库内容

【讨论】:

  • 谢谢!还有一个问题——如果我需要在一个工作的应用程序上多次删除/清除数据库——我是否需要执行一些额外的步骤才能在删除后立即开始使用新的嵌入式数据库?
  • 否;嵌入式数据库与磁盘上的目录相关联。只需创建一个新数据库,它就会自动创建任何必要的目录。
  • 您必须在插入新数据之前创建一个新数据库。如果您在关机后尝试插入数据,则会失败。请将此问题标记为已完成并继续 - 如果您还有其他问题,请打开新主题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多