【问题标题】:neo4j batchimporter is slow with big IDsneo4j batchimporter 对于大 ID 很慢
【发布时间】:2014-10-29 10:02:49
【问题描述】:

我想将大约 4000 万行的 csv 文件导入 neo4j。为此,我尝试使用来自https://github.com/jexp/batch-import 的“batchimporter”。 也许我提供自己的 ID 是个问题。这是例子

nodes.csv

i:id l:标签

315041100 人

201215100 人

315041200 人

rels.csv:

开始 结尾 类型 相关

315041100 201215100 HAS_RELATION 30006

315041200 315041100 HAS_RELATION 30006

batch.properties 的内容:

use_memory_mapped_buffers=true
neostore.nodestore.db.mapped_memory=1000M
neostore.relationshipstore.db.mapped_memory=5000M
neostore.propertystore.db.mapped_memory=4G
neostore.propertystore.db.strings.mapped_memory=2000M
neostore.propertystore.db.arrays.mapped_memory=1000M
neostore.propertystore.db.index.keys.mapped_memory=1500M
neostore.propertystore.db.index.mapped_memory=1500M
batch_import.node_index.node_auto_index=exact


./import.sh graph.db nodes.csv rels.csv

将被正确处理,但大约需要 60 秒!

Importing 3 Nodes took 0 seconds 
Importing 2 Relationships took 0 seconds 
Total import time: 54 seconds 

当我使用较小的 ID - 例如 3150411 而不是 315041100 - 只需 1 秒!

Importing 3 Nodes took 0 seconds 
Importing 2 Relationships took 0 seconds 
Total import time: 1 seconds 

实际上,我会使用更大的 10 位 ID。我不知道我做错了什么。任何人都可以看到错误吗?

  • JDK 1.7
  • batchimporter 2.1.3(带有 neo4j 2.1.3)
  • 操作系统:ubuntu 14.04
  • 硬件:8 核 Intel-CPU,16GB RAM

【问题讨论】:

    标签: csv neo4j


    【解决方案1】:

    我认为问题在于批量导入器将这些 ID 解释为磁盘上的实际物理 ID。所以时间花在文件系统上,将存储文件膨胀到可以容纳那些高 id 的大小。

    您提供的 ID 用于批量导入的“内部”,或者?虽然我不确定如何告诉批量导入器是这种情况。

    @michael-hunger 有什么意见吗?

    【讨论】:

      【解决方案2】:

      问题在于这些 ID 是 Neo4j 内部的,它们代表磁盘记录 ID。如果您在此处提供较高的值,Neo4j 将创建 大量 空记录,直到达到您的 ID。

      因此,要么您从 0 开始创建您的节点 ID,然后将您的 ID 存储为普通节点属性。 或者您根本不提供节点 ID,而仅通过其“业务 ID 值”查找节点

      i:id    id:long    l:label
      0    315041100    Person
      1    201215100    Person
      2    315041200    Person
      
      start:id    end:id    type    relart
      0    1    HAS_RELATION    30006
      2    0    HAS_RELATION    30006
      

      或者你必须配置和使用索引:

      id:long:people    l:label
      315041100    Person
      201215100    Person
      315041200    Person
      
      id:long:people    id:long:people    type    relart
      0    1    HAS_RELATION    30006
      2    0    HAS_RELATION    30006
      

      HTH 迈克尔

      如果使用批处理导入器处理这些 id 太棘手,您也可以编写一个小型 java 或 groovy 程序来导入数据。 见:http://jexp.de/blog/2014/10/flexible-neo4j-batch-import-with-groovy/

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-09-06
        • 2020-05-31
        • 2020-11-13
        • 1970-01-01
        • 2021-01-07
        • 1970-01-01
        • 1970-01-01
        • 2013-05-31
        相关资源
        最近更新 更多