java - 批量插入修改后启动 Neo4j 服务器变慢

标签 java neo4j graph-databases

我有一个关于在 Neo4j Java API 中创建新的/修改现有的大数据库的问题。 以前,我尝试过使用简单的方法来修改数据库中每个节点的标签,这确实非常耗时。 我找到了一个解决方案,那就是“BatchInserter”。

config.put("neostore.nodestore.db.mapped_memory", "50000M");
    db = BatchInserters.inserter("dblp.db", config);
    BatchInserterIndexProvider indexProvider = new LuceneBatchInserterIndexProvider(db);
    index = indexProvider.nodeIndex("dblpIndex", MapUtil.stringMap("type", "exact"));
    index.setCacheCapacity(URI_PROPERTY, 500000001);

if ((totalEntity % 50000) == 0) {
            System.out.println("entities: " + totalEntity);
            index.flush();
        }

通过这种方法创建/修改数据库非常快。然而,在此之后,当我想在 Java/Cypher API 中使用这个数据库时,需要花费很多时间才能启动。 我想应该和一些索引的东西有关吧!但我不知道如何解决它。您能指导我吗?

编辑以澄清

  • 我不运行任何查询,并且在使用服务器或 Java API 启动时都需要时间。

  • 我有另一个数据库,它在启动时速度非常快。我比较了他们的 message.log

较慢的一个瓶颈是:

2016-02-03 22:25:54.730+0000 INFO [o.n.k.i.DiagnosticsManager] --- INITIALIZED diagnostics END ---

2016-02-03 22:28:18.408+0000 INFO [o.n.k.KernelHealth] Kernel health set to OK

在这行 message.log 之后需要三分钟

但是,对于磁盘上具有相同容量的更快速度:

2016-02-03 22:30:28.254+0000 INFO [o.n.k.i.DiagnosticsManager] --- INITIALIZED diagnostics END ---

2016-02-03 22:30:43.380+0000 INFO [o.n.k.KernelHealth] Kernel health set to OK

只需几秒钟。

<小时/>

我已经检查了插入代码。我在程序结束时使用了 db.shutdown(),我记得它是消耗更多时间/内存的部分。

最后一件事可能有用的是:对于更快的,我可以看到一些 lucene 节点索引初始化(例如 _0.fdt: 2015-12-23T12:52:33-0800 - 143.00 B, _1.fdx: 2015 -12-23T12:53:13-0800 - 3.81 MB) 在 message.log 中,但在较慢的 message.log 文件及其相应目录 (database.db/index/lucene/节点/)

最佳答案

怀疑:你没有打电话BatchInserter.shutdown()

显式关闭批插入器至关重要。如果没有,启动数据存储将导致启动时进行健全性检查(最好情况)或数据存储不可用(不是最好情况)。

关于java - 批量插入修改后启动 Neo4j 服务器变慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35168570/

相关文章:

java - 过河者的一般 DFS

java - Gradle Kotlin DSL : Extract contents from dependency

java - 这个选择排序代码有什么问题?

javascript - 将平面 JSON 对象转换为树数据结构

java - eden 和其他代的 java 堆分配如何影响垃圾收集和性能?

neo4j - 在 Neo4j 的 Dijkstra 算法中使用不止一次属性

mysql - 如何加快从mysql到neo4j的插入速度?

scala - Janusgraph - 检查和获取两个顶点之间的边缘的有效方法

neo4j 查询排除与具有某些属性的节点相关的节点

mysql - 将图形数据库加入 RDBMS?