0

我在使用 BatchInserter 期间观察到严重的减速,希望得到帮助或确认(所以我会知道 neo4J 是否是一个可行的选择)。

配置数据如下。

基本上,我们正在评估 Neo4J 在我们的链接项目中的使用,我已经准备了包含消费者、地址及其家庭和县文件的文件。

每个尺寸约为 200M - 400M。

开始很好。

消费者负载 216M 无索引 - 每 5 秒 1 M 有 2 个 Lucene 索引 每 15 秒 1M。

注意到下一步减速,但我将其归因于地址文件 170M 没有索引的地址加载的双倍属性 - 每 15 秒 1M。

下一次减速非常明显,即使在数据库上创建 BatchInserter 也需要 10 分钟才能立即生效。

每 70 秒处理 350M - 1M 的消费者负载,并逐渐减慢关闭时间(如数小时)。

现在情况变得更糟了。1.5 亿个家庭 - 第一个 1M 花了 1000 秒,现在虽然在 10M 之后它下降到 100 秒的 1M 记录(家庭只有 3 个属性)。

  1. 为什么它会因为基本上将实体附加到数据库而减慢,除非涉及索引,否则在任何其他数据库实现中从未见过它。我手动创建的索引有可能变成自动的吗?

      BatchInserterIndexProvider indexProvider = new LuceneBatchInserterIndexProvider(inserter);
      BatchInserterIndex iNames = indexProvider.nodeIndex("Names", MapUtil.stringMap("type","exact"));
      ...
      for(String name : fullNames) {
                iNames.add(node,MapUtil.map("names",name));
      }
      ...
       indexProvider.shutdown();
       inserter.shutdown();
    
  2. 我在慢速关系插入中使用了先前线程中的设置。还有什么可以在机器或程序上设置的吗?

我对 Java 不是很精通,特别是 Jvm 设置和环境。所以当谈到运行时,你的解释要温和。

服务器是 Windows 2008
256GB 内存和 42 个 2.8 核 (AMD)。该驱动器不是企业级的,但足够快。
Neo4j 在 Milestone 6 版本 2.0
和批量加载是用 Java 编写的。JDK 7

PS 不相关,但任何人都知道为什么我不能将其发布到 Google 组 Neo4j,尝试了 3 次。

4

0 回答 0